diff --git a/experimental/dart-jaspr-todomvc/.gitignore b/experimental/dart-jaspr-todomvc/.gitignore new file mode 100644 index 000000000..a8c7d1d6f --- /dev/null +++ b/experimental/dart-jaspr-todomvc/.gitignore @@ -0,0 +1,2 @@ +.dart_tool/ +build/ diff --git a/experimental/dart-jaspr-todomvc/README.md b/experimental/dart-jaspr-todomvc/README.md new file mode 100644 index 000000000..6fefb9c90 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/README.md @@ -0,0 +1,22 @@ +# todomvc + +A Jaspr implementation of todomvc, written in Dart and compilable to either JavaScript or WebAssembly. + +## Setup + +Install [dart](https://dart.dev/get-dart). + +## Running the project + +Run your project using `dart run jaspr_cli:jaspr serve`. + +The development server will be available on `http://localhost:8080`. + +## Building the project + +Build your project using either: + +- Generate JavaScript via: `jaspr build -O4 --extra-js-compiler-option=--no-minify` +- Generate WebAssembly via: `jaspr build -O4 --experimental-wasm --extra-wasm-compiler-option=--no-strip-wasm` + +The output will be located inside the `build/jaspr/` directory. diff --git a/experimental/dart-jaspr-todomvc/analysis_options.yaml b/experimental/dart-jaspr-todomvc/analysis_options.yaml new file mode 100644 index 000000000..6f2396bc6 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/analysis_options.yaml @@ -0,0 +1,9 @@ +include: package:lints/recommended.yaml + +analyzer: + # Jaspr has a custom lint package 'jaspr_lints', which needs the 'custom_lint' analyzer plugin. + # + # Unfortunately, running 'dart analyze' does not pick up the custom lints. Instead, you need to + # run a separate command for this: `jaspr analyze` + plugins: + - custom_lint diff --git a/experimental/dart-jaspr-todomvc/build.log b/experimental/dart-jaspr-todomvc/build.log new file mode 100644 index 000000000..3b77a8765 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/build.log @@ -0,0 +1,47 @@ ++ set -e ++ echo 'Current Dart SDK version' +Current Dart SDK version ++ dart --version +Dart SDK version: 3.9.0-edge.eb41d43c0dba5021ba37b11e54e0fe09f7b192b5 (main) (Tue May 6 04:09:12 2025 -0700) on "macos_arm64" ++ echo 'Fetching dependencies' +Fetching dependencies ++ dart pub get +Resolving dependencies... +Downloading packages... + _fe_analyzer_shared 80.0.0 (82.0.0 available) + analyzer 7.3.0 (7.4.4 available) + analyzer_plugin 0.12.0 (0.13.0 available) + custom_lint 0.7.3 (0.7.5 available) + custom_lint_builder 0.7.3 (0.7.5 available) + custom_lint_core 0.7.1 (0.7.5 available) + dds 4.2.7 (5.0.0 available) + devtools_shared 10.0.2 (11.2.0 available) + dwds 24.3.5 (24.3.10 available) + freezed_annotation 2.4.4 (3.0.0 available) + http 1.3.0 (1.4.0 available) + json_rpc_2 3.0.3 (4.0.0 available) + mime 1.0.6 (2.0.0 available) + shelf_web_socket 2.0.1 (3.0.0 available) + vm_service 14.3.1 (15.0.0 available) + web 1.1.0 (1.1.1 available) +Got dependencies! +16 packages have newer versions incompatible with dependency constraints. +Try `dart pub outdated` for more information. ++ echo 'Building dart2js version in -O4' +Building dart2js version in -O4 ++ rm -rf build dist/out-dart2js-O4 ++ dart run jaspr_cli:jaspr build -O4 --extra-js-compiler-option=--disable-program-split +Building jaspr for client rendering mode. +⠋ Building web assets...... ⠙ Building web assets...... (0ms) ✓ Completed building web assets. (10.7s) +Completed building project to /build/jaspr. ++ mkdir -p dist/out-dart2js-O4 ++ cp build/jaspr/index.html build/jaspr/base.css build/jaspr/index.css build/jaspr/favicon.ico build/jaspr/main.dart.js dist/out-dart2js-O4 ++ echo 'Building dart2js version in -O4' +Building dart2js version in -O4 ++ rm -rf build dist/out-dart2wasm-O2 ++ dart run jaspr_cli:jaspr build -O2 --experimental-wasm +Building jaspr for client rendering mode. +⠋ Building web assets...... ⠙ Building web assets...... (0ms) ✓ Completed building web assets. (11.3s) +Completed building project to /build/jaspr. ++ mkdir -p dist/out-dart2wasm-O2 ++ cp build/jaspr/index.html build/jaspr/base.css build/jaspr/index.css build/jaspr/favicon.ico build/jaspr/main.dart.js build/jaspr/main.mjs build/jaspr/main.wasm dist/out-dart2wasm-O2 diff --git a/experimental/dart-jaspr-todomvc/build.sh b/experimental/dart-jaspr-todomvc/build.sh new file mode 100755 index 000000000..d80dc7aa3 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/build.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +JS_OUT=dist/out-dart2js-O4 +WASM_OUT=dist/out-dart2wasm-O2 + +set -x +set -e + +echo "Current Dart SDK version" +dart --version + +echo "Fetching dependencies" +dart pub get + +# NOTE: For profiling add the following argument to get symbols +# --extra-js-compiler-option=--no-minify +echo "Building dart2js version in -O4" +rm -rf build $JS_OUT +dart run jaspr_cli:jaspr build -O4 --extra-js-compiler-option=--disable-program-split +mkdir -p $JS_OUT +cp build/jaspr/{index.html,base.css,index.css,favicon.ico,main.dart.js} $JS_OUT + +# NOTE: For profiling add the following argument to get symbols +# --extra-wasm-compiler-option=--no-strip-wasm +echo "Building dart2js version in -O4" +rm -rf build $WASM_OUT +dart run jaspr_cli:jaspr build -O2 --experimental-wasm +mkdir -p $WASM_OUT +cp build/jaspr/{index.html,base.css,index.css,favicon.ico,main.dart.js,main.mjs,main.wasm} $WASM_OUT diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/base.css b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/base.css new file mode 100644 index 000000000..d3938100c --- /dev/null +++ b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/base.css @@ -0,0 +1,141 @@ +hr { + margin: 20px 0; + border: 0; + border-top: 1px dashed #c5c5c5; + border-bottom: 1px dashed #f7f7f7; +} + +.learn a { + font-weight: normal; + text-decoration: none; + color: #b83f45; +} + +.learn a:hover { + text-decoration: underline; + color: #787e7e; +} + +.learn h3, +.learn h4, +.learn h5 { + margin: 10px 0; + font-weight: 500; + line-height: 1.2; + color: #000; +} + +.learn h3 { + font-size: 24px; +} + +.learn h4 { + font-size: 18px; +} + +.learn h5 { + margin-bottom: 0; + font-size: 14px; +} + +.learn ul { + padding: 0; + margin: 0 0 30px 25px; +} + +.learn li { + line-height: 20px; +} + +.learn p { + font-size: 15px; + font-weight: 300; + line-height: 1.3; + margin-top: 0; + margin-bottom: 0; +} + +#issue-count { + display: none; +} + +.quote { + border: none; + margin: 20px 0 60px 0; +} + +.quote p { + font-style: italic; +} + +.quote p:before { + content: "“"; + font-size: 50px; + opacity: 0.15; + position: absolute; + top: -20px; + left: 3px; +} + +.quote p:after { + content: "”"; + font-size: 50px; + opacity: 0.15; + position: absolute; + bottom: -42px; + right: 3px; +} + +.quote footer { + position: absolute; + bottom: -40px; + right: 0; +} + +.quote footer img { + border-radius: 3px; +} + +.quote footer a { + margin-left: 5px; + vertical-align: middle; +} + +.speech-bubble { + position: relative; + padding: 10px; + background: rgba(0, 0, 0, 0.04); + border-radius: 5px; +} + +.speech-bubble:after { + content: ""; + position: absolute; + top: 100%; + right: 30px; + border: 13px solid transparent; + border-top-color: rgba(0, 0, 0, 0.04); +} + +.learn-bar > .learn { + position: absolute; + width: 272px; + top: 8px; + left: -300px; + padding: 10px; + border-radius: 5px; + background-color: rgba(255, 255, 255, 0.6); + transition-property: left; + transition-duration: 500ms; +} + +@media (min-width: 899px) { + .learn-bar { + width: auto; + padding-left: 300px; + } + + .learn-bar > .learn { + left: 8px; + } +} diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/favicon.ico b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/favicon.ico new file mode 100644 index 000000000..bd829b4fc Binary files /dev/null and b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/favicon.ico differ diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/index.css b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/index.css new file mode 100644 index 000000000..fb6fb83ef --- /dev/null +++ b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/index.css @@ -0,0 +1,388 @@ +@charset "utf-8"; + +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #111111; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-weight: 300; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp h1 { + position: absolute; + top: -140px; + width: 100%; + font-size: 80px; + font-weight: 200; + text-align: center; + color: #b83f45; + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.new-todo { + padding: 16px 16px 16px 60px; + height: 65px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +.toggle-all { + width: 1px; + height: 1px; + border: none; /* Mobile Safari */ + opacity: 0; + position: absolute; + right: 100%; + bottom: 100%; +} + +.toggle-all + label { + display: flex; + align-items: center; + justify-content: center; + width: 45px; + height: 65px; + font-size: 0; + position: absolute; + top: -65px; + left: -0; +} + +.toggle-all + label:before { + content: "❯"; + display: inline-block; + font-size: 22px; + color: #949494; + padding: 10px 27px 10px 27px; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.toggle-all:checked + label:before { + color: #484848; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: calc(100% - 43px); + padding: 12px 16px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle { + opacity: 0; +} + +.todo-list li .toggle + label { + /* + Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433 + IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/ + */ + background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23949494%22%20stroke-width%3D%223%22/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: center left; +} + +.todo-list li .toggle:checked + label { + background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%2359A193%22%20stroke-width%3D%223%22%2F%3E%3Cpath%20fill%3D%22%233EA390%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22%2F%3E%3C%2Fsvg%3E"); +} + +.todo-list li label { + word-break: break-all; + padding: 15px 15px 15px 60px; + display: block; + line-height: 1.2; + transition: color 0.4s; + font-weight: 400; + color: #484848; +} + +.todo-list li.completed label { + color: #949494; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #949494; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover, +.todo-list li .destroy:focus { + color: #c18585; +} + +.todo-list li .destroy:after { + content: "×"; + display: block; + height: 100%; + line-height: 1.1; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + padding: 10px 15px; + height: 20px; + text-align: center; + font-size: 15px; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ""; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li span { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li span:hover { + border-color: #db7676; +} + +.filters li span.selected { + border-color: #ce4646; +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 19px; + text-decoration: none; + cursor: pointer; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #4d4d4d; + font-size: 11px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio: 0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} + +:focus, +.toggle:focus + label, +.toggle-all:focus + label { + box-shadow: 0 0 2px 2px #cf7d7d; + outline: 0; +} diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/index.html b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/index.html new file mode 100644 index 000000000..c9270857c --- /dev/null +++ b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/index.html @@ -0,0 +1,22 @@ + + + + + + + + TodoMVC: Jaspr + + + + + + + + + + + diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/main.dart.js b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/main.dart.js new file mode 100644 index 000000000..2ef24be09 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/main.dart.js @@ -0,0 +1,4491 @@ +(function dartProgram(){function copyProperties(a,b){var s=Object.keys(a) +for(var r=0;r=0)return true +if(typeof version=="function"&&version.length==0){var q=version() +if(/^\d+\.\d+\.\d+\.\d+$/.test(q))return true}}catch(p){}return false}() +function inherit(a,b){a.prototype.constructor=a +a.prototype["$i"+a.name]=a +if(b!=null){if(z){Object.setPrototypeOf(a.prototype,b.prototype) +return}var s=Object.create(b.prototype) +copyProperties(a.prototype,s) +a.prototype=s}}function inheritMany(a,b){for(var s=0;s4294967295)throw A.f(A.i1(a,0,4294967295,"length",null)) +return J.hR(new Array(a),b)}, +hQ(a,b){if(a<0)throw A.f(A.bL("Length must be a non-negative integer: "+a,null)) +return A.b(new Array(a),b.h("p<0>"))}, +hR(a,b){var s=A.b(a,b.h("p<0>")) +s.$flags=1 +return s}, +hS(a,b){return J.ht(a,b)}, +as(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.b1.prototype +return J.bZ.prototype}if(typeof a=="string")return J.az.prototype +if(a==null)return J.b2.prototype +if(typeof a=="boolean")return J.bY.prototype +if(Array.isArray(a))return J.p.prototype +if(typeof a!="object"){if(typeof a=="function")return J.a4.prototype +if(typeof a=="symbol")return J.b5.prototype +if(typeof a=="bigint")return J.b3.prototype +return a}if(a instanceof A.h)return a +return J.f2(a)}, +eo(a){if(typeof a=="string")return J.az.prototype +if(a==null)return a +if(Array.isArray(a))return J.p.prototype +if(typeof a!="object"){if(typeof a=="function")return J.a4.prototype +if(typeof a=="symbol")return J.b5.prototype +if(typeof a=="bigint")return J.b3.prototype +return a}if(a instanceof A.h)return a +return J.f2(a)}, +bJ(a){if(a==null)return a +if(Array.isArray(a))return J.p.prototype +if(typeof a!="object"){if(typeof a=="function")return J.a4.prototype +if(typeof a=="symbol")return J.b5.prototype +if(typeof a=="bigint")return J.b3.prototype +return a}if(a instanceof A.h)return a +return J.f2(a)}, +jw(a){if(typeof a=="number")return J.ay.prototype +if(typeof a=="string")return J.az.prototype +if(a==null)return a +if(!(a instanceof A.h))return J.aD.prototype +return a}, +q(a,b){if(a==null)return b==null +if(typeof a!="object")return b!=null&&a===b +return J.as(a).L(a,b)}, +hr(a,b){if(typeof b==="number")if(Array.isArray(a)||A.h3(a,a[v.dispatchPropertyName]))if(b>>>0===b&&b>>0===b&&b>>6}, +dq(a){a=a+((a&67108863)<<3)&536870911 +a^=a>>>11 +return a+((a&16383)<<15)&536870911}, +eW(a,b,c){return a}, +f5(a){var s,r +for(s=$.au.length,r=0;r").A(d).h("aZ<1,2>")) +return new A.aj(a,b,c.h("@<0>").A(d).h("aj<1,2>"))}, +aE:function aE(){}, +bQ:function bQ(a,b){this.a=a +this.$ti=b}, +bn:function bn(){}, +af:function af(a,b){this.a=a +this.$ti=b}, +ai:function ai(a){this.a=a}, +dm:function dm(){}, +c:function c(){}, +Z:function Z(){}, +a6:function a6(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +aj:function aj(a,b,c){this.a=a +this.b=b +this.$ti=c}, +aZ:function aZ(a,b,c){this.a=a +this.b=b +this.$ti=c}, +aA:function aA(a,b,c){var _=this +_.a=null +_.b=a +_.c=b +_.$ti=c}, +bm:function bm(a,b,c){this.a=a +this.b=b +this.$ti=c}, +cv:function cv(a,b){this.a=a +this.b=b}, +b0:function b0(){}, +bh:function bh(a,b){this.a=a +this.$ti=b}, +bG:function bG(){}, +hc(a){var s=v.mangledGlobalNames[a] +if(s!=null)return s +return"minified:"+a}, +h3(a,b){var s +if(b!=null){s=b.x +if(s!=null)return s}return t.p.b(a)}, +o(a){var s +if(typeof a=="string")return a +if(typeof a=="number"){if(a!==0)return""+a}else if(!0===a)return"true" +else if(!1===a)return"false" +else if(a==null)return"null" +s=J.a3(a) +return s}, +ce(a){var s,r=$.fq +if(r==null)r=$.fq=Symbol("identityHashCode") +s=a[r] +if(s==null){s=Math.random()*0x3fffffff|0 +a[r]=s}return s}, +cf(a){var s,r,q,p +if(a instanceof A.h)return A.K(A.aQ(a),null) +s=J.as(a) +if(s===B.V||s===B.X||t.o.b(a)){r=B.j(a) +if(r!=="Object"&&r!=="")return r +q=a.constructor +if(typeof q=="function"){p=q.name +if(typeof p=="string"&&p!=="Object"&&p!=="")return p}}return A.K(A.aQ(a),null)}, +fr(a){var s,r,q +if(a==null||typeof a=="number"||A.eR(a))return J.a3(a) +if(typeof a=="string")return JSON.stringify(a) +if(a instanceof A.ag)return a.i(0) +if(a instanceof A.bw)return a.b4(!0) +s=$.hq() +for(r=0;r<1;++r){q=s[r].cz(a) +if(q!=null)return q}return"Instance of '"+A.cf(a)+"'"}, +i_(a){var s=a.$thrownJsError +if(s==null)return null +return A.ab(s)}, +eZ(a,b){var s,r="index" +if(!A.fT(b))return new A.U(!0,b,r,null) +s=J.ev(a) +if(b<0||b>=s)return A.ey(b,s,a,r) +return new A.bg(null,null,!0,b,r,"Value not in range")}, +f(a){return A.z(a,new Error())}, +z(a,b){var s +if(a==null)a=new A.a0() +b.dartException=a +s=A.jL +if("defineProperty" in Object){Object.defineProperty(b,"message",{get:s}) +b.name=""}else b.toString=s +return b}, +jL(){return J.a3(this.dartException)}, +M(a,b){throw A.z(a,b==null?new Error():b)}, +aU(a,b,c){var s +if(b==null)b=0 +if(c==null)c=0 +s=Error() +A.M(A.iQ(a,b,c),s)}, +iQ(a,b,c){var s,r,q,p,o,n,m,l,k +if(typeof b=="string")s=b +else{r="[]=;add;removeWhere;retainWhere;removeRange;setRange;setInt8;setInt16;setInt32;setUint8;setUint16;setUint32;setFloat32;setFloat64".split(";") +q=r.length +p=b +if(p>q){c=p/q|0 +p%=q}s=r[p]}o=typeof c=="string"?c:"modify;remove from;add to".split(";")[c] +n=t.j.b(a)?"list":"ByteData" +m=a.$flags|0 +l="a " +if((m&4)!==0)k="constant " +else if((m&2)!==0){k="unmodifiable " +l="an "}else k=(m&1)!==0?"fixed-length ":"" +return new A.bl("'"+s+"': Cannot "+o+" "+l+k+n)}, +aT(a){throw A.f(A.V(a))}, +a1(a){var s,r,q,p,o,n +a=A.jI(a.replace(String({}),"$receiver$")) +s=a.match(/\\\$[a-zA-Z]+\\\$/g) +if(s==null)s=A.b([],t.s) +r=s.indexOf("\\$arguments\\$") +q=s.indexOf("\\$argumentsExpr\\$") +p=s.indexOf("\\$expr\\$") +o=s.indexOf("\\$method\\$") +n=s.indexOf("\\$receiver\\$") +return new A.dD(a.replace(new RegExp("\\\\\\$arguments\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$argumentsExpr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$expr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$method\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$receiver\\\\\\$","g"),"((?:x|[^x])*)"),r,q,p,o,n)}, +dE(a){return function($expr$){var $argumentsExpr$="$arguments$" +try{$expr$.$method$($argumentsExpr$)}catch(s){return s.message}}(a)}, +fw(a){return function($expr$){try{$expr$.$method$}catch(s){return s.message}}(a)}, +eB(a,b){var s=b==null,r=s?null:b.method +return new A.c_(a,r,s?null:b.receiver)}, +ad(a){if(a==null)return new A.di(a) +if(a instanceof A.b_)return A.ac(a,a.a) +if(typeof a!=="object")return a +if("dartException" in a)return A.ac(a,a.dartException) +return A.jn(a)}, +ac(a,b){if(t.Q.b(b))if(b.$thrownJsError==null)b.$thrownJsError=a +return b}, +jn(a){var s,r,q,p,o,n,m,l,k,j,i,h,g +if(!("message" in a))return a +s=a.message +if("number" in a&&typeof a.number=="number"){r=a.number +q=r&65535 +if((B.u.bM(r,16)&8191)===10)switch(q){case 438:return A.ac(a,A.eB(A.o(s)+" (Error "+q+")",null)) +case 445:case 5007:A.o(s) +return A.ac(a,new A.be())}}if(a instanceof TypeError){p=$.hd() +o=$.he() +n=$.hf() +m=$.hg() +l=$.hj() +k=$.hk() +j=$.hi() +$.hh() +i=$.hm() +h=$.hl() +g=p.I(s) +if(g!=null)return A.ac(a,A.eB(s,g)) +else{g=o.I(s) +if(g!=null){g.method="call" +return A.ac(a,A.eB(s,g))}else if(n.I(s)!=null||m.I(s)!=null||l.I(s)!=null||k.I(s)!=null||j.I(s)!=null||m.I(s)!=null||i.I(s)!=null||h.I(s)!=null)return A.ac(a,new A.be())}return A.ac(a,new A.ct(typeof s=="string"?s:""))}if(a instanceof RangeError){if(typeof s=="string"&&s.indexOf("call stack")!==-1)return new A.bk() +s=function(b){try{return String(b)}catch(f){}return null}(a) +return A.ac(a,new A.U(!1,null,null,typeof s=="string"?s.replace(/^RangeError:\s*/,""):s))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof s=="string"&&s==="too much recursion")return new A.bk() +return a}, +ab(a){var s +if(a instanceof A.b_)return a.b +if(a==null)return new A.bz(a) +s=a.$cachedTrace +if(s!=null)return s +s=new A.bz(a) +if(typeof a==="object")a.$cachedTrace=s +return s}, +h7(a){if(a==null)return J.B(a) +if(typeof a=="object")return A.ce(a) +return J.B(a)}, +jv(a,b){var s,r,q,p=a.length +for(s=0;s>>0!==a||a>=c)throw A.f(A.eZ(b,a))}, +c2:function c2(){}, +bc:function bc(){}, +c3:function c3(){}, +aB:function aB(){}, +ba:function ba(){}, +bb:function bb(){}, +c4:function c4(){}, +c5:function c5(){}, +c6:function c6(){}, +c7:function c7(){}, +c8:function c8(){}, +c9:function c9(){}, +ca:function ca(){}, +bd:function bd(){}, +cb:function cb(){}, +br:function br(){}, +bs:function bs(){}, +bt:function bt(){}, +bu:function bu(){}, +eE(a,b){var s=b.c +return s==null?b.c=A.bD(a,"aw",[b.x]):s}, +ft(a){var s=a.w +if(s===6||s===7)return A.ft(a.x) +return s===11||s===12}, +i3(a){return a.as}, +cO(a){return A.e9(v.typeUniverse,a,!1)}, +ar(a1,a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=a2.w +switch(a0){case 5:case 1:case 2:case 3:case 4:return a2 +case 6:s=a2.x +r=A.ar(a1,s,a3,a4) +if(r===s)return a2 +return A.fJ(a1,r,!0) +case 7:s=a2.x +r=A.ar(a1,s,a3,a4) +if(r===s)return a2 +return A.fI(a1,r,!0) +case 8:q=a2.y +p=A.aO(a1,q,a3,a4) +if(p===q)return a2 +return A.bD(a1,a2.x,p) +case 9:o=a2.x +n=A.ar(a1,o,a3,a4) +m=a2.y +l=A.aO(a1,m,a3,a4) +if(n===o&&l===m)return a2 +return A.eL(a1,n,l) +case 10:k=a2.x +j=a2.y +i=A.aO(a1,j,a3,a4) +if(i===j)return a2 +return A.fK(a1,k,i) +case 11:h=a2.x +g=A.ar(a1,h,a3,a4) +f=a2.y +e=A.jk(a1,f,a3,a4) +if(g===h&&e===f)return a2 +return A.fH(a1,g,e) +case 12:d=a2.y +a4+=d.length +c=A.aO(a1,d,a3,a4) +o=a2.x +n=A.ar(a1,o,a3,a4) +if(c===d&&n===o)return a2 +return A.eM(a1,n,c,!0) +case 13:b=a2.x +if(b") +for(r=1;r=0)p+=" "+r[q];++q}return p+"})"}, +fR(a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=", ",a0=null +if(a3!=null){s=a3.length +if(a2==null)a2=A.b([],t.s) +else a0=a2.length +r=a2.length +for(q=s;q>0;--q)a2.push("T"+(r+q)) +for(p=t.R,o="<",n="",q=0;q0){c+=b+"[" +for(b="",q=0;q0){c+=b+"{" +for(b="",q=0;q "+d}, +K(a,b){var s,r,q,p,o,n,m=a.w +if(m===5)return"erased" +if(m===2)return"dynamic" +if(m===3)return"void" +if(m===1)return"Never" +if(m===4)return"any" +if(m===6){s=a.x +r=A.K(s,b) +q=s.w +return(q===11||q===12?"("+r+")":r)+"?"}if(m===7)return"FutureOr<"+A.K(a.x,b)+">" +if(m===8){p=A.jm(a.x) +o=a.y +return o.length>0?p+("<"+A.fX(o,b)+">"):p}if(m===10)return A.jd(a,b) +if(m===11)return A.fR(a,b,null) +if(m===12)return A.fR(a.x,b,a.y) +if(m===13){n=a.x +return b[b.length-1-n]}return"?"}, +jm(a){var s=v.mangledGlobalNames[a] +if(s!=null)return s +return"minified:"+a}, +iz(a,b){var s=a.tR[b] +for(;typeof s=="string";)s=a.tR[s] +return s}, +iy(a,b){var s,r,q,p,o,n=a.eT,m=n[b] +if(m==null)return A.e9(a,b,!1) +else if(typeof m=="number"){s=m +r=A.bE(a,5,"#") +q=A.ea(s) +for(p=0;p0)p+="<"+A.bC(c)+">" +s=a.eC.get(p) +if(s!=null)return s +r=new A.N(null,null) +r.w=8 +r.x=b +r.y=c +if(c.length>0)r.c=c[0] +r.as=p +q=A.aa(a,r) +a.eC.set(p,q) +return q}, +eL(a,b,c){var s,r,q,p,o,n +if(b.w===9){s=b.x +r=b.y.concat(c)}else{r=c +s=b}q=s.as+(";<"+A.bC(r)+">") +p=a.eC.get(q) +if(p!=null)return p +o=new A.N(null,null) +o.w=9 +o.x=s +o.y=r +o.as=q +n=A.aa(a,o) +a.eC.set(q,n) +return n}, +fK(a,b,c){var s,r,q="+"+(b+"("+A.bC(c)+")"),p=a.eC.get(q) +if(p!=null)return p +s=new A.N(null,null) +s.w=10 +s.x=b +s.y=c +s.as=q +r=A.aa(a,s) +a.eC.set(q,r) +return r}, +fH(a,b,c){var s,r,q,p,o,n=b.as,m=c.a,l=m.length,k=c.b,j=k.length,i=c.c,h=i.length,g="("+A.bC(m) +if(j>0){s=l>0?",":"" +g+=s+"["+A.bC(k)+"]"}if(h>0){s=l>0?",":"" +g+=s+"{"+A.ir(i)+"}"}r=n+(g+")") +q=a.eC.get(r) +if(q!=null)return q +p=new A.N(null,null) +p.w=11 +p.x=b +p.y=c +p.as=r +o=A.aa(a,p) +a.eC.set(r,o) +return o}, +eM(a,b,c,d){var s,r=b.as+("<"+A.bC(c)+">"),q=a.eC.get(r) +if(q!=null)return q +s=A.it(a,b,c,r,d) +a.eC.set(r,s) +return s}, +it(a,b,c,d,e){var s,r,q,p,o,n,m,l +if(e){s=c.length +r=A.ea(s) +for(q=0,p=0;p0){n=A.ar(a,b,r,0) +m=A.aO(a,c,r,0) +return A.eM(a,n,m,c!==m)}}l=new A.N(null,null) +l.w=12 +l.x=b +l.y=c +l.as=d +return A.aa(a,l)}, +fC(a,b,c,d){return{u:a,e:b,r:c,s:[],p:0,n:d}}, +fE(a){var s,r,q,p,o,n,m,l=a.r,k=a.s +for(s=l.length,r=0;r=48&&q<=57)r=A.ij(r+1,q,l,k) +else if((((q|32)>>>0)-97&65535)<26||q===95||q===36||q===124)r=A.fD(a,r,l,k,!1) +else if(q===46)r=A.fD(a,r,l,k,!0) +else{++r +switch(q){case 44:break +case 58:k.push(!1) +break +case 33:k.push(!0) +break +case 59:k.push(A.an(a.u,a.e,k.pop())) +break +case 94:k.push(A.iv(a.u,k.pop())) +break +case 35:k.push(A.bE(a.u,5,"#")) +break +case 64:k.push(A.bE(a.u,2,"@")) +break +case 126:k.push(A.bE(a.u,3,"~")) +break +case 60:k.push(a.p) +a.p=k.length +break +case 62:A.il(a,k) +break +case 38:A.ik(a,k) +break +case 63:p=a.u +k.push(A.fJ(p,A.an(p,a.e,k.pop()),a.n)) +break +case 47:p=a.u +k.push(A.fI(p,A.an(p,a.e,k.pop()),a.n)) +break +case 40:k.push(-3) +k.push(a.p) +a.p=k.length +break +case 41:A.ii(a,k) +break +case 91:k.push(a.p) +a.p=k.length +break +case 93:o=k.splice(a.p) +A.fF(a.u,a.e,o) +a.p=k.pop() +k.push(o) +k.push(-1) +break +case 123:k.push(a.p) +a.p=k.length +break +case 125:o=k.splice(a.p) +A.io(a.u,a.e,o) +a.p=k.pop() +k.push(o) +k.push(-2) +break +case 43:n=l.indexOf("(",r) +k.push(l.substring(r,n)) +k.push(-4) +k.push(a.p) +a.p=k.length +r=n+1 +break +default:throw"Bad character "+q}}}m=k.pop() +return A.an(a.u,a.e,m)}, +ij(a,b,c,d){var s,r,q=b-48 +for(s=c.length;a=48&&r<=57))break +q=q*10+(r-48)}d.push(q) +return a}, +fD(a,b,c,d,e){var s,r,q,p,o,n,m=b+1 +for(s=c.length;m>>0)-97&65535)<26||r===95||r===36||r===124))q=r>=48&&r<=57 +else q=!0 +if(!q)break}}p=c.substring(b,m) +if(e){s=a.u +o=a.e +if(o.w===9)o=o.x +n=A.iz(s,o.x)[p] +if(n==null)A.M('No "'+p+'" in "'+A.i3(o)+'"') +d.push(A.bF(s,o,n))}else d.push(p) +return m}, +il(a,b){var s,r=a.u,q=A.fB(a,b),p=b.pop() +if(typeof p=="string")b.push(A.bD(r,p,q)) +else{s=A.an(r,a.e,p) +switch(s.w){case 11:b.push(A.eM(r,s,q,a.n)) +break +default:b.push(A.eL(r,s,q)) +break}}}, +ii(a,b){var s,r,q,p=a.u,o=b.pop(),n=null,m=null +if(typeof o=="number")switch(o){case-1:n=b.pop() +break +case-2:m=b.pop() +break +default:b.push(o) +break}else b.push(o) +s=A.fB(a,b) +o=b.pop() +switch(o){case-3:o=b.pop() +if(n==null)n=p.sEA +if(m==null)m=p.sEA +r=A.an(p,a.e,o) +q=new A.cC() +q.a=s +q.b=n +q.c=m +b.push(A.fH(p,r,q)) +return +case-4:b.push(A.fK(p,b.pop(),s)) +return +default:throw A.f(A.bO("Unexpected state under `()`: "+A.o(o)))}}, +ik(a,b){var s=b.pop() +if(0===s){b.push(A.bE(a.u,1,"0&")) +return}if(1===s){b.push(A.bE(a.u,4,"1&")) +return}throw A.f(A.bO("Unexpected extended operation "+A.o(s)))}, +fB(a,b){var s=b.splice(a.p) +A.fF(a.u,a.e,s) +a.p=b.pop() +return s}, +an(a,b,c){if(typeof c=="string")return A.bD(a,c,a.sEA) +else if(typeof c=="number"){b.toString +return A.im(a,b,c)}else return c}, +fF(a,b,c){var s,r=c.length +for(s=0;sn)return!1 +m=n-o +l=s.b +k=r.b +j=l.length +i=k.length +if(o+j=d)return!1 +a1=f[b] +b+=3 +if(a00?new Array(q):v.typeUniverse.sEA +for(o=0;o0?new Array(a):v.typeUniverse.sEA}, +N:function N(a,b){var _=this +_.a=a +_.b=b +_.r=_.f=_.d=_.c=null +_.w=0 +_.as=_.Q=_.z=_.y=_.x=null}, +cC:function cC(){this.c=this.b=this.a=null}, +cL:function cL(a){this.a=a}, +cA:function cA(){}, +bA:function bA(a){this.a=a}, +ia(){var s,r,q +if(self.scheduleImmediate!=null)return A.jp() +if(self.MutationObserver!=null&&self.document!=null){s={} +r=self.document.createElement("div") +q=self.document.createElement("span") +s.a=null +new self.MutationObserver(A.cM(new A.dH(s),1)).observe(r,{childList:true}) +return new A.dG(s,r,q)}else if(self.setImmediate!=null)return A.jq() +return A.jr()}, +ib(a){self.scheduleImmediate(A.cM(new A.dI(a),0))}, +ic(a){self.setImmediate(A.cM(new A.dJ(a),0))}, +id(a){A.iq(0,a)}, +iq(a,b){var s=new A.e7() +s.bx(a,b) +return s}, +eT(a){return new A.cx(new A.x($.t,a.h("x<0>")),a.h("cx<0>"))}, +eP(a,b){a.$2(0,null) +b.b=!0 +return b.a}, +iM(a,b){A.iN(a,b)}, +eO(a,b){var s,r=a==null?b.$ti.c.a(a):a +if(!b.b)b.a.aO(r) +else{s=b.a +if(b.$ti.h("aw<1>").b(r))s.aQ(r) +else s.aU(r)}}, +eN(a,b){var s=A.ad(a),r=A.ab(a),q=b.a +if(b.b)q.ao(new A.O(s,r)) +else q.aP(new A.O(s,r))}, +iN(a,b){var s,r,q=new A.ec(b),p=new A.ed(b) +if(a instanceof A.x)a.b3(q,p,t.z) +else{s=t.z +if(a instanceof A.x)a.bh(q,p,s) +else{r=new A.x($.t,t.aY) +r.a=8 +r.c=a +r.b3(q,p,s)}}}, +eV(a){var s=function(b,c){return function(d,e){while(true){try{b(d,e) +break}catch(r){e=r +d=c}}}}(a,1) +return $.t.bg(new A.ek(s))}, +fG(a,b,c){return 0}, +ew(a){var s +if(t.Q.b(a)){s=a.gah() +if(s!=null)return s}return B.E}, +eF(a,b,c){var s,r,q,p={},o=p.a=a +for(;s=o.a,(s&4)!==0;){o=o.c +p.a=o}if(o===b){s=A.i4() +b.aP(new A.O(new A.U(!0,o,null,"Cannot complete a future with itself"),s)) +return}r=b.a&1 +s=o.a=s|r +if((s&24)===0){q=b.c +b.a=b.a&1|4 +b.c=o +o.b1(q) +return}if(!c)if(b.c==null)o=(s&16)===0||r!==0 +else o=!1 +else o=!0 +if(o){q=b.a7() +b.a4(p.a) +A.aH(b,q) +return}b.a^=2 +A.aN(null,null,b.b,new A.dS(p,b))}, +aH(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g={},f=g.a=a +for(;!0;){s={} +r=f.a +q=(r&16)===0 +p=!q +if(b==null){if(p&&(r&1)===0){f=f.c +A.ei(f.a,f.b)}return}s.a=b +o=b.a +for(f=b;o!=null;f=o,o=n){f.a=null +A.aH(g.a,f) +s.a=o +n=o.a}r=g.a +m=r.c +s.b=p +s.c=m +if(q){l=f.c +l=(l&1)!==0||(l&15)===8}else l=!0 +if(l){k=f.b.b +if(p){r=r.b===k +r=!(r||r)}else r=!1 +if(r){A.ei(m.a,m.b) +return}j=$.t +if(j!==k)$.t=k +else j=null +f=f.c +if((f&15)===8)new A.dW(s,g,p).$0() +else if(q){if((f&1)!==0)new A.dV(s,m).$0()}else if((f&2)!==0)new A.dU(g,s).$0() +if(j!=null)$.t=j +f=s.c +if(f instanceof A.x){r=s.a.$ti +r=r.h("aw<2>").b(f)||!r.y[1].b(f)}else r=!1 +if(r){i=s.a.b +if((f.a&24)!==0){h=i.c +i.c=null +b=i.a8(h) +i.a=f.a&30|i.a&1 +i.c=f.c +g.a=f +continue}else A.eF(f,i,!0) +return}}i=s.a.b +h=i.c +i.c=null +b=i.a8(h) +f=s.b +r=s.c +if(!f){i.a=8 +i.c=r}else{i.a=i.a&1|16 +i.c=r}g.a=i +f=i}}, +je(a,b){if(t.C.b(a))return b.bg(a) +if(t.w.b(a))return a +throw A.f(A.fg(a,"onError",u.c))}, +jc(){var s,r +for(s=$.aM;s!=null;s=$.aM){$.bI=null +r=s.b +$.aM=r +if(r==null)$.bH=null +s.a.$0()}}, +jj(){$.eS=!0 +try{A.jc()}finally{$.bI=null +$.eS=!1 +if($.aM!=null)$.fa().$1(A.h_())}}, +fY(a){var s=new A.cy(a),r=$.bH +if(r==null){$.aM=$.bH=s +if(!$.eS)$.fa().$1(A.h_())}else $.bH=r.b=s}, +jg(a){var s,r,q,p=$.aM +if(p==null){A.fY(a) +$.bI=$.bH +return}s=new A.cy(a) +r=$.bI +if(r==null){s.b=p +$.aM=$.bI=s}else{q=r.b +s.b=q +$.bI=r.b=s +if(q==null)$.bH=s}}, +jJ(a){var s=null,r=$.t +if(B.a===r){A.aN(s,s,B.a,a) +return}A.aN(s,s,r,r.b8(a))}, +jR(a){A.eW(a,"stream",t.K) +return new A.cI()}, +ei(a,b){A.jg(new A.ej(a,b))}, +fV(a,b,c,d){var s,r=$.t +if(r===c)return d.$0() +$.t=c +s=r +try{r=d.$0() +return r}finally{$.t=s}}, +fW(a,b,c,d,e){var s,r=$.t +if(r===c)return d.$1(e) +$.t=c +s=r +try{r=d.$1(e) +return r}finally{$.t=s}}, +jf(a,b,c,d,e,f){var s,r=$.t +if(r===c)return d.$2(e,f) +$.t=c +s=r +try{r=d.$2(e,f) +return r}finally{$.t=s}}, +aN(a,b,c,d){if(B.a!==c)d=c.b8(d) +A.fY(d)}, +dH:function dH(a){this.a=a}, +dG:function dG(a,b,c){this.a=a +this.b=b +this.c=c}, +dI:function dI(a){this.a=a}, +dJ:function dJ(a){this.a=a}, +e7:function e7(){}, +e8:function e8(a,b){this.a=a +this.b=b}, +cx:function cx(a,b){this.a=a +this.b=!1 +this.$ti=b}, +ec:function ec(a){this.a=a}, +ed:function ed(a){this.a=a}, +ek:function ek(a){this.a=a}, +aK:function aK(a){var _=this +_.a=a +_.e=_.d=_.c=_.b=null}, +ap:function ap(a,b){this.a=a +this.$ti=b}, +O:function O(a,b){this.a=a +this.b=b}, +aG:function aG(a,b,c,d,e){var _=this +_.a=null +_.b=a +_.c=b +_.d=c +_.e=d +_.$ti=e}, +x:function x(a,b){var _=this +_.a=0 +_.b=a +_.c=null +_.$ti=b}, +dP:function dP(a,b){this.a=a +this.b=b}, +dT:function dT(a,b){this.a=a +this.b=b}, +dS:function dS(a,b){this.a=a +this.b=b}, +dR:function dR(a,b){this.a=a +this.b=b}, +dQ:function dQ(a,b){this.a=a +this.b=b}, +dW:function dW(a,b,c){this.a=a +this.b=b +this.c=c}, +dX:function dX(a,b){this.a=a +this.b=b}, +dY:function dY(a){this.a=a}, +dV:function dV(a,b){this.a=a +this.b=b}, +dU:function dU(a,b){this.a=a +this.b=b}, +cy:function cy(a){this.a=a +this.b=null}, +cI:function cI(){}, +eb:function eb(){}, +ej:function ej(a,b){this.a=a +this.b=b}, +e3:function e3(){}, +e4:function e4(a,b){this.a=a +this.b=b}, +e5:function e5(a,b,c){this.a=a +this.b=b +this.c=c}, +hI(a,b){return new A.bo(a.h("@<0>").A(b).h("bo<1,2>"))}, +eG(a,b){var s=a[b] +return s===a?null:s}, +eI(a,b,c){if(c==null)a[b]=a +else a[b]=c}, +eH(){var s=Object.create(null) +A.eI(s,"",s) +delete s[""] +return s}, +hU(a,b){return new A.W(a.h("@<0>").A(b).h("W<1,2>"))}, +Q(a,b,c){return A.jv(a,new A.W(b.h("@<0>").A(c).h("W<1,2>")))}, +E(a,b){return new A.W(a.h("@<0>").A(b).h("W<1,2>"))}, +ax(a){return new A.bq(a.h("bq<0>"))}, +eJ(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +hV(a){return new A.am(a.h("am<0>"))}, +db(a){return new A.am(a.h("am<0>"))}, +eK(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +ih(a,b,c){var s=new A.aI(a,b,c.h("aI<0>")) +s.c=a.e +return s}, +hJ(a,b,c){var s=A.hI(b,c) +a.H(0,new A.d5(s,b,c)) +return s}, +d6(a){var s=J.ae(a) +if(s.j())return s.gk() +return null}, +da(a,b,c){var s=A.hU(b,c) +s.E(0,a) +return s}, +eD(a){var s,r +if(A.f5(a))return"{...}" +s=new A.cn("") +try{r={} +$.au.push(a) +s.a+="{" +r.a=!0 +a.H(0,new A.de(r,s)) +s.a+="}"}finally{$.au.pop()}r=s.a +return r.charCodeAt(0)==0?r:r}, +bo:function bo(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +bp:function bp(a,b){this.a=a +this.$ti=b}, +cD:function cD(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +bq:function bq(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +a9:function a9(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +am:function am(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +e0:function e0(a){this.a=a +this.c=this.b=null}, +aI:function aI(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.$ti=c}, +d5:function d5(a,b,c){this.a=a +this.b=b +this.c=c}, +m:function m(){}, +b9:function b9(){}, +de:function de(a,b){this.a=a +this.b=b}, +ak:function ak(){}, +by:function by(){}, +hD(a,b){a=A.z(a,new Error()) +a.stack=b.i(0) +throw a}, +eC(a,b,c,d){var s,r=c?J.hQ(a,d):J.hP(a,d) +if(a!==0&&b!=null)for(s=0;s")) +for(s=a.length,r=0;r")) +s=A.b([],b.h("p<0>")) +for(r=J.ae(a);r.j();)s.push(r.gk()) +return s}, +fu(a,b,c){var s=J.ae(b) +if(!s.j())return a +if(c.length===0){do a+=A.o(s.gk()) +while(s.j())}else{a+=A.o(s.gk()) +for(;s.j();)a=a+c+A.o(s.gk())}return a}, +i4(){return A.ab(new Error())}, +d3(a){if(typeof a=="number"||A.eR(a)||a==null)return J.a3(a) +if(typeof a=="string")return JSON.stringify(a) +return A.fr(a)}, +hE(a,b){A.eW(a,"error",t.K) +A.eW(b,"stackTrace",t.l) +A.hD(a,b)}, +bO(a){return new A.bN(a)}, +bL(a,b){return new A.U(!1,null,b,a)}, +fg(a,b,c){return new A.U(!0,a,b,c)}, +i1(a,b,c,d,e){return new A.bg(b,c,!0,a,d,"Invalid value")}, +fs(a,b){return a}, +ey(a,b,c,d){return new A.bV(b,!0,a,d,"Index out of range")}, +fy(a){return new A.bl(a)}, +fx(a){return new A.cs(a)}, +i5(a){return new A.cj(a)}, +V(a){return new A.bS(a)}, +hO(a,b,c){var s,r +if(A.f5(a)){if(b==="("&&c===")")return"(...)" +return b+"..."+c}s=A.b([],t.s) +$.au.push(a) +try{A.jb(a,s)}finally{$.au.pop()}r=A.fu(b,s,", ")+c +return r.charCodeAt(0)==0?r:r}, +ez(a,b,c){var s,r +if(A.f5(a))return b+"..."+c +s=new A.cn(b) +$.au.push(a) +try{r=s +r.a=A.fu(r.a,a,", ")}finally{$.au.pop()}s.a+=c +r=s.a +return r.charCodeAt(0)==0?r:r}, +jb(a,b){var s,r,q,p,o,n,m,l=a.gq(a),k=0,j=0 +while(!0){if(!(k<80||j<3))break +if(!l.j())return +s=A.o(l.gk()) +b.push(s) +k+=s.length+2;++j}if(!l.j()){if(j<=5)return +r=b.pop() +q=b.pop()}else{p=l.gk();++j +if(!l.j()){if(j<=4){b.push(A.o(p)) +return}r=A.o(p) +q=b.pop() +k+=r.length+2}else{o=l.gk();++j +for(;l.j();p=o,o=n){n=l.gk();++j +if(j>100){while(!0){if(!(k>75&&j>3))break +k-=b.pop().length+2;--j}b.push("...") +return}}q=A.o(p) +r=A.o(o) +k+=r.length+q.length+4}}if(j>b.length+2){k+=5 +m="..."}else m=null +while(!0){if(!(k>80&&b.length>3))break +k-=b.pop().length+2 +if(m==null){k+=5 +m="..."}}if(m!=null)b.push(m) +b.push(q) +b.push(r)}, +fp(a,b,c,d){var s +if(B.e===c){s=J.B(a) +b=J.B(b) +return A.dq(A.a_(A.a_($.cP(),s),b))}if(B.e===d){s=J.B(a) +b=J.B(b) +c=J.B(c) +return A.dq(A.a_(A.a_(A.a_($.cP(),s),b),c))}s=J.B(a) +b=J.B(b) +c=J.B(c) +d=J.B(d) +d=A.dq(A.a_(A.a_(A.a_(A.a_($.cP(),s),b),c),d)) +return d}, +hZ(a){var s,r,q=$.cP() +for(s=a.length,r=0;r") +return A.fn(new A.X(a,s),new A.df(b,c),s.h("k.E"),b.h("@<0>").A(c).h("+(1,2)"))}, +cq:function cq(a){this.a=a}, +aY:function aY(a){this.b=a}, +cr:function cr(a,b){var _=this +_.d=a +_.f=_.e=0 +_.r=b +_.c=null}, +ds:function ds(a,b){this.a=a +this.b=b}, +dC:function dC(a,b){this.a=a +this.b=b}, +dB:function dB(a){this.a=a}, +dz:function dz(a,b){this.a=a +this.b=b}, +dy:function dy(a){this.a=a}, +dx:function dx(){}, +dA:function dA(a,b){this.a=a +this.b=b}, +dt:function dt(a){this.a=a}, +du:function du(a,b){this.a=a +this.b=b}, +dv:function dv(a,b){this.a=a +this.b=b}, +dw:function dw(a,b){this.a=a +this.b=b}, +cc:function cc(a,b){this.c=a +this.a=b}, +dg:function dg(a){this.a=a}, +df:function df(a,b){this.a=a +this.b=b}, +ie(a,b,c,d){var s,r=A.jo(new A.dN(c),t.m),q=null +if(r==null)r=q +else{if(typeof r=="function")A.M(A.bL("Attempting to rewrap a JS function.",null)) +s=function(e,f){return function(g){return e(f,g,arguments.length)}}(A.iO,r) +s[$.f9()]=r +r=s}if(r!=null)a.addEventListener(b,r,!1) +return new A.cB(a,b,r,!1)}, +jo(a,b){var s=$.t +if(s===B.a)return a +return s.bU(a,b)}, +ex:function ex(a,b){this.a=a +this.$ti=b}, +cB:function cB(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.e=d}, +dN:function dN(a){this.a=a}, +jH(a){if(typeof dartPrint=="function"){dartPrint(a) +return}if(typeof console=="object"&&typeof console.log!="undefined"){console.log(a) +return}if(typeof print=="function"){print(a) +return}throw"Unable to print message: "+String(a)}, +iO(a,b,c){if(c>=1)return a.$1(b) +return a.$0()}, +aL(a,b){return a[b]}, +dh(a){return new A.ap(A.hY(a),t.F)}, +hY(a){return function(){var s=a +var r=0,q=1,p=[],o,n +return function $async$dh(b,c,d){if(c===1){p.push(d) +r=q}while(true)switch(r){case 0:o=0 +case 2:if(!(o").A(b).h("af<1,2>"))}, +B(a,b){var s +a.$flags&1&&A.aU(a,"remove",1) +for(s=0;s0){a[0]=q +a[1]=r}return}p=0 +if(A.aq(a).c.b(null))for(o=0;o0)this.bH(a,p)}, +bH(a,b){var s,r=a.length +for(;s=r-1,r>0;r=s)if(a[s]===null){a[s]=void 0;--b +if(b===0)break}}, +i(a){return A.ez(a,"[","]")}, +gq(a){return new J.bM(a,a.length,A.aq(a).h("bM<1>"))}, +gu(a){return A.ce(a)}, +gl(a){return a.length}, +m(a,b){if(!(b>=0&&b=0&&b=p){r.d=null +return!1}r.d=q[s] +r.c=s+1 +return!0}} +J.ay.prototype={ +bb(a,b){var s +if(ab)return 1 +else if(a===b){if(a===0){s=this.gaD(b) +if(this.gaD(a)===s)return 0 +if(this.gaD(a))return-1 +return 1}return 0}else if(isNaN(a)){if(isNaN(b))return 0 +return 1}else return-1}, +gaD(a){return a===0?1/a<0:a<0}, +cl(a){if(a>0){if(a!==1/0)return Math.round(a)}else if(a>-1/0)return 0-Math.round(0-a) +throw A.f(A.fy(""+a+".round()"))}, +cm(a){if(a<0)return-Math.round(-a) +else return Math.round(a)}, +i(a){if(a===0&&1/a<0)return"-0.0" +else return""+a}, +gu(a){var s,r,q,p,o=a|0 +if(a===o)return o&536870911 +s=Math.abs(a) +r=Math.log(s)/0.6931471805599453|0 +q=Math.pow(2,r) +p=s<1?s/q:q/s +return((p*9007199254740992|0)+(p*3542243181176521|0))*599197+r*1259&536870911}, +bM(a,b){var s +if(a>0)s=this.bL(a,b) +else{s=b>31?31:b +s=a>>s>>>0}return s}, +bL(a,b){return b>31?0:a>>>b}, +gt(a){return A.L(t.n)}, +$iv:1} +J.b1.prototype={ +gt(a){return A.L(t.S)}, +$ij:1, +$ia:1} +J.bZ.prototype={ +gt(a){return A.L(t.V)}, +$ij:1} +J.az.prototype={ +bb(a,b){var s +if(a===b)s=0 +else s=a>6}r=r+((r&67108863)<<3)&536870911 +r^=r>>11 +return r+((r&16383)<<15)&536870911}, +gt(a){return A.L(t.N)}, +gl(a){return a.length}, +$ij:1, +$ie:1} +A.aE.prototype={ +gq(a){return new A.bQ(J.ae(this.ga9()),A.u(this).h("bQ<1,2>"))}, +gl(a){return J.ev(this.ga9())}, +G(a,b){return A.u(this).y[1].a(J.hu(this.ga9(),b))}, +i(a){return J.a3(this.ga9())}} +A.bQ.prototype={ +j(){return this.a.j()}, +gk(){return this.$ti.y[1].a(this.a.gk())}} +A.bn.prototype={ +m(a,b){return this.$ti.y[1].a(J.hr(this.a,b))}, +p(a,b,c){J.hs(this.a,b,this.$ti.c.a(c))}, +$ic:1, +$ii:1} +A.af.prototype={ +ba(a,b){return new A.af(this.a,this.$ti.h("@<1>").A(b).h("af<1,2>"))}, +ga9(){return this.a}} +A.ai.prototype={ +i(a){return"LateInitializationError: "+this.a}} +A.dm.prototype={} +A.c.prototype={} +A.Z.prototype={ +gq(a){var s=this +return new A.a6(s,s.gl(s),A.u(s).h("a6"))}} +A.a6.prototype={ +gk(){var s=this.d +return s==null?this.$ti.c.a(s):s}, +j(){var s,r=this,q=r.a,p=J.eo(q),o=p.gl(q) +if(r.b!==o)throw A.f(A.V(q)) +s=r.c +if(s>=o){r.d=null +return!1}r.d=p.G(q,s);++r.c +return!0}} +A.aj.prototype={ +gq(a){var s=this.a +return new A.aA(s.gq(s),this.b,A.u(this).h("aA<1,2>"))}, +gl(a){var s=this.a +return s.gl(s)}, +G(a,b){var s=this.a +return this.b.$1(s.G(s,b))}} +A.aZ.prototype={$ic:1} +A.aA.prototype={ +j(){var s=this,r=s.b +if(r.j()){s.a=s.c.$1(r.gk()) +return!0}s.a=null +return!1}, +gk(){var s=this.a +return s==null?this.$ti.y[1].a(s):s}} +A.bm.prototype={ +gq(a){return new A.cv(J.ae(this.a),this.b)}} +A.cv.prototype={ +j(){var s,r +for(s=this.a,r=this.b;s.j();)if(r.$1(s.gk()))return!0 +return!1}, +gk(){return this.a.gk()}} +A.b0.prototype={} +A.bh.prototype={ +gl(a){return J.ev(this.a)}, +G(a,b){var s=this.a,r=J.eo(s) +return r.G(s,r.gl(s)-1-b)}} +A.bG.prototype={} +A.ao.prototype={$r:"+(1,2)",$s:1} +A.aJ.prototype={$r:"+isActive,todo(1,2)",$s:2} +A.bT.prototype={ +i(a){return A.eD(this)}} +A.aX.prototype={ +gl(a){return this.b.length}, +gbG(){var s=this.$keys +if(s==null){s=Object.keys(this.a) +this.$keys=s}return s}, +R(a){if(typeof a!="string")return!1 +if("__proto__"===a)return!1 +return this.a.hasOwnProperty(a)}, +m(a,b){if(!this.R(b))return null +return this.b[this.a[b]]}, +H(a,b){var s,r,q=this.gbG(),p=this.b +for(s=q.length,r=0;r>>0}, +i(a){return"Closure '"+this.$_name+"' of "+("Instance of '"+A.cf(this.a)+"'")}} +A.cg.prototype={ +i(a){return"RuntimeError: "+this.a}} +A.W.prototype={ +gl(a){return this.a}, +ga_(){return new A.Y(this,A.u(this).h("Y<1>"))}, +R(a){var s=this.c5(a) +return s}, +c5(a){var s=this.d +if(s==null)return!1 +return this.ad(s[this.ac(a)],a)>=0}, +E(a,b){b.H(0,new A.d8(this))}, +m(a,b){var s,r,q,p,o=null +if(typeof b=="string"){s=this.b +if(s==null)return o +r=s[b] +q=r==null?o:r.b +return q}else if(typeof b=="number"&&(b&0x3fffffff)===b){p=this.c +if(p==null)return o +r=p[b] +q=r==null?o:r.b +return q}else return this.c6(b)}, +c6(a){var s,r,q=this.d +if(q==null)return null +s=q[this.ac(a)] +r=this.ad(s,a) +if(r<0)return null +return s[r].b}, +p(a,b,c){var s,r,q=this +if(typeof b=="string"){s=q.b +q.aN(s==null?q.b=q.au():s,b,c)}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=q.c +q.aN(r==null?q.c=q.au():r,b,c)}else q.c8(b,c)}, +c8(a,b){var s,r,q,p=this,o=p.d +if(o==null)o=p.d=p.au() +s=p.ac(a) +r=o[s] +if(r==null)o[s]=[p.av(a,b)] +else{q=p.ad(r,a) +if(q>=0)r[q].b=b +else r.push(p.av(a,b))}}, +B(a,b){var s=this +if(typeof b=="string")return s.b2(s.b,b) +else if(typeof b=="number"&&(b&0x3fffffff)===b)return s.b2(s.c,b) +else return s.c7(b)}, +c7(a){var s,r,q,p,o=this,n=o.d +if(n==null)return null +s=o.ac(a) +r=n[s] +q=o.ad(r,a) +if(q<0)return null +p=r.splice(q,1)[0] +o.b5(p) +if(r.length===0)delete n[s] +return p.b}, +H(a,b){var s=this,r=s.e,q=s.r +for(;r!=null;){b.$2(r.a,r.b) +if(q!==s.r)throw A.f(A.V(s)) +r=r.c}}, +aN(a,b,c){var s=a[b] +if(s==null)a[b]=this.av(b,c) +else s.b=c}, +b2(a,b){var s +if(a==null)return null +s=a[b] +if(s==null)return null +this.b5(s) +delete a[b] +return s.b}, +b0(){this.r=this.r+1&1073741823}, +av(a,b){var s,r=this,q=new A.d9(a,b) +if(r.e==null)r.e=r.f=q +else{s=r.f +s.toString +q.d=s +r.f=s.c=q}++r.a +r.b0() +return q}, +b5(a){var s=this,r=a.d,q=a.c +if(r==null)s.e=q +else r.c=q +if(q==null)s.f=r +else q.d=r;--s.a +s.b0()}, +ac(a){return J.B(a)&1073741823}, +ad(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r"]=s +delete s[""] +return s}} +A.d8.prototype={ +$2(a,b){this.a.p(0,a,b)}, +$S(){return A.u(this.a).h("~(1,2)")}} +A.d9.prototype={} +A.Y.prototype={ +gl(a){return this.a.a}, +gq(a){var s=this.a +return new A.b8(s,s.r,s.e)}} +A.b8.prototype={ +gk(){return this.d}, +j(){var s,r=this,q=r.a +if(r.b!==q.r)throw A.f(A.V(q)) +s=r.c +if(s==null){r.d=null +return!1}else{r.d=s.a +r.c=s.c +return!0}}} +A.X.prototype={ +gl(a){return this.a.a}, +gq(a){var s=this.a +return new A.c1(s,s.r,s.e,this.$ti.h("c1<1,2>"))}} +A.c1.prototype={ +gk(){var s=this.d +s.toString +return s}, +j(){var s,r=this,q=r.a +if(r.b!==q.r)throw A.f(A.V(q)) +s=r.c +if(s==null){r.d=null +return!1}else{r.d=new A.F(s.a,s.b,r.$ti.h("F<1,2>")) +r.c=s.c +return!0}}} +A.ep.prototype={ +$1(a){return this.a(a)}, +$S:8} +A.eq.prototype={ +$2(a,b){return this.a(a,b)}, +$S:9} +A.er.prototype={ +$1(a){return this.a(a)}, +$S:10} +A.bw.prototype={ +gt(a){return A.L(this.b_())}, +b_(){return A.ju(this.$r,this.aZ())}, +i(a){return this.b4(!1)}, +b4(a){var s,r,q,p,o,n=this.bD(),m=this.aZ(),l=(a?"Record ":"")+"(" +for(s=n.length,r="",q=0;q0;){--q;--s +k[q]=r[s]}}k=A.hW(k,!1,t.K) +k.$flags=3 +return k}} +A.cG.prototype={ +aZ(){return[this.a,this.b]}, +L(a,b){if(b==null)return!1 +return b instanceof A.cG&&this.$s===b.$s&&J.q(this.a,b.a)&&J.q(this.b,b.b)}, +gu(a){return A.fp(this.$s,this.a,this.b,B.e)}} +A.dK.prototype={ +J(){var s=this.b +if(s===this)throw A.f(new A.ai("Local '' has not been initialized.")) +return s}} +A.c2.prototype={ +gt(a){return B.a5}, +$ij:1} +A.bc.prototype={} +A.c3.prototype={ +gt(a){return B.a6}, +$ij:1} +A.aB.prototype={ +gl(a){return a.length}, +$iJ:1} +A.ba.prototype={ +m(a,b){A.a2(b,a,a.length) +return a[b]}, +p(a,b,c){a.$flags&2&&A.aU(a) +A.a2(b,a,a.length) +a[b]=c}, +$ic:1, +$ii:1} +A.bb.prototype={ +p(a,b,c){a.$flags&2&&A.aU(a) +A.a2(b,a,a.length) +a[b]=c}, +$ic:1, +$ii:1} +A.c4.prototype={ +gt(a){return B.a7}, +$ij:1} +A.c5.prototype={ +gt(a){return B.a8}, +$ij:1} +A.c6.prototype={ +gt(a){return B.a9}, +m(a,b){A.a2(b,a,a.length) +return a[b]}, +$ij:1} +A.c7.prototype={ +gt(a){return B.aa}, +m(a,b){A.a2(b,a,a.length) +return a[b]}, +$ij:1} +A.c8.prototype={ +gt(a){return B.ab}, +m(a,b){A.a2(b,a,a.length) +return a[b]}, +$ij:1} +A.c9.prototype={ +gt(a){return B.af}, +m(a,b){A.a2(b,a,a.length) +return a[b]}, +$ij:1} +A.ca.prototype={ +gt(a){return B.ag}, +m(a,b){A.a2(b,a,a.length) +return a[b]}, +$ij:1} +A.bd.prototype={ +gt(a){return B.ah}, +gl(a){return a.length}, +m(a,b){A.a2(b,a,a.length) +return a[b]}, +$ij:1} +A.cb.prototype={ +gt(a){return B.ai}, +gl(a){return a.length}, +m(a,b){A.a2(b,a,a.length) +return a[b]}, +$ij:1} +A.br.prototype={} +A.bs.prototype={} +A.bt.prototype={} +A.bu.prototype={} +A.N.prototype={ +h(a){return A.bF(v.typeUniverse,this,a)}, +A(a){return A.fL(v.typeUniverse,this,a)}} +A.cC.prototype={} +A.cL.prototype={ +i(a){return A.K(this.a,null)}, +$ifv:1} +A.cA.prototype={ +i(a){return this.a}} +A.bA.prototype={$ia0:1} +A.dH.prototype={ +$1(a){var s=this.a,r=s.a +s.a=null +r.$0()}, +$S:5} +A.dG.prototype={ +$1(a){var s,r +this.a.a=a +s=this.b +r=this.c +s.firstChild?s.removeChild(r):s.appendChild(r)}, +$S:11} +A.dI.prototype={ +$0(){this.a.$0()}, +$S:6} +A.dJ.prototype={ +$0(){this.a.$0()}, +$S:6} +A.e7.prototype={ +bx(a,b){if(self.setTimeout!=null)self.setTimeout(A.cM(new A.e8(this,b),0),a) +else throw A.f(A.fy("`setTimeout()` not found."))}} +A.e8.prototype={ +$0(){this.b.$0()}, +$S:0} +A.cx.prototype={} +A.ec.prototype={ +$1(a){return this.a.$2(0,a)}, +$S:2} +A.ed.prototype={ +$2(a,b){this.a.$2(1,new A.b_(a,b))}, +$S:12} +A.ek.prototype={ +$2(a,b){this.a(a,b)}, +$S:13} +A.aK.prototype={ +gk(){return this.b}, +bI(a,b){var s,r,q +a=a +b=b +s=this.a +for(;!0;)try{r=s(this,a,b) +return r}catch(q){b=q +a=1}}, +j(){var s,r,q,p,o=this,n=null,m=0 +for(;!0;){s=o.d +if(s!=null)try{if(s.j()){o.b=s.gk() +return!0}else o.d=null}catch(r){n=r +m=1 +o.d=null}q=o.bI(m,n) +if(1===q)return!0 +if(0===q){o.b=null +p=o.e +if(p==null||p.length===0){o.a=A.fG +return!1}o.a=p.pop() +m=0 +n=null +continue}if(2===q){m=0 +n=null +continue}if(3===q){n=o.c +o.c=null +p=o.e +if(p==null||p.length===0){o.b=null +o.a=A.fG +throw n +return!1}o.a=p.pop() +m=1 +continue}throw A.f(A.i5("sync*"))}return!1}, +cC(a){var s,r,q=this +if(a instanceof A.ap){s=a.a() +r=q.e +if(r==null)r=q.e=[] +r.push(q.a) +q.a=s +return 2}else{q.d=J.ae(a) +return 2}}} +A.ap.prototype={ +gq(a){return new A.aK(this.a())}} +A.O.prototype={ +i(a){return A.o(this.a)}, +$ir:1, +gah(){return this.b}} +A.aG.prototype={ +cd(a){if((this.c&15)!==6)return!0 +return this.b.b.aF(this.d,a.a)}, +c4(a){var s,r=this.e,q=null,p=a.a,o=this.b.b +if(t.C.b(r))q=o.cp(r,p,a.b) +else q=o.aF(r,p) +try{p=q +return p}catch(s){if(t.c.b(A.ad(s))){if((this.c&1)!==0)throw A.f(A.bL("The error handler of Future.then must return a value of the returned future's type","onError")) +throw A.f(A.bL("The error handler of Future.catchError must return a value of the future's type","onError"))}else throw s}}} +A.x.prototype={ +bh(a,b,c){var s,r=$.t +if(r===B.a){if(!t.C.b(b)&&!t.w.b(b))throw A.f(A.fg(b,"onError",u.c))}else b=A.je(b,r) +s=new A.x(r,c.h("x<0>")) +this.am(new A.aG(s,3,a,b,this.$ti.h("@<1>").A(c).h("aG<1,2>"))) +return s}, +b3(a,b,c){var s=new A.x($.t,c.h("x<0>")) +this.am(new A.aG(s,19,a,b,this.$ti.h("@<1>").A(c).h("aG<1,2>"))) +return s}, +bK(a){this.a=this.a&1|16 +this.c=a}, +a4(a){this.a=a.a&30|this.a&1 +this.c=a.c}, +am(a){var s=this,r=s.a +if(r<=3){a.a=s.c +s.c=a}else{if((r&4)!==0){r=s.c +if((r.a&24)===0){r.am(a) +return}s.a4(r)}A.aN(null,null,s.b,new A.dP(s,a))}}, +b1(a){var s,r,q,p,o,n=this,m={} +m.a=a +if(a==null)return +s=n.a +if(s<=3){r=n.c +n.c=a +if(r!=null){q=a.a +for(p=a;q!=null;p=q,q=o)o=q.a +p.a=r}}else{if((s&4)!==0){s=n.c +if((s.a&24)===0){s.b1(a) +return}n.a4(s)}m.a=n.a8(a) +A.aN(null,null,n.b,new A.dT(m,n))}}, +a7(){var s=this.c +this.c=null +return this.a8(s)}, +a8(a){var s,r,q +for(s=a,r=null;s!=null;r=s,s=q){q=s.a +s.a=r}return r}, +aU(a){var s=this,r=s.a7() +s.a=8 +s.c=a +A.aH(s,r)}, +bz(a){var s,r,q=this +if((a.a&16)!==0){s=q.b===a.b +s=!(s||s)}else s=!1 +if(s)return +r=q.a7() +q.a4(a) +A.aH(q,r)}, +ao(a){var s=this.a7() +this.bK(a) +A.aH(this,s)}, +aO(a){if(this.$ti.h("aw<1>").b(a)){this.aQ(a) +return}this.by(a)}, +by(a){this.a^=2 +A.aN(null,null,this.b,new A.dR(this,a))}, +aQ(a){A.eF(a,this,!1) +return}, +aP(a){this.a^=2 +A.aN(null,null,this.b,new A.dQ(this,a))}, +$iaw:1} +A.dP.prototype={ +$0(){A.aH(this.a,this.b)}, +$S:0} +A.dT.prototype={ +$0(){A.aH(this.b,this.a.a)}, +$S:0} +A.dS.prototype={ +$0(){A.eF(this.a.a,this.b,!0)}, +$S:0} +A.dR.prototype={ +$0(){this.a.aU(this.b)}, +$S:0} +A.dQ.prototype={ +$0(){this.a.ao(this.b)}, +$S:0} +A.dW.prototype={ +$0(){var s,r,q,p,o,n,m,l,k=this,j=null +try{q=k.a.a +j=q.b.b.cn(q.d)}catch(p){s=A.ad(p) +r=A.ab(p) +if(k.c&&k.b.a.c.a===s){q=k.a +q.c=k.b.a.c}else{q=s +o=r +if(o==null)o=A.ew(q) +n=k.a +n.c=new A.O(q,o) +q=n}q.b=!0 +return}if(j instanceof A.x&&(j.a&24)!==0){if((j.a&16)!==0){q=k.a +q.c=j.c +q.b=!0}return}if(j instanceof A.x){m=k.b.a +l=new A.x(m.b,m.$ti) +j.bh(new A.dX(l,m),new A.dY(l),t.H) +q=k.a +q.c=l +q.b=!1}}, +$S:0} +A.dX.prototype={ +$1(a){this.a.bz(this.b)}, +$S:5} +A.dY.prototype={ +$2(a,b){this.a.ao(new A.O(a,b))}, +$S:14} +A.dV.prototype={ +$0(){var s,r,q,p,o,n +try{q=this.a +p=q.a +q.c=p.b.b.aF(p.d,this.b)}catch(o){s=A.ad(o) +r=A.ab(o) +q=s +p=r +if(p==null)p=A.ew(q) +n=this.a +n.c=new A.O(q,p) +n.b=!0}}, +$S:0} +A.dU.prototype={ +$0(){var s,r,q,p,o,n,m,l=this +try{s=l.a.a.c +p=l.b +if(p.a.cd(s)&&p.a.e!=null){p.c=p.a.c4(s) +p.b=!1}}catch(o){r=A.ad(o) +q=A.ab(o) +p=l.a.a.c +if(p.a===r){n=l.b +n.c=p +p=n}else{p=r +n=q +if(n==null)n=A.ew(p) +m=l.b +m.c=new A.O(p,n) +p=m}p.b=!0}}, +$S:0} +A.cy.prototype={} +A.cI.prototype={} +A.eb.prototype={} +A.ej.prototype={ +$0(){A.hE(this.a,this.b)}, +$S:0} +A.e3.prototype={ +cr(a){var s,r,q +try{if(B.a===$.t){a.$0() +return}A.fV(null,null,this,a)}catch(q){s=A.ad(q) +r=A.ab(q) +A.ei(s,r)}}, +ct(a,b){var s,r,q +try{if(B.a===$.t){a.$1(b) +return}A.fW(null,null,this,a,b)}catch(q){s=A.ad(q) +r=A.ab(q) +A.ei(s,r)}}, +cu(a,b){a.toString +return this.ct(a,b,t.z)}, +b8(a){return new A.e4(this,a)}, +bU(a,b){return new A.e5(this,a,b)}, +co(a){if($.t===B.a)return a.$0() +return A.fV(null,null,this,a)}, +cn(a){a.toString +return this.co(a,t.z)}, +cs(a,b){if($.t===B.a)return a.$1(b) +return A.fW(null,null,this,a,b)}, +aF(a,b){var s=t.z +a.toString +return this.cs(a,b,s,s)}, +cq(a,b,c){if($.t===B.a)return a.$2(b,c) +return A.jf(null,null,this,a,b,c)}, +cp(a,b,c){var s=t.z +a.toString +return this.cq(a,b,c,s,s,s)}, +ci(a){return a}, +bg(a){var s=t.z +a.toString +return this.ci(a,s,s,s)}} +A.e4.prototype={ +$0(){return this.a.cr(this.b)}, +$S:0} +A.e5.prototype={ +$1(a){return this.a.cu(this.b,a)}, +$S(){return this.c.h("~(0)")}} +A.bo.prototype={ +gl(a){return this.a}, +ga_(){return new A.bp(this,A.u(this).h("bp<1>"))}, +R(a){var s=this.bC(a) +return s}, +bC(a){var s=this.d +if(s==null)return!1 +return this.C(this.aY(s,a),a)>=0}, +m(a,b){var s,r,q +if(typeof b=="string"&&b!=="__proto__"){s=this.b +r=s==null?null:A.eG(s,b) +return r}else if(typeof b=="number"&&(b&1073741823)===b){q=this.c +r=q==null?null:A.eG(q,b) +return r}else return this.bE(b)}, +bE(a){var s,r,q=this.d +if(q==null)return null +s=this.aY(q,a) +r=this.C(s,a) +return r<0?null:s[r+1]}, +p(a,b,c){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +q.aR(s==null?q.b=A.eH():s,b,c)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +q.aR(r==null?q.c=A.eH():r,b,c)}else q.bJ(b,c)}, +bJ(a,b){var s,r,q,p=this,o=p.d +if(o==null)o=p.d=A.eH() +s=p.D(a) +r=o[s] +if(r==null){A.eI(o,s,[a,b]);++p.a +p.e=null}else{q=p.C(r,a) +if(q>=0)r[q+1]=b +else{r.push(a,b);++p.a +p.e=null}}}, +B(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.M(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.M(s.c,b) +else return s.X(b)}, +X(a){var s,r,q,p,o=this,n=o.d +if(n==null)return null +s=o.D(a) +r=n[s] +q=o.C(r,a) +if(q<0)return null;--o.a +o.e=null +p=r.splice(q,2)[1] +if(0===r.length)delete n[s] +return p}, +H(a,b){var s,r,q,p,o,n=this,m=n.aV() +for(s=m.length,r=A.u(n).y[1],q=0;q"))}} +A.cD.prototype={ +gk(){var s=this.d +return s==null?this.$ti.c.a(s):s}, +j(){var s=this,r=s.b,q=s.c,p=s.a +if(r!==p.e)throw A.f(A.V(p)) +else if(q>=r.length){s.d=null +return!1}else{s.d=r[q] +s.c=q+1 +return!0}}} +A.bq.prototype={ +gq(a){return new A.a9(this,this.ap(),A.u(this).h("a9<1>"))}, +gl(a){return this.a}, +aB(a,b){var s,r +if(typeof b=="string"&&b!=="__proto__"){s=this.b +return s==null?!1:s[b]!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c +return r==null?!1:r[b]!=null}else return this.bB(b)}, +bB(a){var s=this.d +if(s==null)return!1 +return this.C(s[this.D(a)],a)>=0}, +P(a,b){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +return q.W(s==null?q.b=A.eJ():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +return q.W(r==null?q.c=A.eJ():r,b)}else return q.al(b)}, +al(a){var s,r,q=this,p=q.d +if(p==null)p=q.d=A.eJ() +s=q.D(a) +r=p[s] +if(r==null)p[s]=[a] +else{if(q.C(r,a)>=0)return!1 +r.push(a)}++q.a +q.e=null +return!0}, +B(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.M(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.M(s.c,b) +else return s.X(b)}, +X(a){var s,r,q,p=this,o=p.d +if(o==null)return!1 +s=p.D(a) +r=o[s] +q=p.C(r,a) +if(q<0)return!1;--p.a +p.e=null +r.splice(q,1) +if(0===r.length)delete o[s] +return!0}, +F(a){var s=this +if(s.a>0){s.b=s.c=s.d=s.e=null +s.a=0}}, +ap(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.e +if(h!=null)return h +h=A.eC(i.a,null,!1,t.z) +s=i.b +r=0 +if(s!=null){q=Object.getOwnPropertyNames(s) +p=q.length +for(o=0;o=r.length){s.d=null +return!1}else{s.d=r[q] +s.c=q+1 +return!0}}} +A.am.prototype={ +gq(a){var s=this,r=new A.aI(s,s.r,A.u(s).h("aI<1>")) +r.c=s.e +return r}, +gl(a){return this.a}, +H(a,b){var s=this,r=s.e,q=s.r +for(;r!=null;){b.$1(r.a) +if(q!==s.r)throw A.f(A.V(s)) +r=r.b}}, +P(a,b){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +return q.W(s==null?q.b=A.eK():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +return q.W(r==null?q.c=A.eK():r,b)}else return q.al(b)}, +al(a){var s,r,q=this,p=q.d +if(p==null)p=q.d=A.eK() +s=q.D(a) +r=p[s] +if(r==null)p[s]=[q.an(a)] +else{if(q.C(r,a)>=0)return!1 +r.push(q.an(a))}return!0}, +B(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.M(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.M(s.c,b) +else return s.X(b)}, +X(a){var s,r,q,p,o=this,n=o.d +if(n==null)return!1 +s=o.D(a) +r=n[s] +q=o.C(r,a) +if(q<0)return!1 +p=r.splice(q,1)[0] +if(0===r.length)delete n[s] +o.aT(p) +return!0}, +W(a,b){if(a[b]!=null)return!1 +a[b]=this.an(b) +return!0}, +M(a,b){var s +if(a==null)return!1 +s=a[b] +if(s==null)return!1 +this.aT(s) +delete a[b] +return!0}, +aS(){this.r=this.r+1&1073741823}, +an(a){var s,r=this,q=new A.e0(a) +if(r.e==null)r.e=r.f=q +else{s=r.f +s.toString +q.c=s +r.f=s.b=q}++r.a +r.aS() +return q}, +aT(a){var s=this,r=a.c,q=a.b +if(r==null)s.e=q +else r.b=q +if(q==null)s.f=r +else q.c=r;--s.a +s.aS()}, +D(a){return J.B(a)&1073741823}, +C(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r"))}, +G(a,b){return this.m(a,b)}, +i(a){return A.ez(a,"[","]")}} +A.b9.prototype={ +H(a,b){var s,r,q,p +for(s=this.ga_(),s=s.gq(s),r=A.u(this).y[1];s.j();){q=s.gk() +p=this.m(0,q) +b.$2(q,p==null?r.a(p):p)}}, +cb(a,b,c,d){var s,r,q,p,o,n=A.E(c,d) +for(s=this.ga_(),s=s.gq(s),r=A.u(this).y[1];s.j();){q=s.gk() +p=this.m(0,q) +o=b.$2(q,p==null?r.a(p):p) +n.p(0,o.a,o.b)}return n}, +ck(a,b){var s,r,q,p,o=this,n=A.u(o),m=A.b([],n.h("p<1>")) +for(s=o.ga_(),s=s.gq(s),n=n.y[1];s.j();){r=s.gk() +q=o.m(0,r) +if(b.$2(r,q==null?n.a(q):q))m.push(r)}for(n=m.length,p=0;pr)s=": Not in inclusive range "+A.o(r)+".."+A.o(q) +else s=q0)for(s=new A.aK(A.dh(m.childNodes).a());s.j();){r=s.b +o=c.b +if(o===c)A.M(A.P("")) +o.append(r)}d.b=A.db(t.N)}else{c.b=s +d.b=A.db(t.N) +n=0 +while(!0){s=c.b +if(s===c)A.M(A.P("")) +if(!(n") +r=A.fn(new A.X(a2,r),new A.cX(),r.h("k.E"),t.N).c9(0,"; ")}A.cR(s,"style",r) +s=a3==null +if(!s&&a3.a!==0)for(r=new A.X(a3,A.u(a3).h("X<1,2>")).gq(0);r.j();){l=r.d +o=l.a +k=o==="value" +j=!1 +if(k){i=c.b +if(i===c)A.M(A.P("")) +if(i==null?!1:i instanceof $.fb())j=!J.q(i.value,l.b)}if(j){o=c.b +if(o===c)A.M(A.P("")) +o.value=l.b +continue}j=!1 +if(k){k=c.b +if(k===c)A.M(A.P("")) +if(k==null?!1:k instanceof $.fc())k=!J.q(k.value,l.b) +else k=j}else k=j +if(k){o=c.b +if(o===c)A.M(A.P("")) +o.value=l.b +continue}k=c.b +if(k===c)A.M(A.P("")) +A.cR(k,o,l.b)}r=d.J() +o=["id","class","style"] +s=s?e:new A.Y(a3,A.u(a3).h("Y<1>")) +if(s!=null)B.b.E(o,s) +r.cj(o) +if(d.J().a!==0)for(s=d.J(),s=A.ih(s,s.r,A.u(s).c),r=s.$ti.c;s.j();){o=s.d +if(o==null)o=r.a(o) +k=c.b +if(k===c)A.M(A.P("")) +k.removeAttribute(o)}if(a4!=null&&a4.a!==0){s=f.c +if(s==null)h=e +else{r=A.u(s).h("Y<1>") +h=A.hV(r.h("k.E")) +h.E(0,new A.Y(s,r))}g=f.c +if(g==null)g=f.c=A.E(t.N,t.M) +a4.H(0,new A.cY(h,g,c)) +if(h!=null)h.H(0,new A.cZ(g))}else f.bY()}, +bk(a){var s,r,q,p,o,n,m=this +$label0$0:{s=m.a +if(s==null){r=m.d.b +s=r.length +if(s!==0)for(q=0;q0?n[r-1].as:l))break;--r}}}}finally{for(n=j.a,l=n.length,k=0;k")),s=s.c;p.j();){r=p.d;(r==null?s.a(r):r).cD(q)}q.y=null +q.w=B.aj}, +aG(){var s=this +s.gn() +s.z=s.e=s.ay=null +s.w=B.ak}, +aw(){var s=this.a +this.y=s==null?null:s.y}, +bP(){var s=this.a +this.x=s==null?null:s.x}, +bS(){var s=this.a +this.b=s==null?null:s.b}, +cc(){var s=this +if(s.w!==B.d)return +if(s.as)return +s.as=!0 +s.r.bm(s)}, +a1(){var s=this +if(s.w!==B.d||!s.as)return +s.r.toString +s.U() +new A.d1(s).$0() +s.aa()}, +aa(){}, +Y(){this.K(new A.d0())}, +aH(a){var s,r=this +r.cx=a +r.cy=a==null?null:a.gO() +s=r.a +if(J.q(s==null?null:s.cx,r)){s=r.a +s=s==null?null:s.gO() +s=!J.q(s,r.gO())}else s=!1 +if(s)r.a.aH(r)}, +bj(a){this.ch=a +this.b7(!1) +this.db=!1}, +a5(){}, +b7(a){var s,r=this,q=r.ch +if(q==null){s=r.a +if(t.X.b(s))q=null +else{s=s==null?null:s.CW +q=s}}if(a||!J.q(q,r.CW)){r.CW=q +r.a5() +if(!t.X.b(r))r.K(new A.d_())}}, +gO(){return this.cy}} +A.d2.prototype={ +$1(a){return a!=null&&this.a.aB(0,a)?null:a}, +$S:23} +A.d1.prototype={ +$0(){var s,r,q=this.a,p=q.z +if(p!=null&&p.a!==0)for(s=A.u(p),p=new A.a9(p,p.ap(),s.h("a9<1>")),s=s.c;p.j();){r=p.d;(r==null?s.a(r):r).cE(q)}}, +$S:0} +A.d0.prototype={ +$1(a){a.Y()}, +$S:3} +A.d_.prototype={ +$1(a){return a.b7(!0)}, +$S:3} +A.cE.prototype={ +b6(a){a.K(new A.dZ(this)) +a.aG()}, +bO(){var s,r,q=this.a,p=A.dc(q,A.u(q).c) +B.b.ag(p,A.f1()) +q.F(0) +for(q=A.aq(p).h("bh<1>"),s=new A.bh(p,q),s=new A.a6(s,s.gl(0),q.h("a6")),q=q.h("Z.E");s.j();){r=s.d +this.b6(r==null?q.a(r):r)}}} +A.dZ.prototype={ +$1(a){this.a.b6(a)}, +$S:3} +A.c0.prototype={} +A.dd.prototype={} +A.cu.prototype={ +L(a,b){if(b==null)return!1 +return J.ff(b)===A.G(this)&&this.$ti.b(b)&&b.a===this.a}, +gu(a){return A.hZ([A.G(this),this.a])}, +i(a){var s=this.$ti,r=s.c,q=this.a,p=A.L(r)===B.ae?"<'"+q+"'>":"<"+q+">" +if(A.G(this)===A.L(s))return"["+p+"]" +return"["+A.L(r).i(0)+" "+p+"]"}} +A.a7.prototype={ +S(){return A.i0(this)}} +A.aC.prototype={ +a0(a,b){this.a3(a,b)}, +v(){this.a1() +this.ai()}, +V(a){return!0}, +U(){var s,r,q,p,o=this +o.as=!1 +s=t.E.a(o.gn()) +r=s.c +if(r==null){q=A.b([],t.i) +p=s.b +if(p!=null)q.push(p) +r=q}q=o.dx +if(q==null)q=A.b([],t.k) +p=o.dy +o.dx=o.bi(q,r,p) +p.F(0)}, +K(a){var s,r,q=this.dx +q=J.ae(q==null?[]:q) +s=this.dy +for(;q.j();){r=q.gk() +if(!s.aB(0,r))a.$1(r)}}} +A.b6.prototype={ +a0(a,b){this.a3(a,b)}, +v(){this.a1() +this.ai()}, +V(a){return!1}, +U(){this.as=!1}, +K(a){}} +A.dj.prototype={} +A.bf.prototype={ +v(){var s,r,q=this +if(q.d$==null){s=q.ay.d$ +s.toString +r=new A.ah(A.b([],t.O)) +r.d=s +q.d$=r +q.aI()}q.bv()}, +a2(a){if(this.aJ(a))this.e$=!0 +this.ak(a)}, +Z(a){var s=this +if(s.e$){s.e$=!1 +s.aI()}s.aj(a)}, +a5(){this.aM() +this.aa()}} +A.b7.prototype={ +v(){var s,r,q=this +if(q.d$==null){s=q.ay.d$ +s.toString +r=new A.ah(A.b([],t.O)) +r.d=s +q.d$=r +s=q.e +s.toString +r.bk(t.x.a(s).b)}q.bt()}, +a2(a){var s=this.e +s.toString +if(t.x.a(s).b!==a.b)this.e$=!0 +this.ak(a)}, +Z(a){var s,r,q=this +if(q.e$){q.e$=!1 +s=q.d$ +s.toString +r=q.e +r.toString +s.bk(t.x.a(r).b)}q.aj(a)}, +a5(){this.aM() +this.aa()}} +A.R.prototype={ +aJ(a){return!0}, +aa(){var s,r,q,p,o=this.ay +if(o==null)s=null +else{o=o.d$ +o.toString +s=o}if(s!=null){r=this.CW +while(!0){o=r==null +if(!(!o&&r.gO()==null))break +r=r.CW}q=o?null:r.gO() +o=this.d$ +o.toString +if(q==null)p=null +else{p=q.d$ +p.toString}s.az(o,p)}}, +Y(){var s,r,q=this.ay +if(q==null)s=null +else{q=q.d$ +q.toString +s=q}if(s!=null){q=this.d$ +r=q.a +if(r!=null)r.parentNode.removeChild(r) +q.d=null}}, +gO(){return this}} +A.ck.prototype={ +S(){var s=new A.cr(A.E(t.S,t._),B.l),r=A.ax(t.h),q=($.I+1)%16777215 +$.I=q +return s.c=new A.cl(s,r,q,this,B.c)}} +A.ci.prototype={ +N(a){a.$0() +this.c.cc()}} +A.cl.prototype={ +b9(){return this.y1.ab(this)}, +v(){var s=this +if(s.r.c)s.y1.toString +s.bF() +s.aK()}, +bF(){try{this.y1.toString}finally{}this.y1.toString}, +U(){var s=this +s.r.toString +if(s.bd){s.y1.toString +s.bd=!1}s.aL()}, +V(a){this.y1.toString +return!0}, +a2(a){this.ak(a) +this.y1.toString}, +Z(a){try{this.y1.toString}finally{}this.aj(a)}, +T(){this.y1.toString +this.br()}, +aG(){this.bs() +this.y1=this.y1.c=null}} +A.al.prototype={ +S(){var s=A.ax(t.h),r=($.I+1)%16777215 +$.I=r +return new A.cm(s,r,this,B.c)}} +A.cm.prototype={ +gn(){return t.q.a(A.d.prototype.gn.call(this))}, +v(){if(this.r.c)this.f.toString +this.aK()}, +V(a){t.q.a(A.d.prototype.gn.call(this)) +return!0}, +b9(){return t.q.a(A.d.prototype.gn.call(this)).ab(this)}, +U(){this.r.toString +this.aL()}} +A.bK.prototype={ +ab(a){var s,r=null,q=t.i,p=A.f7(A.b([new A.A("Double-click to edit a todo",r)],q)),o=A.f7(A.b([new A.A("Created by the Dart team",r)],q)),n=A.b([new A.A("TodoMVC",r)],q),m=t.N,l=A.da(A.E(m,m),m,m) +l.p(0,"href","http://todomvc.com") +m=A.E(m,t.v) +s=t.z +m.E(0,A.f0().$2$1$onClick(r,s,s)) +return A.b([new A.cq(r),A.h1(A.b([p,o,A.f7(A.b([new A.A("Part of ",r),new A.w("a",r,r,r,l,m,r,n,r)],q))],q),"info",r)],q)}} +A.cq.prototype={} +A.aY.prototype={ +a6(){return"DisplayState."+this.b}} +A.cr.prototype={ +bR(a){this.N(new A.ds(this,a))}, +cv(a){this.N(new A.dC(this,a))}, +cw(){this.N(new A.dB(this))}, +c1(a){this.N(new A.dz(this,a))}, +bX(){this.N(new A.dy(this))}, +bn(a){this.N(new A.dA(this,a))}, +ab(a7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c="none;",b="block;",a="toggle-all",a0=t.N,a1=A.Q(["data-testid","header"],a0,a0),a2=t.i,a3=A.b([new A.w("h1",d,d,d,d,d,d,A.b([new A.A("todos",d)],a2),d),A.f_(A.b([new A.cc(e.gbQ(),d)],a2),"input-container")],a2),a4=e.d,a5=A.Q(["display",a4.a===0?c:b],a0,a0),a6=e.f>0?d:A.Q(["checked",""],a0,a0) +a6=A.f4(A.b([],a2),a6,a,a,d,new A.dt(e),B.f,d) +s=A.Q(["for","toggle-all"],a0,a0) +s=A.f_(A.b([a6,A.h4(A.b([new A.A("Mark all as complete",d)],a2),s,"toggle-all-label")],a2),"toggle-all-container") +a6=A.b([],a2) +for(r=A.hX(a4,t.S,t._),q=r.a,p=A.u(r),r=new A.aA(q.gq(q),r.b,p.h("aA<1,2>")),p=p.y[1],q=t.Y;r.j();){o={} +n=r.a +if(n==null)n=p.a(n) +o.a=null +m=n.a +o.a=m +l=n.b +k=l.a +if(!(k&&e.r!==B.n))n=!k&&e.r!==B.m +else n=!0 +if(n){n=k?"":"completed" +j=""+m +i=A.Q(["data-id",j],a0,a0) +h=k?d:A.Q(["checked",""],a0,a0) +a6.push(A.h5(A.b([A.f_(A.b([A.f4(A.b([],a2),h,"toggle",d,new A.cu(j+"-"+k,q),new A.du(o,e),B.f,d),A.h4(A.b([new A.A(l.b,d)],a2),d,d),A.h0(A.b([],a2),"destroy",new A.dv(o,e),d)],a2),"view")],a2),i,n))}}a6=A.b([s,A.hb(a6,"todo-list")],a2) +s=A.Q(["display",a4.a===0?c:b],a0,a0) +r=A.b([new A.A(""+e.f,d)],a2) +q=e.f===1?"":"s" +q=A.ha(A.b([new A.w("strong",d,d,d,d,d,d,r,d),new A.A(" item"+q+" left",d)],a2),"todo-count",d) +r=A.b([],a2) +for(p=[B.a1,B.a0,B.a2],o=t.v,g=0;g<3;++g){n={} +j=p[g] +n.a=null +f=j.b +n.a=f +i=e.r===f?"selected":"" +n=A.Q(["click",new A.dw(n,e)],a0,o) +r.push(A.h5(A.b([A.ha(A.b([new A.A(j.a,d)],a2),i,n)],a2),d,d))}r=A.hb(r,"filters") +a0=A.Q(["display",a4.a-e.f===0?c:b],a0,a0) +return A.b([new A.w("section","root","todoapp",d,d,d,d,A.b([new A.w("header",d,"header",d,a1,d,d,a3,d),new A.w("main",d,"main",new A.bv(a5),d,d,d,a6,d),A.h1(A.b([q,r,A.h0(A.b([new A.A("Clear completed",d)],a2),"clear-completed",e.gbW(),new A.bv(a0))],a2),"footer",new A.bv(s))],a2),d)],a2)}} +A.ds.prototype={ +$0(){var s=this.a +s.d.p(0,++s.e,new A.aJ(!0,this.b));++s.f}, +$S:0} +A.dC.prototype={ +$0(){var s=this.a,r=s.d,q=this.b,p=r.m(0,q),o=p.a +r.p(0,q,new A.aJ(!o,p.b)) +r=s.f +if(o)s.f=r-1 +else s.f=r+1}, +$S:0} +A.dB.prototype={ +$0(){var s,r,q,p,o +for(s=this.a,r=s.d,q=new A.b8(r,r.r,r.e);q.j();){p=q.d +o=r.m(0,p).b +r.p(0,p,new A.aJ(s.f===0,o))}s.f=s.f===0?r.a:0}, +$S:0} +A.dz.prototype={ +$0(){var s=this.a +if(s.d.B(0,this.b).a)--s.f}, +$S:0} +A.dy.prototype={ +$0(){this.a.d.ck(0,new A.dx())}, +$S:0} +A.dx.prototype={ +$2(a,b){return!b.a}, +$S:24} +A.dA.prototype={ +$0(){this.a.r=this.b}, +$S:0} +A.dt.prototype={ +$1(a){return this.a.cw()}, +$S:2} +A.du.prototype={ +$1(a){return this.b.cv(this.a.a)}, +$S:2} +A.dv.prototype={ +$0(){return this.b.c1(this.a.a)}, +$S:0} +A.dw.prototype={ +$1(a){return this.b.bn(this.a.a)}, +$S:1} +A.cc.prototype={ +ab(a){var s,r=t.N +r=A.Q(["placeholder","What needs to be done?"],r,r) +s=t.i +return A.b([A.f4(A.b([],s),r,"new-todo",null,null,new A.dg(this),null,"")],s)}} +A.dg.prototype={ +$1(a){return this.a.c.$1(A.fO(a))}, +$S:2} +A.df.prototype={ +$1(a){return new A.ao(a.a,a.b)}, +$S(){return this.a.h("@<0>").A(this.b).h("+(1,2)(F<1,2>)")}} +A.ex.prototype={} +A.cB.prototype={ +bV(){var s,r,q=this,p=new A.x($.t,t.D) +p.aO(null) +s=q.b +if(s==null)return p +r=q.d +if(r!=null)s.removeEventListener(q.c,r,!1) +q.d=q.b=null +return p}} +A.dN.prototype={ +$1(a){return this.a.$1(a)}, +$S:1};(function aliases(){var s=J.a5.prototype +s.bu=s.i +s=A.ah.prototype +s.bp=s.az +s=A.aW.prototype +s.aK=s.v +s.aL=s.U +s=A.bR.prototype +s.bo=s.aA +s=A.d.prototype +s.a3=s.a0 +s.ai=s.v +s.ak=s.a2 +s.aj=s.Z +s.br=s.T +s.bs=s.aG +s.bq=s.aw +s.aM=s.a5 +s=A.aC.prototype +s.bv=s.v +s=A.b6.prototype +s.bt=s.v})();(function installTearOffs(){var s=hunkHelpers._static_2,r=hunkHelpers._static_1,q=hunkHelpers._static_0,p=hunkHelpers.installStaticTearOff,o=hunkHelpers._instance_0u,n=hunkHelpers._instance_1u +s(J,"j_","hS",25) +r(A,"jp","ib",4) +r(A,"jq","ic",4) +r(A,"jr","id",4) +q(A,"h_","jj",0) +p(A,"f0",0,null,["$2$3$onChange$onClick$onInput","$0","$2$0","$2$1$onClick","$2$2$onChange$onInput"],["cN",function(){var l=t.z +return A.cN(null,null,null,l,l)},function(a,b){return A.cN(null,null,null,a,b)},function(a,b,c){return A.cN(null,a,null,b,c)},function(a,b,c,d){return A.cN(a,null,b,c,d)}],26,0) +o(A.ch.prototype,"gbZ","c_",0) +s(A,"f1","hC",27) +r(A,"en","ig",3) +o(A.bP.prototype,"gce","cf",0) +o(A.cE.prototype,"gbN","bO",0) +var m +n(m=A.cr.prototype,"gbQ","bR",7) +o(m,"gbW","bX",0)})();(function inheritance(){var s=hunkHelpers.mixin,r=hunkHelpers.mixinHard,q=hunkHelpers.inherit,p=hunkHelpers.inheritMany +q(A.h,null) +p(A.h,[A.eA,J.bW,A.bi,J.bM,A.k,A.bQ,A.r,A.dm,A.a6,A.aA,A.cv,A.b0,A.bw,A.bT,A.dD,A.di,A.b_,A.bz,A.ag,A.b9,A.d9,A.b8,A.c1,A.dK,A.N,A.cC,A.cL,A.e7,A.cx,A.aK,A.O,A.aG,A.x,A.cy,A.cI,A.eb,A.cD,A.ak,A.a9,A.e0,A.aI,A.m,A.dM,A.bk,A.dO,A.F,A.D,A.cJ,A.cn,A.cw,A.dj,A.av,A.ch,A.cF,A.dF,A.bB,A.cK,A.co,A.bP,A.d,A.bR,A.C,A.cE,A.c0,A.R,A.ci,A.ex,A.cB]) +p(J.bW,[J.bY,J.b2,J.b4,J.b3,J.b5,J.ay,J.az]) +p(J.b4,[J.a5,J.p,A.c2,A.bc]) +p(J.a5,[J.cd,J.aD,J.a4]) +q(J.bX,A.bi) +q(J.d7,J.p) +p(J.ay,[J.b1,J.bZ]) +p(A.k,[A.aE,A.c,A.aj,A.bm,A.ap]) +q(A.bG,A.aE) +q(A.bn,A.bG) +q(A.af,A.bn) +p(A.r,[A.ai,A.a0,A.c_,A.ct,A.cg,A.cA,A.bN,A.U,A.bl,A.cs,A.cj,A.bS]) +p(A.c,[A.Z,A.Y,A.X,A.bp]) +q(A.aZ,A.aj) +q(A.bh,A.Z) +q(A.cG,A.bw) +p(A.cG,[A.ao,A.aJ]) +q(A.aX,A.bT) +q(A.be,A.a0) +p(A.ag,[A.cU,A.cV,A.dr,A.ep,A.er,A.dH,A.dG,A.ec,A.dX,A.e5,A.cX,A.cZ,A.d4,A.em,A.eg,A.ee,A.d2,A.d0,A.d_,A.dZ,A.dt,A.du,A.dw,A.dg,A.df,A.dN]) +p(A.dr,[A.dn,A.aV]) +p(A.b9,[A.W,A.bo]) +p(A.cV,[A.d8,A.eq,A.ed,A.ek,A.dY,A.d5,A.de,A.cW,A.cY,A.eh,A.dx]) +p(A.bc,[A.c3,A.aB]) +p(A.aB,[A.br,A.bt]) +q(A.bs,A.br) +q(A.ba,A.bs) +q(A.bu,A.bt) +q(A.bb,A.bu) +p(A.ba,[A.c4,A.c5]) +p(A.bb,[A.c6,A.c7,A.c8,A.c9,A.ca,A.bd,A.cb]) +q(A.bA,A.cA) +p(A.cU,[A.dI,A.dJ,A.e8,A.dP,A.dT,A.dS,A.dR,A.dQ,A.dW,A.dV,A.dU,A.ej,A.e4,A.ef,A.dl,A.cT,A.d1,A.ds,A.dC,A.dB,A.dz,A.dy,A.dA,A.dv]) +q(A.e3,A.eb) +q(A.by,A.ak) +p(A.by,[A.bq,A.am]) +p(A.U,[A.bg,A.bV]) +q(A.cQ,A.cw) +q(A.cz,A.cQ) +q(A.cS,A.cz) +q(A.ah,A.dj) +q(A.dk,A.ah) +p(A.dM,[A.n,A.bj,A.aF,A.aY]) +p(A.bB,[A.dL,A.e2]) +q(A.dp,A.cK) +p(A.dp,[A.e6,A.bv]) +p(A.d,[A.aW,A.aC,A.b6]) +p(A.C,[A.a7,A.A,A.ck,A.al]) +p(A.a7,[A.cH,A.w]) +q(A.bf,A.aC) +p(A.bf,[A.bx,A.bU]) +q(A.b7,A.b6) +q(A.cp,A.b7) +q(A.dd,A.c0) +q(A.cu,A.dd) +p(A.aW,[A.cl,A.cm]) +p(A.al,[A.bK,A.cc]) +q(A.cq,A.ck) +q(A.cr,A.ci) +s(A.bG,A.m) +s(A.br,A.m) +s(A.bs,A.b0) +s(A.bt,A.m) +s(A.bu,A.b0) +s(A.cz,A.bR) +s(A.cw,A.ch) +s(A.cK,A.co) +r(A.bf,A.R) +r(A.b7,A.R)})() +var v={G:typeof self!="undefined"?self:globalThis,typeUniverse:{eC:new Map(),tR:{},eT:{},tPV:{},sEA:[]},mangledGlobalNames:{a:"int",v:"double",h6:"num",e:"String",T:"bool",D:"Null",i:"List",h:"Object",fm:"Map"},mangledNames:{},types:["~()","~(l)","~(@)","~(d)","~(~())","D(@)","D()","~(e)","@(@)","@(@,e)","@(e)","D(~())","D(@,a8)","~(a,@)","D(h,a8)","~(@,@)","~(h?,h?)","~(e,av)","e(F)","~(e,~(l))","h?()","T(n)","F(e,e)","d?(d?)","T(a,+isActive,todo(T,e))","a(@,@)","fm({onChange:~(1^)?,onClick:~()?,onInput:~(0^)?})","a(d,d)"],interceptorsByTag:null,leafTags:null,arrayRti:Symbol("$ti"),rttc:{"2;":(a,b)=>c=>c instanceof A.ao&&a.b(c.a)&&b.b(c.b),"2;isActive,todo":(a,b)=>c=>c instanceof A.aJ&&a.b(c.a)&&b.b(c.b)}} +A.ix(v.typeUniverse,JSON.parse('{"cd":"a5","aD":"a5","a4":"a5","bY":{"T":[],"j":[]},"b2":{"j":[]},"b4":{"l":[]},"a5":{"l":[]},"p":{"i":["1"],"c":["1"],"l":[]},"bX":{"bi":[]},"d7":{"p":["1"],"i":["1"],"c":["1"],"l":[]},"ay":{"v":[]},"b1":{"v":[],"a":[],"j":[]},"bZ":{"v":[],"j":[]},"az":{"e":[],"j":[]},"aE":{"k":["2"]},"bn":{"m":["2"],"i":["2"],"aE":["1","2"],"c":["2"],"k":["2"]},"af":{"bn":["1","2"],"m":["2"],"i":["2"],"aE":["1","2"],"c":["2"],"k":["2"],"m.E":"2","k.E":"2"},"ai":{"r":[]},"c":{"k":["1"]},"Z":{"c":["1"],"k":["1"]},"aj":{"k":["2"],"k.E":"2"},"aZ":{"aj":["1","2"],"c":["2"],"k":["2"],"k.E":"2"},"bm":{"k":["1"],"k.E":"1"},"bh":{"Z":["1"],"c":["1"],"k":["1"],"k.E":"1","Z.E":"1"},"aX":{"bT":["1","2"]},"be":{"a0":[],"r":[]},"c_":{"r":[]},"ct":{"r":[]},"bz":{"a8":[]},"cg":{"r":[]},"W":{"b9":["1","2"]},"Y":{"c":["1"],"k":["1"],"k.E":"1"},"X":{"c":["F<1,2>"],"k":["F<1,2>"],"k.E":"F<1,2>"},"c2":{"l":[],"j":[]},"bc":{"l":[]},"c3":{"l":[],"j":[]},"aB":{"J":["1"],"l":[]},"ba":{"m":["v"],"i":["v"],"J":["v"],"c":["v"],"l":[]},"bb":{"m":["a"],"i":["a"],"J":["a"],"c":["a"],"l":[]},"c4":{"m":["v"],"i":["v"],"J":["v"],"c":["v"],"l":[],"j":[],"m.E":"v"},"c5":{"m":["v"],"i":["v"],"J":["v"],"c":["v"],"l":[],"j":[],"m.E":"v"},"c6":{"m":["a"],"i":["a"],"J":["a"],"c":["a"],"l":[],"j":[],"m.E":"a"},"c7":{"m":["a"],"i":["a"],"J":["a"],"c":["a"],"l":[],"j":[],"m.E":"a"},"c8":{"m":["a"],"i":["a"],"J":["a"],"c":["a"],"l":[],"j":[],"m.E":"a"},"c9":{"m":["a"],"i":["a"],"J":["a"],"c":["a"],"l":[],"j":[],"m.E":"a"},"ca":{"m":["a"],"i":["a"],"J":["a"],"c":["a"],"l":[],"j":[],"m.E":"a"},"bd":{"m":["a"],"i":["a"],"J":["a"],"c":["a"],"l":[],"j":[],"m.E":"a"},"cb":{"m":["a"],"i":["a"],"J":["a"],"c":["a"],"l":[],"j":[],"m.E":"a"},"cL":{"fv":[]},"cA":{"r":[]},"bA":{"a0":[],"r":[]},"ap":{"k":["1"],"k.E":"1"},"O":{"r":[]},"x":{"aw":["1"]},"bo":{"b9":["1","2"]},"bp":{"c":["1"],"k":["1"],"k.E":"1"},"bq":{"ak":["1"],"c":["1"]},"am":{"ak":["1"],"c":["1"]},"ak":{"c":["1"]},"by":{"ak":["1"],"c":["1"]},"i":{"c":["1"]},"bN":{"r":[]},"a0":{"r":[]},"U":{"r":[]},"bg":{"r":[]},"bV":{"r":[]},"bl":{"r":[]},"cs":{"r":[]},"cj":{"r":[]},"bS":{"r":[]},"bk":{"r":[]},"cJ":{"a8":[]},"iA":{"w":[],"a7":[],"C":[]},"hK":{"d":[]},"aW":{"d":[]},"cH":{"a7":[],"C":[]},"bx":{"R":[],"d":[]},"w":{"a7":[],"C":[]},"bU":{"R":[],"d":[]},"A":{"C":[]},"cp":{"R":[],"d":[]},"a7":{"C":[]},"aC":{"d":[]},"b6":{"d":[]},"bf":{"R":[],"d":[]},"b7":{"R":[],"d":[]},"ck":{"C":[]},"cl":{"d":[]},"al":{"C":[]},"cm":{"d":[]},"bK":{"al":[],"C":[]},"cq":{"C":[]},"cc":{"al":[],"C":[]},"hN":{"i":["a"],"c":["a"]},"i9":{"i":["a"],"c":["a"]},"i8":{"i":["a"],"c":["a"]},"hL":{"i":["a"],"c":["a"]},"i6":{"i":["a"],"c":["a"]},"hM":{"i":["a"],"c":["a"]},"i7":{"i":["a"],"c":["a"]},"hG":{"i":["v"],"c":["v"]},"hH":{"i":["v"],"c":["v"]}}')) +A.iw(v.typeUniverse,JSON.parse('{"cv":1,"b0":1,"bG":2,"b8":1,"aB":1,"aK":1,"cI":1,"by":1,"co":1,"ci":1,"cB":1}')) +var u={c:"Error handler must accept one Object or one Object and a StackTrace as arguments, and return a value of the returned future's type"} +var t=(function rtii(){var s=A.cO +return{e:s("C"),J:s("w"),U:s("c<@>"),h:s("d"),Q:s("r"),M:s("av"),Z:s("jP"),r:s("hK"),i:s("p"),k:s("p"),O:s("p"),f:s("p"),s:s("p"),b:s("p<@>"),u:s("p<~()>"),T:s("b2"),m:s("l"),g:s("a4"),p:s("J<@>"),B:s("c0"),j:s("i<@>"),W:s("F"),P:s("D"),K:s("h"),E:s("a7"),L:s("jQ"),t:s("+()"),_:s("+isActive,todo(T,e)"),X:s("R"),l:s("a8"),q:s("al"),N:s("e"),x:s("A"),A:s("j"),G:s("fv"),c:s("a0"),o:s("aD"),Y:s("cu"),a:s("bm"),aY:s("x<@>"),D:s("x<~>"),F:s("ap"),y:s("T"),V:s("v"),z:s("@"),w:s("@(h)"),C:s("@(h,a8)"),S:s("a"),d:s("d?"),bc:s("aw?"),R:s("h?"),aD:s("e?"),cG:s("T?"),I:s("v?"),a3:s("a?"),ae:s("h6?"),n:s("h6"),H:s("~"),aI:s("~()"),v:s("~(l)")}})();(function constants(){var s=hunkHelpers.makeConstList +B.V=J.bW.prototype +B.b=J.p.prototype +B.u=J.b1.prototype +B.h=J.ay.prototype +B.W=J.a4.prototype +B.X=J.b4.prototype +B.v=J.cd.prototype +B.i=J.aD.prototype +B.j=function getTagFallback(o) { + var s = Object.prototype.toString.call(o); + return s.substring(8, s.length - 1); +} +B.y=function() { + var toStringFunction = Object.prototype.toString; + function getTag(o) { + var s = toStringFunction.call(o); + return s.substring(8, s.length - 1); + } + function getUnknownTag(object, tag) { + if (/^HTML[A-Z].*Element$/.test(tag)) { + var name = toStringFunction.call(object); + if (name == "[object Object]") return null; + return "HTMLElement"; + } + } + function getUnknownTagGenericBrowser(object, tag) { + if (object instanceof HTMLElement) return "HTMLElement"; + return getUnknownTag(object, tag); + } + function prototypeForTag(tag) { + if (typeof window == "undefined") return null; + if (typeof window[tag] == "undefined") return null; + var constructor = window[tag]; + if (typeof constructor != "function") return null; + return constructor.prototype; + } + function discriminator(tag) { return null; } + var isBrowser = typeof HTMLElement == "function"; + return { + getTag: getTag, + getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag, + prototypeForTag: prototypeForTag, + discriminator: discriminator }; +} +B.D=function(getTagFallback) { + return function(hooks) { + if (typeof navigator != "object") return hooks; + var userAgent = navigator.userAgent; + if (typeof userAgent != "string") return hooks; + if (userAgent.indexOf("DumpRenderTree") >= 0) return hooks; + if (userAgent.indexOf("Chrome") >= 0) { + function confirm(p) { + return typeof window == "object" && window[p] && window[p].name == p; + } + if (confirm("Window") && confirm("HTMLElement")) return hooks; + } + hooks.getTag = getTagFallback; + }; +} +B.z=function(hooks) { + if (typeof dartExperimentalFixupGetTag != "function") return hooks; + hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); +} +B.C=function(hooks) { + if (typeof navigator != "object") return hooks; + var userAgent = navigator.userAgent; + if (typeof userAgent != "string") return hooks; + if (userAgent.indexOf("Firefox") == -1) return hooks; + var getTag = hooks.getTag; + var quickMap = { + "BeforeUnloadEvent": "Event", + "DataTransfer": "Clipboard", + "GeoGeolocation": "Geolocation", + "Location": "!Location", + "WorkerMessageEvent": "MessageEvent", + "XMLDocument": "!Document"}; + function getTagFirefox(o) { + var tag = getTag(o); + return quickMap[tag] || tag; + } + hooks.getTag = getTagFirefox; +} +B.B=function(hooks) { + if (typeof navigator != "object") return hooks; + var userAgent = navigator.userAgent; + if (typeof userAgent != "string") return hooks; + if (userAgent.indexOf("Trident/") == -1) return hooks; + var getTag = hooks.getTag; + var quickMap = { + "BeforeUnloadEvent": "Event", + "DataTransfer": "Clipboard", + "HTMLDDElement": "HTMLElement", + "HTMLDTElement": "HTMLElement", + "HTMLPhraseElement": "HTMLElement", + "Position": "Geoposition" + }; + function getTagIE(o) { + var tag = getTag(o); + var newTag = quickMap[tag]; + if (newTag) return newTag; + if (tag == "Object") { + if (window.DataView && (o instanceof window.DataView)) return "DataView"; + } + return tag; + } + function prototypeForTagIE(tag) { + var constructor = window[tag]; + if (constructor == null) return null; + return constructor.prototype; + } + hooks.getTag = getTagIE; + hooks.prototypeForTag = prototypeForTagIE; +} +B.A=function(hooks) { + var getTag = hooks.getTag; + var prototypeForTag = hooks.prototypeForTag; + function getTagFixed(o) { + var tag = getTag(o); + if (tag == "Document") { + if (!!o.xmlVersion) return "!Document"; + return "!HTMLDocument"; + } + return tag; + } + function prototypeForTagFixed(tag) { + if (tag == "Document") return null; + return prototypeForTag(tag); + } + hooks.getTag = getTagFixed; + hooks.prototypeForTag = prototypeForTagFixed; +} +B.k=function(hooks) { return hooks; } + +B.e=new A.dm() +B.a=new A.e3() +B.E=new A.cJ() +B.l=new A.aY("all") +B.m=new A.aY("active") +B.n=new A.aY("completed") +B.o=new A.n("datetime-local","dateTimeLocal") +B.f=new A.n("checkbox","checkbox") +B.p=new A.n("date","date") +B.q=new A.n("file","file") +B.r=new A.n("number","number") +B.t=new A.n("radio","radio") +B.F=new A.n("button","button") +B.G=new A.n("color","color") +B.H=new A.n("email","email") +B.I=new A.n("hidden","hidden") +B.J=new A.n("image","image") +B.K=new A.n("month","month") +B.L=new A.n("password","password") +B.M=new A.n("range","range") +B.N=new A.n("reset","reset") +B.O=new A.n("search","search") +B.P=new A.n("submit","submit") +B.Q=new A.n("tel","tel") +B.R=new A.n("text","text") +B.S=new A.n("time","time") +B.T=new A.n("url","url") +B.U=new A.n("week","week") +B.Y=A.b(s([B.F,B.f,B.G,B.p,B.o,B.H,B.q,B.I,B.J,B.K,B.r,B.L,B.t,B.M,B.N,B.O,B.P,B.Q,B.R,B.S,B.T,B.U]),A.cO("p")) +B.a_={svg:0,math:1} +B.Z=new A.aX(B.a_,["http://www.w3.org/2000/svg","http://www.w3.org/1998/Math/MathML"],A.cO("aX")) +B.a0=new A.ao("Active",B.m) +B.a1=new A.ao("All",B.l) +B.a2=new A.ao("Completed",B.n) +B.w=new A.bj("idle") +B.a3=new A.bj("midFrameCallback") +B.a4=new A.bj("postFrameCallbacks") +B.a5=A.H("jM") +B.a6=A.H("jN") +B.a7=A.H("hG") +B.a8=A.H("hH") +B.a9=A.H("hL") +B.aa=A.H("hM") +B.ab=A.H("hN") +B.ac=A.H("l") +B.ad=A.H("h") +B.ae=A.H("e") +B.af=A.H("i6") +B.ag=A.H("i7") +B.ah=A.H("i8") +B.ai=A.H("i9") +B.x=A.H("iA") +B.c=new A.aF("initial") +B.d=new A.aF("active") +B.aj=new A.aF("inactive") +B.ak=new A.aF("defunct") +B.al=new A.cF("red") +B.am=new A.cF("yellow")})();(function staticFields(){$.e_=null +$.au=A.b([],t.f) +$.fq=null +$.fj=null +$.fi=null +$.h2=null +$.fZ=null +$.h9=null +$.el=null +$.es=null +$.f3=null +$.e1=A.b([],A.cO("p?>")) +$.aM=null +$.bH=null +$.bI=null +$.eS=!1 +$.t=B.a +$.I=1})();(function lazyInitializers(){var s=hunkHelpers.lazyFinal +s($,"jO","f9",()=>A.jx("_$dart_dartClosure")) +s($,"ka","hq",()=>A.b([new J.bX()],A.cO("p"))) +s($,"jS","hd",()=>A.a1(A.dE({ +toString:function(){return"$receiver$"}}))) +s($,"jT","he",()=>A.a1(A.dE({$method$:null, +toString:function(){return"$receiver$"}}))) +s($,"jU","hf",()=>A.a1(A.dE(null))) +s($,"jV","hg",()=>A.a1(function(){var $argumentsExpr$="$arguments$" +try{null.$method$($argumentsExpr$)}catch(r){return r.message}}())) +s($,"jY","hj",()=>A.a1(A.dE(void 0))) +s($,"jZ","hk",()=>A.a1(function(){var $argumentsExpr$="$arguments$" +try{(void 0).$method$($argumentsExpr$)}catch(r){return r.message}}())) +s($,"jX","hi",()=>A.a1(A.fw(null))) +s($,"jW","hh",()=>A.a1(function(){try{null.$method$}catch(r){return r.message}}())) +s($,"k0","hm",()=>A.a1(A.fw(void 0))) +s($,"k_","hl",()=>A.a1(function(){try{(void 0).$method$}catch(r){return r.message}}())) +s($,"k1","fa",()=>A.ia()) +s($,"k9","cP",()=>A.h7(B.ad)) +s($,"k2","eu",()=>A.aL(A.aS(),"Element")) +s($,"k4","fb",()=>A.aL(A.aS(),"HTMLInputElement")) +s($,"k3","hn",()=>A.aL(A.aS(),"HTMLAnchorElement")) +s($,"k6","fc",()=>A.aL(A.aS(),"HTMLSelectElement")) +s($,"k7","hp",()=>A.aL(A.aS(),"HTMLTextAreaElement")) +s($,"k5","ho",()=>A.aL(A.aS(),"HTMLOptionElement")) +s($,"k8","fd",()=>A.aL(A.aS(),"Text"))})();(function nativeSupport(){!function(){var s=function(a){var m={} +m[a]=1 +return Object.keys(hunkHelpers.convertToFastObject(m))[0]} +v.getIsolateTag=function(a){return s("___dart_"+a+v.isolateTag)} +var r="___dart_isolate_tags_" +var q=Object[r]||(Object[r]=Object.create(null)) +var p="_ZxYxX" +for(var o=0;;o++){var n=s(p+"_"+o+"_") +if(!(n in q)){q[n]=1 +v.isolateTag=n +break}}v.dispatchPropertyName=v.getIsolateTag("dispatch_record")}() +hunkHelpers.setOrUpdateInterceptorsByTag({ArrayBuffer:A.c2,ArrayBufferView:A.bc,DataView:A.c3,Float32Array:A.c4,Float64Array:A.c5,Int16Array:A.c6,Int32Array:A.c7,Int8Array:A.c8,Uint16Array:A.c9,Uint32Array:A.ca,Uint8ClampedArray:A.bd,CanvasPixelArray:A.bd,Uint8Array:A.cb}) +hunkHelpers.setOrUpdateLeafTags({ArrayBuffer:true,ArrayBufferView:false,DataView:true,Float32Array:true,Float64Array:true,Int16Array:true,Int32Array:true,Int8Array:true,Uint16Array:true,Uint32Array:true,Uint8ClampedArray:true,CanvasPixelArray:true,Uint8Array:false}) +A.aB.$nativeSuperclassTag="ArrayBufferView" +A.br.$nativeSuperclassTag="ArrayBufferView" +A.bs.$nativeSuperclassTag="ArrayBufferView" +A.ba.$nativeSuperclassTag="ArrayBufferView" +A.bt.$nativeSuperclassTag="ArrayBufferView" +A.bu.$nativeSuperclassTag="ArrayBufferView" +A.bb.$nativeSuperclassTag="ArrayBufferView"})() +Function.prototype.$0=function(){return this()} +Function.prototype.$1=function(a){return this(a)} +Function.prototype.$2=function(a,b){return this(a,b)} +Function.prototype.$3=function(a,b,c){return this(a,b,c)} +Function.prototype.$4=function(a,b,c,d){return this(a,b,c,d)} +Function.prototype.$1$0=function(){return this()} +convertAllToFastObject(w) +convertToFastObject($);(function(a){if(typeof document==="undefined"){a(null) +return}if(typeof document.currentScript!="undefined"){a(document.currentScript) +return}var s=document.scripts +function onLoad(b){for(var q=0;q .learn { + position: absolute; + width: 272px; + top: 8px; + left: -300px; + padding: 10px; + border-radius: 5px; + background-color: rgba(255, 255, 255, 0.6); + transition-property: left; + transition-duration: 500ms; +} + +@media (min-width: 899px) { + .learn-bar { + width: auto; + padding-left: 300px; + } + + .learn-bar > .learn { + left: 8px; + } +} diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/favicon.ico b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/favicon.ico new file mode 100644 index 000000000..bd829b4fc Binary files /dev/null and b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/favicon.ico differ diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/index.css b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/index.css new file mode 100644 index 000000000..fb6fb83ef --- /dev/null +++ b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/index.css @@ -0,0 +1,388 @@ +@charset "utf-8"; + +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #111111; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-weight: 300; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp h1 { + position: absolute; + top: -140px; + width: 100%; + font-size: 80px; + font-weight: 200; + text-align: center; + color: #b83f45; + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.new-todo { + padding: 16px 16px 16px 60px; + height: 65px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +.toggle-all { + width: 1px; + height: 1px; + border: none; /* Mobile Safari */ + opacity: 0; + position: absolute; + right: 100%; + bottom: 100%; +} + +.toggle-all + label { + display: flex; + align-items: center; + justify-content: center; + width: 45px; + height: 65px; + font-size: 0; + position: absolute; + top: -65px; + left: -0; +} + +.toggle-all + label:before { + content: "❯"; + display: inline-block; + font-size: 22px; + color: #949494; + padding: 10px 27px 10px 27px; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.toggle-all:checked + label:before { + color: #484848; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: calc(100% - 43px); + padding: 12px 16px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle { + opacity: 0; +} + +.todo-list li .toggle + label { + /* + Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433 + IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/ + */ + background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23949494%22%20stroke-width%3D%223%22/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: center left; +} + +.todo-list li .toggle:checked + label { + background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%2359A193%22%20stroke-width%3D%223%22%2F%3E%3Cpath%20fill%3D%22%233EA390%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22%2F%3E%3C%2Fsvg%3E"); +} + +.todo-list li label { + word-break: break-all; + padding: 15px 15px 15px 60px; + display: block; + line-height: 1.2; + transition: color 0.4s; + font-weight: 400; + color: #484848; +} + +.todo-list li.completed label { + color: #949494; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #949494; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover, +.todo-list li .destroy:focus { + color: #c18585; +} + +.todo-list li .destroy:after { + content: "×"; + display: block; + height: 100%; + line-height: 1.1; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + padding: 10px 15px; + height: 20px; + text-align: center; + font-size: 15px; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ""; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li span { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li span:hover { + border-color: #db7676; +} + +.filters li span.selected { + border-color: #ce4646; +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 19px; + text-decoration: none; + cursor: pointer; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #4d4d4d; + font-size: 11px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio: 0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} + +:focus, +.toggle:focus + label, +.toggle-all:focus + label { + box-shadow: 0 0 2px 2px #cf7d7d; + outline: 0; +} diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/index.html b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/index.html new file mode 100644 index 000000000..c9270857c --- /dev/null +++ b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/index.html @@ -0,0 +1,22 @@ + + + + + + + + TodoMVC: Jaspr + + + + + + + + + + + diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.dart.js b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.dart.js new file mode 100644 index 000000000..0ffea7608 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.dart.js @@ -0,0 +1,15 @@ +(async () => { +const thisScript = document.currentScript; + +function relativeURL(ref) { + const base = thisScript?.src ?? document.baseURI; + return new URL(ref, base).toString(); +} + +let { compileStreaming } = await import("./main.mjs"); + +let app = await compileStreaming(fetch(relativeURL("main.wasm"))); +let module = await app.instantiate({}); +module.invokeMain(); + +})(); diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.mjs b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.mjs new file mode 100644 index 000000000..846eb6f65 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.mjs @@ -0,0 +1,327 @@ +// Compiles a dart2wasm-generated main module from `source` which can then +// instantiatable via the `instantiate` method. +// +// `source` needs to be a `Response` object (or promise thereof) e.g. created +// via the `fetch()` JS API. +export async function compileStreaming(source) { + const builtins = {builtins: ['js-string']}; + return new CompiledApp( + await WebAssembly.compileStreaming(source, builtins), builtins); +} + +// Compiles a dart2wasm-generated wasm modules from `bytes` which is then +// instantiatable via the `instantiate` method. +export async function compile(bytes) { + const builtins = {builtins: ['js-string']}; + return new CompiledApp(await WebAssembly.compile(bytes, builtins), builtins); +} + +// DEPRECATED: Please use `compile` or `compileStreaming` to get a compiled app, +// use `instantiate` method to get an instantiated app and then call +// `invokeMain` to invoke the main function. +export async function instantiate(modulePromise, importObjectPromise) { + var moduleOrCompiledApp = await modulePromise; + if (!(moduleOrCompiledApp instanceof CompiledApp)) { + moduleOrCompiledApp = new CompiledApp(moduleOrCompiledApp); + } + const instantiatedApp = await moduleOrCompiledApp.instantiate(await importObjectPromise); + return instantiatedApp.instantiatedModule; +} + +// DEPRECATED: Please use `compile` or `compileStreaming` to get a compiled app, +// use `instantiate` method to get an instantiated app and then call +// `invokeMain` to invoke the main function. +export const invoke = (moduleInstance, ...args) => { + moduleInstance.exports.$invokeMain(args); +} + +class CompiledApp { + constructor(module, builtins) { + this.module = module; + this.builtins = builtins; + } + + // The second argument is an options object containing: + // `loadDeferredWasm` is a JS function that takes a module name matching a + // wasm file produced by the dart2wasm compiler and returns the bytes to + // load the module. These bytes can be in either a format supported by + // `WebAssembly.compile` or `WebAssembly.compileStreaming`. + // `loadDynamicModule` is a JS function that takes two string names matching, + // in order, a wasm file produced by the dart2wasm compiler during dynamic + // module compilation and a corresponding js file produced by the same + // compilation. It should return a JS Array containing 2 elements. The first + // should be the bytes for the wasm module in a format supported by + // `WebAssembly.compile` or `WebAssembly.compileStreaming`. The second + // should be the result of using the JS 'import' API on the js file path. + async instantiate(additionalImports, {loadDeferredWasm, loadDynamicModule} = {}) { + let dartInstance; + + // Prints to the console + function printToConsole(value) { + if (typeof dartPrint == "function") { + dartPrint(value); + return; + } + if (typeof console == "object" && typeof console.log != "undefined") { + console.log(value); + return; + } + if (typeof print == "function") { + print(value); + return; + } + + throw "Unable to print message: " + value; + } + + // A special symbol attached to functions that wrap Dart functions. + const jsWrappedDartFunctionSymbol = Symbol("JSWrappedDartFunction"); + + function finalizeWrapper(dartFunction, wrapped) { + wrapped.dartFunction = dartFunction; + wrapped[jsWrappedDartFunctionSymbol] = true; + return wrapped; + } + + // Imports + const dart2wasm = { + _4: (o, c) => o instanceof c, + _37: x0 => new Array(x0), + _42: (x0,x1,x2) => { x0[x1] = x2 }, + _45: (x0,x1,x2) => new DataView(x0,x1,x2), + _47: x0 => new Int8Array(x0), + _48: (x0,x1,x2) => new Uint8Array(x0,x1,x2), + _49: x0 => new Uint8Array(x0), + _51: x0 => new Uint8ClampedArray(x0), + _53: x0 => new Int16Array(x0), + _55: x0 => new Uint16Array(x0), + _57: x0 => new Int32Array(x0), + _59: x0 => new Uint32Array(x0), + _61: x0 => new Float32Array(x0), + _63: x0 => new Float64Array(x0), + _78: () => { + let stackString = new Error().stack.toString(); + let frames = stackString.split('\n'); + let drop = 2; + if (frames[0] === 'Error') { + drop += 1; + } + return frames.slice(drop).join('\n'); + }, + _99: s => JSON.stringify(s), + _100: s => printToConsole(s), + _103: Function.prototype.call.bind(String.prototype.toLowerCase), + _109: Function.prototype.call.bind(String.prototype.indexOf), + _112: Object.is, + _129: (o, start, length) => new Uint8Array(o.buffer, o.byteOffset + start, length), + _130: (o, start, length) => new Int8Array(o.buffer, o.byteOffset + start, length), + _131: (o, start, length) => new Uint8ClampedArray(o.buffer, o.byteOffset + start, length), + _132: (o, start, length) => new Uint16Array(o.buffer, o.byteOffset + start, length), + _133: (o, start, length) => new Int16Array(o.buffer, o.byteOffset + start, length), + _134: (o, start, length) => new Uint32Array(o.buffer, o.byteOffset + start, length), + _135: (o, start, length) => new Int32Array(o.buffer, o.byteOffset + start, length), + _138: (o, start, length) => new Float32Array(o.buffer, o.byteOffset + start, length), + _139: (o, start, length) => new Float64Array(o.buffer, o.byteOffset + start, length), + _140: (t, s) => t.set(s), + _142: (o) => new DataView(o.buffer, o.byteOffset, o.byteLength), + _144: o => o.buffer, + _145: o => o.byteOffset, + _146: Function.prototype.call.bind(Object.getOwnPropertyDescriptor(DataView.prototype, 'byteLength').get), + _147: (b, o) => new DataView(b, o), + _148: (b, o, l) => new DataView(b, o, l), + _149: Function.prototype.call.bind(DataView.prototype.getUint8), + _150: Function.prototype.call.bind(DataView.prototype.setUint8), + _151: Function.prototype.call.bind(DataView.prototype.getInt8), + _152: Function.prototype.call.bind(DataView.prototype.setInt8), + _153: Function.prototype.call.bind(DataView.prototype.getUint16), + _154: Function.prototype.call.bind(DataView.prototype.setUint16), + _155: Function.prototype.call.bind(DataView.prototype.getInt16), + _156: Function.prototype.call.bind(DataView.prototype.setInt16), + _157: Function.prototype.call.bind(DataView.prototype.getUint32), + _158: Function.prototype.call.bind(DataView.prototype.setUint32), + _159: Function.prototype.call.bind(DataView.prototype.getInt32), + _160: Function.prototype.call.bind(DataView.prototype.setInt32), + _165: Function.prototype.call.bind(DataView.prototype.getFloat32), + _166: Function.prototype.call.bind(DataView.prototype.setFloat32), + _167: Function.prototype.call.bind(DataView.prototype.getFloat64), + _168: Function.prototype.call.bind(DataView.prototype.setFloat64), + _185: (c) => + queueMicrotask(() => dartInstance.exports.$invokeCallback(c)), + _198: (x0,x1) => x0.createElement(x1), + _200: (x0,x1) => x0.querySelector(x1), + _201: f => finalizeWrapper(f, function(x0) { return dartInstance.exports._201(f,arguments.length,x0) }), + _203: (x0,x1,x2,x3) => x0.addEventListener(x1,x2,x3), + _204: (x0,x1,x2,x3) => x0.removeEventListener(x1,x2,x3), + _205: x0 => x0.preventDefault(), + _212: (x0,x1) => x0.item(x1), + _213: (x0,x1,x2) => x0.createElementNS(x1,x2), + _214: (x0,x1) => x0.item(x1), + _215: (x0,x1,x2) => x0.replaceChild(x1,x2), + _216: (x0,x1) => x0.append(x1), + _217: (x0,x1) => x0.removeAttribute(x1), + _218: x0 => new Text(x0), + _219: (x0,x1) => x0.replaceWith(x1), + _220: (x0,x1) => x0.item(x1), + _221: (x0,x1,x2) => x0.insertBefore(x1,x2), + _222: (x0,x1) => x0.removeChild(x1), + _223: (x0,x1) => x0.hasAttribute(x1), + _224: (x0,x1) => x0.getAttribute(x1), + _225: (x0,x1,x2) => x0.setAttribute(x1,x2), + _226: (x0,x1) => x0.error(x1), + _248: o => o === undefined, + _250: o => typeof o === 'function' && o[jsWrappedDartFunctionSymbol] === true, + _254: (l, r) => l === r, + _255: o => o, + _256: o => o, + _257: o => o, + _258: b => !!b, + _259: o => o.length, + _261: (o, i) => o[i], + _262: f => f.dartFunction, + _269: (o, p) => o[p], + _273: o => String(o), + _275: o => { + if (o === undefined) return 1; + var type = typeof o; + if (type === 'boolean') return 2; + if (type === 'number') return 3; + if (type === 'string') return 4; + if (o instanceof Array) return 5; + if (ArrayBuffer.isView(o)) { + if (o instanceof Int8Array) return 6; + if (o instanceof Uint8Array) return 7; + if (o instanceof Uint8ClampedArray) return 8; + if (o instanceof Int16Array) return 9; + if (o instanceof Uint16Array) return 10; + if (o instanceof Int32Array) return 11; + if (o instanceof Uint32Array) return 12; + if (o instanceof Float32Array) return 13; + if (o instanceof Float64Array) return 14; + if (o instanceof DataView) return 15; + } + if (o instanceof ArrayBuffer) return 16; + return 17; + }, + _290: x0 => new ArrayBuffer(x0), + _305: x0 => x0.random(), + _308: () => globalThis.Math, + _309: Function.prototype.call.bind(Number.prototype.toString), + _310: Function.prototype.call.bind(BigInt.prototype.toString), + _311: Function.prototype.call.bind(Number.prototype.toString), + _1378: x0 => x0.checked, + _1385: x0 => x0.files, + _1428: x0 => x0.type, + _1432: x0 => x0.value, + _1433: (x0,x1) => { x0.value = x1 }, + _1434: x0 => x0.valueAsDate, + _1436: x0 => x0.valueAsNumber, + _1519: x0 => x0.selectedOptions, + _1522: x0 => x0.value, + _1523: (x0,x1) => { x0.value = x1 }, + _1542: x0 => x0.value, + _1581: x0 => x0.value, + _4715: x0 => x0.target, + _4765: x0 => x0.length, + _4767: x0 => x0.length, + _4811: x0 => x0.parentNode, + _4813: x0 => x0.childNodes, + _4816: x0 => x0.previousSibling, + _4817: x0 => x0.nextSibling, + _4820: x0 => x0.textContent, + _4821: (x0,x1) => { x0.textContent = x1 }, + _4825: () => globalThis.document, + _5233: x0 => x0.namespaceURI, + _5236: x0 => x0.tagName, + _5244: x0 => x0.attributes, + _5370: x0 => x0.length, + _5374: x0 => x0.name, + _11638: () => globalThis.console, + _11662: () => globalThis.Element, + _11663: () => globalThis.HTMLInputElement, + _11664: () => globalThis.HTMLAnchorElement, + _11665: () => globalThis.HTMLSelectElement, + _11666: () => globalThis.HTMLTextAreaElement, + _11667: () => globalThis.HTMLOptionElement, + _11668: () => globalThis.Text, + + }; + + const baseImports = { + dart2wasm: dart2wasm, + Math: Math, + Date: Date, + Object: Object, + Array: Array, + Reflect: Reflect, + S: new Proxy({}, { get(_, prop) { return prop; } }), + + }; + + const jsStringPolyfill = { + "charCodeAt": (s, i) => s.charCodeAt(i), + "compare": (s1, s2) => { + if (s1 < s2) return -1; + if (s1 > s2) return 1; + return 0; + }, + "concat": (s1, s2) => s1 + s2, + "equals": (s1, s2) => s1 === s2, + "fromCharCode": (i) => String.fromCharCode(i), + "length": (s) => s.length, + "substring": (s, a, b) => s.substring(a, b), + "fromCharCodeArray": (a, start, end) => { + if (end <= start) return ''; + + const read = dartInstance.exports.$wasmI16ArrayGet; + let result = ''; + let index = start; + const chunkLength = Math.min(end - index, 500); + let array = new Array(chunkLength); + while (index < end) { + const newChunkLength = Math.min(end - index, 500); + for (let i = 0; i < newChunkLength; i++) { + array[i] = read(a, index++); + } + if (newChunkLength < chunkLength) { + array = array.slice(0, newChunkLength); + } + result += String.fromCharCode(...array); + } + return result; + }, + "intoCharCodeArray": (s, a, start) => { + if (s === '') return 0; + + const write = dartInstance.exports.$wasmI16ArraySet; + for (var i = 0; i < s.length; ++i) { + write(a, start++, s.charCodeAt(i)); + } + return s.length; + }, + }; + + + + + dartInstance = await WebAssembly.instantiate(this.module, { + ...baseImports, + ...additionalImports, + + "wasm:js-string": jsStringPolyfill, + }); + + return new InstantiatedApp(this, dartInstance); + } +} + +class InstantiatedApp { + constructor(compiledApp, instantiatedModule) { + this.compiledApp = compiledApp; + this.instantiatedModule = instantiatedModule; + } + + // Call the main function with the given arguments. + invokeMain(...args) { + this.instantiatedModule.exports.$invokeMain(args); + } +} diff --git a/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.wasm b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.wasm new file mode 100644 index 000000000..d20269311 Binary files /dev/null and b/experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/main.wasm differ diff --git a/experimental/dart-jaspr-todomvc/lib/app.dart b/experimental/dart-jaspr-todomvc/lib/app.dart new file mode 100644 index 000000000..d1f2fc715 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/lib/app.dart @@ -0,0 +1,19 @@ +import 'package:jaspr/jaspr.dart'; +import 'components/todomvc.dart'; + +class App extends StatelessComponent { + const App({super.key}); + + @override + Iterable build(BuildContext context) => [ + TodoMVC(), + footer(classes: 'info', [ + p([text('Double-click to edit a todo')]), + p([text('Created by the Dart team')]), + p([ + text('Part of '), + a(href: 'http://todomvc.com', [text('TodoMVC')]) + ]), + ]), + ]; +} diff --git a/experimental/dart-jaspr-todomvc/lib/components/todomvc.dart b/experimental/dart-jaspr-todomvc/lib/components/todomvc.dart new file mode 100644 index 000000000..8b411e857 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/lib/components/todomvc.dart @@ -0,0 +1,188 @@ +import 'package:jaspr/jaspr.dart'; + +@client +class TodoMVC extends StatefulComponent { + @override + State createState() => TodoMVCState(); +} + +enum DisplayState { + all, + active, + completed, +} + +// Todo string, active pair +typedef Todo = ({bool isActive, String todo}); + +class TodoMVCState extends State { + var todos = {}; + var dataIdCount = 0; + var activeCount = 0; + var displayState = DisplayState.all; + + void addTodo(String todo) { + setState(() { + todos[++dataIdCount] = (todo: todo, isActive: true); + activeCount++; + }); + } + + void toggle(int i) { + setState(() { + var (:isActive, :todo) = todos[i]!; + todos[i] = (todo: todo, isActive: !isActive); + if (isActive) { + activeCount--; + } else { + activeCount++; + } + }); + } + + void toggleAll() { + setState(() { + for (var i in todos.keys) { + var (isActive: _, :todo) = todos[i]!; + todos[i] = (todo: todo, isActive: activeCount == 0); + } + activeCount = (activeCount == 0) ? allCount : 0; + }); + } + + void destroy(int i) { + setState(() { + var (:isActive, :todo) = todos.remove(i)!; + if (isActive) { + activeCount--; + } + }); + } + + void clearCompleted() { + setState(() { + todos.removeWhere((dataId, todo) => !todo.isActive); + }); + } + + void setDisplayState(DisplayState state) { + setState(() { + displayState = state; + }); + } + + int get allCount => todos.length; + + int get completedCount => allCount - activeCount; + + @override + Iterable build(BuildContext context) => [ + section(id: 'root', classes: 'todoapp', [ + header(classes: 'header', attributes: { + 'data-testid': 'header' + }, [ + h1([text('todos')]), + div(classes: 'input-container', [NewTodo(addTodo)]), + ]), + main_( + classes: 'main', + styles: + Styles.raw({'display': todos.isEmpty ? 'none;' : 'block;'}), + [ + div(classes: 'toggle-all-container', [ + input( + classes: 'toggle-all', + id: 'toggle-all', + type: InputType.checkbox, + attributes: activeCount > 0 ? null : {'checked': ''}, + onChange: (_) => toggleAll(), + []), + label(classes: 'toggle-all-label', attributes: { + 'for': 'toggle-all' + }, [ + text('Mark all as complete'), + ]), + ]), + ul(classes: 'todo-list', [ + for (var (dataId, (:isActive, :todo)) in todos.keyValues) + if (isActive && displayState != DisplayState.completed || + !isActive && displayState != DisplayState.active) + li(classes: isActive ? '' : 'completed', attributes: { + 'data-id': '$dataId' + }, [ + div(classes: 'view', [ + input( + classes: 'toggle', + key: Key('$dataId-$isActive'), + type: InputType.checkbox, + attributes: isActive ? null : {'checked': ''}, + onChange: (_) => toggle(dataId), + []), + label([text(todo)]), + button( + classes: 'destroy', + onClick: () => destroy(dataId), + []), + ]) + ]), + ]), + ]), + footer( + classes: 'footer', + styles: + Styles.raw({'display': todos.isEmpty ? 'none;' : 'block;'}), + [ + span(classes: 'todo-count', [ + strong([text('$activeCount')]), + text(' item${activeCount == 1 ? '' : 's'} left'), + ]), + ul(classes: 'filters', [ + for (var (name, state) in [ + ('All', DisplayState.all), + ('Active', DisplayState.active), + ('Completed', DisplayState.completed) + ]) + li([ + span( + classes: displayState == state ? 'selected' : '', + events: { + 'click': (_) => setDisplayState(state), + }, + [ + text(name) + ]) + ]), + ]), + button( + classes: 'clear-completed', + styles: Styles.raw( + {'display': completedCount == 0 ? 'none;' : 'block;'}), + onClick: clearCompleted, + [text('Clear completed')]), + ]), + ]), + ]; +} + +class NewTodo extends StatelessComponent { + final void Function(String) handler; + + NewTodo(this.handler); + + @override + Iterable build(BuildContext context) => [ + input( + classes: 'new-todo', + value: '', + onChange: (str) => handler(str as String), + attributes: { + 'placeholder': 'What needs to be done?', + }, + []), + ]; +} + +extension MapExtensions on Map { + Iterable<(K, V)> get keyValues => + entries.map((entry) => (entry.key, entry.value)); +} diff --git a/experimental/dart-jaspr-todomvc/pubspec.lock b/experimental/dart-jaspr-todomvc/pubspec.lock new file mode 100644 index 000000000..955d09748 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/pubspec.lock @@ -0,0 +1,941 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57 + url: "https://pub.dev" + source: hosted + version: "80.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e" + url: "https://pub.dev" + source: hosted + version: "7.3.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: "1d460d14e3c2ae36dc2b32cef847c4479198cf87704f63c3c3c8150ee50c3916" + url: "https://pub.dev" + source: hosted + version: "0.12.0" + ansi_styles: + dependency: transitive + description: + name: ansi_styles + sha256: "9c656cc12b3c27b17dd982b2cc5c0cfdfbdabd7bc8f3ae5e8542d9867b47ce8a" + url: "https://pub.dev" + source: hosted + version: "0.3.2+1" + archive: + dependency: transitive + description: + name: archive + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" + url: "https://pub.dev" + source: hosted + version: "4.0.7" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" + url: "https://pub.dev" + source: hosted + version: "2.13.0" + bazel_worker: + dependency: transitive + description: + name: bazel_worker + sha256: "373a6ef07caa6c674c1cf144a5fe1e0f712c040552031ce669f298e35f7e110a" + url: "https://pub.dev" + source: hosted + version: "1.1.3" + binary_codec: + dependency: transitive + description: + name: binary_codec + sha256: "368144225d749e1e33f2f4628d0c70bffff99b99b1d6c0777b039f8967365b07" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + browser_launcher: + dependency: transitive + description: + name: browser_launcher + sha256: ca2557663d3033845f2ef2b60f94fc249528324fd1affddccb7c63ac0ccd6c67 + url: "https://pub.dev" + source: hosted + version: "1.1.3" + build: + dependency: transitive + description: + name: build + sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_config: + dependency: transitive + description: + name: build_config + sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa" + url: "https://pub.dev" + source: hosted + version: "4.0.4" + build_modules: + dependency: transitive + description: + name: build_modules + sha256: b1fc29a603669b25a5d95cc9610ed649e9f00e6075e5b6b721aa1a095cff13de + url: "https://pub.dev" + source: hosted + version: "5.0.13" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99" + url: "https://pub.dev" + source: hosted + version: "2.4.15" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021" + url: "https://pub.dev" + source: hosted + version: "8.0.0" + build_web_compilers: + dependency: "direct dev" + description: + name: build_web_compilers + sha256: "0713ad9045ae0ee7f97187ae7bd2f42bdec929c22f32caa78e031338d4894bd7" + url: "https://pub.dev" + source: hosted + version: "4.1.4" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4 + url: "https://pub.dev" + source: hosted + version: "8.9.5" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + ci: + dependency: transitive + description: + name: ci + sha256: "145d095ce05cddac4d797a158bc4cf3b6016d1fe63d8c3d2fbd7212590adca13" + url: "https://pub.dev" + source: hosted + version: "0.1.0" + cli_completion: + dependency: transitive + description: + name: cli_completion + sha256: "72e8ccc4545f24efa7bbdf3bff7257dc9d62b072dee77513cc54295575bc9220" + url: "https://pub.dev" + source: hosted + version: "0.5.1" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" + url: "https://pub.dev" + source: hosted + version: "4.10.1" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + custom_lint: + dependency: transitive + description: + name: custom_lint + sha256: "021897cce2b6c783b2521543e362e7fe1a2eaab17bf80514d8de37f99942ed9e" + url: "https://pub.dev" + source: hosted + version: "0.7.3" + custom_lint_builder: + dependency: transitive + description: + name: custom_lint_builder + sha256: e4235b9d8cef59afe621eba086d245205c8a0a6c70cd470be7cb17494d6df32d + url: "https://pub.dev" + source: hosted + version: "0.7.3" + custom_lint_core: + dependency: transitive + description: + name: custom_lint_core + sha256: "6dcee8a017181941c51a110da7e267c1d104dc74bec8862eeb8c85b5c8759a9e" + url: "https://pub.dev" + source: hosted + version: "0.7.1" + custom_lint_visitor: + dependency: transitive + description: + name: custom_lint_visitor + sha256: "36282d85714af494ee2d7da8c8913630aa6694da99f104fb2ed4afcf8fc857d8" + url: "https://pub.dev" + source: hosted + version: "1.0.0+7.3.0" + dap: + dependency: transitive + description: + name: dap + sha256: "42b0b083a09c59a118741769e218fc3738980ab591114f09d1026241d2b9c290" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + dds: + dependency: transitive + description: + name: dds + sha256: c90723eb1f1402429c57f717550ce5af80288d74a27c45ccbe754a0e3e038f95 + url: "https://pub.dev" + source: hosted + version: "4.2.7" + dds_service_extensions: + dependency: transitive + description: + name: dds_service_extensions + sha256: "5a5f0f9af646505f5bb21159c78ae5c275cd8bdb99e1a8e27f2f395c49568743" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + devtools_shared: + dependency: transitive + description: + name: devtools_shared + sha256: "72369878105eccd563547afbad97407a2431b96bd4c04a1d6da75cb068437f50" + url: "https://pub.dev" + source: hosted + version: "10.0.2" + dtd: + dependency: transitive + description: + name: dtd + sha256: "14a0360d898ded87c3d99591fc386b8a6ea5d432927bee709b22130cd25b993a" + url: "https://pub.dev" + source: hosted + version: "2.5.1" + dwds: + dependency: transitive + description: + name: dwds + sha256: "1c192079b0e62ae1be032340a2ed073d678ab3d5ca7ded7954d1aa2d4643df02" + url: "https://pub.dev" + source: hosted + version: "24.3.5" + equatable: + dependency: transitive + description: + name: equatable + sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" + url: "https://pub.dev" + source: hosted + version: "2.0.7" + extension_discovery: + dependency: transitive + description: + name: extension_discovery + sha256: de1fce715ab013cdfb00befc3bdf0914bea5e409c3a567b7f8f144bc061611a7 + url: "https://pub.dev" + source: hosted + version: "2.1.0" + ffi: + dependency: transitive + description: + name: ffi + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + freezed_annotation: + dependency: transitive + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de + url: "https://pub.dev" + source: hosted + version: "2.1.3" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + hotreloader: + dependency: transitive + description: + name: hotreloader + sha256: bc167a1163807b03bada490bfe2df25b0d744df359227880220a5cbd04e5734b + url: "https://pub.dev" + source: hosted + version: "4.3.0" + html: + dependency: transitive + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.dev" + source: hosted + version: "0.15.6" + http: + dependency: transitive + description: + name: http + sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f + url: "https://pub.dev" + source: hosted + version: "1.3.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 + url: "https://pub.dev" + source: hosted + version: "3.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://pub.dev" + source: hosted + version: "1.0.5" + jaspr: + dependency: "direct main" + description: + name: jaspr + sha256: "768484411c5d572ca3612c337e74f6df8f8463c23ad5e8cde290af62650fb470" + url: "https://pub.dev" + source: hosted + version: "0.18.2" + jaspr_builder: + dependency: "direct dev" + description: + name: jaspr_builder + sha256: "2e3724da1fd0402fa1400d9bbdfeb66854ee2920eacfdfc6b2762740bef33899" + url: "https://pub.dev" + source: hosted + version: "0.18.2" + jaspr_cli: + dependency: "direct dev" + description: + name: jaspr_cli + sha256: "6ed17985be557304d200c50a5e718c0d581f35a65d4a6fc7eb26c59ce6a7fec2" + url: "https://pub.dev" + source: hosted + version: "0.18.2" + jaspr_lints: + dependency: "direct dev" + description: + name: jaspr_lints + sha256: "17e73c818c409454ea150e0641928bf1d340c2704016aba5efd223302bee72f7" + url: "https://pub.dev" + source: hosted + version: "0.3.1" + js: + dependency: transitive + description: + name: js + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + url: "https://pub.dev" + source: hosted + version: "0.7.2" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + json_rpc_2: + dependency: transitive + description: + name: json_rpc_2 + sha256: "246b321532f0e8e2ba474b4d757eaa558ae4fdd0688fdbc1e1ca9705f9b8ca0e" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + lints: + dependency: "direct dev" + description: + name: lints + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 + url: "https://pub.dev" + source: hosted + version: "6.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + mason: + dependency: transitive + description: + name: mason + sha256: de5681849fd49bb4f53f703f439b1d9dac64ff472e49b5dfb23ad5d837185780 + url: "https://pub.dev" + source: hosted + version: "0.1.1" + mason_logger: + dependency: transitive + description: + name: mason_logger + sha256: "6d5a989ff41157915cb5162ed6e41196d5e31b070d2f86e1c2edf216996a158c" + url: "https://pub.dev" + source: hosted + version: "0.3.3" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" + source: hosted + version: "0.12.17" + meta: + dependency: transitive + description: + name: meta + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" + source: hosted + version: "1.16.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + mustache_template: + dependency: transitive + description: + name: mustache_template + sha256: a46e26f91445bfb0b60519be280555b06792460b27b19e2b19ad5b9740df5d1c + url: "https://pub.dev" + source: hosted + version: "2.0.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc + url: "https://pub.dev" + source: hosted + version: "2.2.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + posix: + dependency: transitive + description: + name: posix + sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + process: + dependency: transitive + description: + name: process + sha256: "107d8be718f120bbba9dcd1e95e3bd325b1b4a4f07db64154635ba03f2567a0d" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + protobuf: + dependency: transitive + description: + name: protobuf + sha256: fbb0c37d435641d0b84813c1dad41e6fa61ddc880a320bce16b3063ecec35aa6 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + pub_updater: + dependency: transitive + description: + name: pub_updater + sha256: "739a0161d73a6974c0675b864fb0cf5147305f7b077b7f03a58fa7a9ab3e7e7d" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" + source: hosted + version: "0.28.0" + scratch_space: + dependency: transitive + description: + name: scratch_space + sha256: "8510fbff458d733a58fc427057d1ac86303b376d609d6e1bc43f240aad9aa445" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://pub.dev" + source: hosted + version: "1.4.2" + shelf_gzip: + dependency: transitive + description: + name: shelf_gzip + sha256: "4f4b793c0f969f348aece1ab4cc05fceba9fea431c1ce76b1bc0fa369cecfc15" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_proxy: + dependency: transitive + description: + name: shelf_proxy + sha256: a71d2307f4393211930c590c3d2c00630f6c5a7a77edc1ef6436dfd85a6a7ee3 + url: "https://pub.dev" + source: hosted + version: "1.0.4" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 + url: "https://pub.dev" + source: hosted + version: "1.1.3" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" + url: "https://pub.dev" + source: hosted + version: "0.10.13" + source_span: + dependency: transitive + description: + name: source_span + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + url: "https://pub.dev" + source: hosted + version: "1.10.1" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + sse: + dependency: transitive + description: + name: sse + sha256: "4389a01d5bc7ef3e90fbc645f8e7c6d8711268adb1f511e14ae9c71de47ee32b" + url: "https://pub.dev" + source: hosted + version: "4.1.7" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + url: "https://pub.dev" + source: hosted + version: "0.7.4" + timing: + dependency: transitive + description: + name: timing + sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + unified_analytics: + dependency: transitive + description: + name: unified_analytics + sha256: c8abdcad84b55b78f860358aae90077b8f54f98169a75e16d97796a1b3c95590 + url: "https://pub.dev" + source: hosted + version: "8.0.1" + universal_web: + dependency: transitive + description: + name: universal_web + sha256: fd161c6424fd78625097429b0050c2ea967304fb2b8b5ea0c0f51cd41b915053 + url: "https://pub.dev" + source: hosted + version: "1.1.0+2" + uuid: + dependency: transitive + description: + name: uuid + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + url: "https://pub.dev" + source: hosted + version: "4.5.1" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + url: "https://pub.dev" + source: hosted + version: "14.3.1" + vm_service_interface: + dependency: transitive + description: + name: vm_service_interface + sha256: "503c92c26cf9f77d688bf8fca27fa9ec40450adbf02ec1ec5f12828ded508ac0" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + watcher: + dependency: transitive + description: + name: watcher + sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: bfe6f435f6ec49cb6c01da1e275ae4228719e59a6b067048c51e72d9d63bcc4b + url: "https://pub.dev" + source: hosted + version: "1.0.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://pub.dev" + source: hosted + version: "3.0.3" + webdev: + dependency: transitive + description: + name: webdev + sha256: efcb8230c9d40c75118b57e10e59936c40f02f232b27fdfae91a9f00ca470d9d + url: "https://pub.dev" + source: hosted + version: "3.7.1" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + win32: + dependency: transitive + description: + name: win32 + sha256: dc6ecaa00a7c708e5b4d10ee7bec8c270e9276dfcab1783f57e9962d7884305f + url: "https://pub.dev" + source: hosted + version: "5.12.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" + yaml_edit: + dependency: transitive + description: + name: yaml_edit + sha256: fb38626579fb345ad00e674e2af3a5c9b0cc4b9bfb8fd7f7ff322c7c9e62aef5 + url: "https://pub.dev" + source: hosted + version: "2.2.2" +sdks: + dart: ">=3.8.0-0 <3.9.0-z" diff --git a/experimental/dart-jaspr-todomvc/pubspec.yaml b/experimental/dart-jaspr-todomvc/pubspec.yaml new file mode 100644 index 000000000..59ff6b699 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/pubspec.yaml @@ -0,0 +1,20 @@ +name: todomvc +description: A TodoMVC app created using the Jaspr Dart web framework. +version: 0.1.0 + +environment: + sdk: ^3.7.0 + +dependencies: + jaspr: ^0.18.2 + +dev_dependencies: + build_runner: + build_web_compilers: ^4.1.0 + jaspr_builder: + jaspr_lints: + jaspr_cli: + lints: + +jaspr: + mode: client diff --git a/experimental/dart-jaspr-todomvc/web/base.css b/experimental/dart-jaspr-todomvc/web/base.css new file mode 100644 index 000000000..d3938100c --- /dev/null +++ b/experimental/dart-jaspr-todomvc/web/base.css @@ -0,0 +1,141 @@ +hr { + margin: 20px 0; + border: 0; + border-top: 1px dashed #c5c5c5; + border-bottom: 1px dashed #f7f7f7; +} + +.learn a { + font-weight: normal; + text-decoration: none; + color: #b83f45; +} + +.learn a:hover { + text-decoration: underline; + color: #787e7e; +} + +.learn h3, +.learn h4, +.learn h5 { + margin: 10px 0; + font-weight: 500; + line-height: 1.2; + color: #000; +} + +.learn h3 { + font-size: 24px; +} + +.learn h4 { + font-size: 18px; +} + +.learn h5 { + margin-bottom: 0; + font-size: 14px; +} + +.learn ul { + padding: 0; + margin: 0 0 30px 25px; +} + +.learn li { + line-height: 20px; +} + +.learn p { + font-size: 15px; + font-weight: 300; + line-height: 1.3; + margin-top: 0; + margin-bottom: 0; +} + +#issue-count { + display: none; +} + +.quote { + border: none; + margin: 20px 0 60px 0; +} + +.quote p { + font-style: italic; +} + +.quote p:before { + content: "“"; + font-size: 50px; + opacity: 0.15; + position: absolute; + top: -20px; + left: 3px; +} + +.quote p:after { + content: "”"; + font-size: 50px; + opacity: 0.15; + position: absolute; + bottom: -42px; + right: 3px; +} + +.quote footer { + position: absolute; + bottom: -40px; + right: 0; +} + +.quote footer img { + border-radius: 3px; +} + +.quote footer a { + margin-left: 5px; + vertical-align: middle; +} + +.speech-bubble { + position: relative; + padding: 10px; + background: rgba(0, 0, 0, 0.04); + border-radius: 5px; +} + +.speech-bubble:after { + content: ""; + position: absolute; + top: 100%; + right: 30px; + border: 13px solid transparent; + border-top-color: rgba(0, 0, 0, 0.04); +} + +.learn-bar > .learn { + position: absolute; + width: 272px; + top: 8px; + left: -300px; + padding: 10px; + border-radius: 5px; + background-color: rgba(255, 255, 255, 0.6); + transition-property: left; + transition-duration: 500ms; +} + +@media (min-width: 899px) { + .learn-bar { + width: auto; + padding-left: 300px; + } + + .learn-bar > .learn { + left: 8px; + } +} diff --git a/experimental/dart-jaspr-todomvc/web/favicon.ico b/experimental/dart-jaspr-todomvc/web/favicon.ico new file mode 100644 index 000000000..bd829b4fc Binary files /dev/null and b/experimental/dart-jaspr-todomvc/web/favicon.ico differ diff --git a/experimental/dart-jaspr-todomvc/web/index.css b/experimental/dart-jaspr-todomvc/web/index.css new file mode 100644 index 000000000..fb6fb83ef --- /dev/null +++ b/experimental/dart-jaspr-todomvc/web/index.css @@ -0,0 +1,388 @@ +@charset "utf-8"; + +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #111111; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-weight: 300; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 400; + color: rgba(0, 0, 0, 0.4); +} + +.todoapp h1 { + position: absolute; + top: -140px; + width: 100%; + font-size: 80px; + font-weight: 200; + text-align: center; + color: #b83f45; + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.new-todo { + padding: 16px 16px 16px 60px; + height: 65px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +.toggle-all { + width: 1px; + height: 1px; + border: none; /* Mobile Safari */ + opacity: 0; + position: absolute; + right: 100%; + bottom: 100%; +} + +.toggle-all + label { + display: flex; + align-items: center; + justify-content: center; + width: 45px; + height: 65px; + font-size: 0; + position: absolute; + top: -65px; + left: -0; +} + +.toggle-all + label:before { + content: "❯"; + display: inline-block; + font-size: 22px; + color: #949494; + padding: 10px 27px 10px 27px; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.toggle-all:checked + label:before { + color: #484848; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: calc(100% - 43px); + padding: 12px 16px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle { + opacity: 0; +} + +.todo-list li .toggle + label { + /* + Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433 + IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/ + */ + background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23949494%22%20stroke-width%3D%223%22/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: center left; +} + +.todo-list li .toggle:checked + label { + background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%2359A193%22%20stroke-width%3D%223%22%2F%3E%3Cpath%20fill%3D%22%233EA390%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22%2F%3E%3C%2Fsvg%3E"); +} + +.todo-list li label { + word-break: break-all; + padding: 15px 15px 15px 60px; + display: block; + line-height: 1.2; + transition: color 0.4s; + font-weight: 400; + color: #484848; +} + +.todo-list li.completed label { + color: #949494; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #949494; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover, +.todo-list li .destroy:focus { + color: #c18585; +} + +.todo-list li .destroy:after { + content: "×"; + display: block; + height: 100%; + line-height: 1.1; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + padding: 10px 15px; + height: 20px; + text-align: center; + font-size: 15px; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ""; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li span { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li span:hover { + border-color: #db7676; +} + +.filters li span.selected { + border-color: #ce4646; +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 19px; + text-decoration: none; + cursor: pointer; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #4d4d4d; + font-size: 11px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio: 0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} + +:focus, +.toggle:focus + label, +.toggle-all:focus + label { + box-shadow: 0 0 2px 2px #cf7d7d; + outline: 0; +} diff --git a/experimental/dart-jaspr-todomvc/web/index.html b/experimental/dart-jaspr-todomvc/web/index.html new file mode 100644 index 000000000..c9270857c --- /dev/null +++ b/experimental/dart-jaspr-todomvc/web/index.html @@ -0,0 +1,22 @@ + + + + + + + + TodoMVC: Jaspr + + + + + + + + + + + diff --git a/experimental/dart-jaspr-todomvc/web/main.dart b/experimental/dart-jaspr-todomvc/web/main.dart new file mode 100644 index 000000000..e7284b369 --- /dev/null +++ b/experimental/dart-jaspr-todomvc/web/main.dart @@ -0,0 +1,13 @@ +// The entrypoint for the **client** environment. +// +// This file is compiled to javascript and executed in the browser. + +// Client-specific jaspr import. +import 'package:jaspr/browser.dart'; +// Imports the [App] component. +import 'package:todomvc/app.dart'; + +void main() { + // Attaches the [App] component to the of the page. + runApp(App()); +} diff --git a/resources/tests.mjs b/resources/tests.mjs index d7cf6794a..3cfb7e69a 100644 --- a/resources/tests.mjs +++ b/resources/tests.mjs @@ -853,6 +853,66 @@ Suites.push({ ], }); +Suites.push({ + name: "TodoMVC-Jaspr-Dart2JS-O4", + url: "experimental/dart-jaspr-todomvc/dist/out-dart2js-O4/index.html", + tags: ["todomvc", "experimental"], + disabled: true, + async prepare(page) { + (await page.waitForElement(".new-todo")).focus(); + }, + tests: [ + new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + const newTodo = page.querySelector(".new-todo"); + for (let i = 0; i < numberOfItemsToAdd; i++) { + newTodo.setValue(getTodoText("ja", i)); + newTodo.dispatchEvent("change"); + newTodo.enter("keypress"); + } + }), + new BenchmarkTestStep("CompletingAllItems", (page) => { + const checkboxes = page.querySelectorAll(".toggle"); + for (let i = 0; i < numberOfItemsToAdd; i++) + checkboxes[i].click(); + }), + new BenchmarkTestStep("DeletingAllItems", (page) => { + const deleteButtons = page.querySelectorAll(".destroy"); + for (let i = numberOfItemsToAdd - 1; i >= 0; i--) + deleteButtons[i].click(); + }), + ], +}); + +Suites.push({ + name: "TodoMVC-Jaspr-Dart2Wasm-O2", + url: "experimental/dart-jaspr-todomvc/dist/out-dart2wasm-O2/index.html", + tags: ["todomvc", "experimental"], + disabled: true, + async prepare(page) { + (await page.waitForElement(".new-todo")).focus(); + }, + tests: [ + new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + const newTodo = page.querySelector(".new-todo"); + for (let i = 0; i < numberOfItemsToAdd; i++) { + newTodo.setValue(getTodoText("ja", i)); + newTodo.dispatchEvent("change"); + newTodo.enter("keypress"); + } + }), + new BenchmarkTestStep("CompletingAllItems", (page) => { + const checkboxes = page.querySelectorAll(".toggle"); + for (let i = 0; i < numberOfItemsToAdd; i++) + checkboxes[i].click(); + }), + new BenchmarkTestStep("DeletingAllItems", (page) => { + const deleteButtons = page.querySelectorAll(".destroy"); + for (let i = numberOfItemsToAdd - 1; i >= 0; i--) + deleteButtons[i].click(); + }), + ], +}); + Suites.push({ name: "NewsSite-Next", url: "resources/newssite/news-next/dist/index.html",