diff --git a/experimental/todomvc-dart-jaspr/.gitignore b/experimental/todomvc-dart-jaspr/.gitignore new file mode 100644 index 000000000..a8c7d1d6f --- /dev/null +++ b/experimental/todomvc-dart-jaspr/.gitignore @@ -0,0 +1,2 @@ +.dart_tool/ +build/ diff --git a/experimental/todomvc-dart-jaspr/README.md b/experimental/todomvc-dart-jaspr/README.md new file mode 100644 index 000000000..46d478b9d --- /dev/null +++ b/experimental/todomvc-dart-jaspr/README.md @@ -0,0 +1,33 @@ +# TodoMVC: Dart Jaspr + +## Description + +This is a TodoMVC app written in Dart using the Jaspr DOM framework. It can be +compiled to either JavaScript or WebAssembly (with GC extension). + +## Setup + +Install [dart](https://dart.dev/get-dart) and fetch dependencies using `dart pub get`. + +## 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: `dart run jaspr_cli:jaspr build -O4 --extra-js-compiler-option=--no-minify` +- Generate WebAssembly via: `dart run jaspr_cli:jaspr build -O2 --experimental-wasm --extra-wasm-compiler-option=--no-strip-wasm` + +The output will be located inside the `build/jaspr/` directory. + +## Updating the checked-in build artifacts + +To update the checked-in artifacts in the `dist/` directory, run + +``` +./build.sh 2>&1 | tee build.log +``` diff --git a/experimental/todomvc-dart-jaspr/analysis_options.yaml b/experimental/todomvc-dart-jaspr/analysis_options.yaml new file mode 100644 index 000000000..6f2396bc6 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/build.log b/experimental/todomvc-dart-jaspr/build.log new file mode 100644 index 000000000..6aa3a3876 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/build.log @@ -0,0 +1,43 @@ ++ set -e ++ echo 'Current Dart SDK version' +Current Dart SDK version ++ dart --version +Dart SDK version: 3.9.0-333.0.dev (dev) (Fri Jul 11 09:03:09 2025 -0700) on "macos_arm64" ++ echo 'Fetching dependencies' +Fetching dependencies ++ dart pub get +Resolving dependencies... +Downloading packages... + _fe_analyzer_shared 82.0.0 (85.0.0 available) + analyzer 7.4.5 (7.5.7 available) + analyzer_plugin 0.13.1 (0.13.4 available) + dds 4.2.7 (5.0.4 available) + devtools_shared 10.0.2 (12.0.0 available) + dtd 2.5.1 (4.0.0 available) + dwds 24.3.5 (24.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.2 available) + webdev 3.7.1 (3.7.2 available) +Got dependencies! +12 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...... (1ms) ✓ Completed building web assets. (11.8s) +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...... (1ms) ✓ Completed building web assets. (12.4s) +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/todomvc-dart-jaspr/build.sh b/experimental/todomvc-dart-jaspr/build.sh new file mode 100755 index 000000000..d80dc7aa3 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/dist/out-dart2js-O4/base.css b/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/base.css new file mode 100644 index 000000000..d3938100c --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/dist/out-dart2js-O4/favicon.ico b/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/favicon.ico new file mode 100644 index 000000000..bd829b4fc Binary files /dev/null and b/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/favicon.ico differ diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.css b/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.css new file mode 100644 index 000000000..fb6fb83ef --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/dist/out-dart2js-O4/index.html b/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.html new file mode 100644 index 000000000..c9270857c --- /dev/null +++ b/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.html @@ -0,0 +1,22 @@ + + + + + + + + TodoMVC: Jaspr + + + + + + + + + + + diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/main.dart.js b/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/main.dart.js new file mode 100644 index 000000000..c70a0ac50 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/main.dart.js @@ -0,0 +1,4492 @@ +(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.hS(new Array(a),b)}, +hR(a,b){if(a<0)throw A.f(A.bM("Length must be a non-negative integer: "+a,null)) +return A.b(new Array(a),b.h("p<0>"))}, +hS(a,b){var s=A.b(a,b.h("p<0>")) +s.$flags=1 +return s}, +hT(a,b){return J.hu(a,b)}, +as(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.b2.prototype +return J.c_.prototype}if(typeof a=="string")return J.az.prototype +if(a==null)return J.b3.prototype +if(typeof a=="boolean")return J.bZ.prototype +if(Array.isArray(a))return J.p.prototype +if(typeof a!="object"){if(typeof a=="function")return J.a3.prototype +if(typeof a=="symbol")return J.b6.prototype +if(typeof a=="bigint")return J.b4.prototype +return a}if(a instanceof A.h)return a +return J.f2(a)}, +en(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.a3.prototype +if(typeof a=="symbol")return J.b6.prototype +if(typeof a=="bigint")return J.b4.prototype +return a}if(a instanceof A.h)return a +return J.f2(a)}, +bK(a){if(a==null)return a +if(Array.isArray(a))return J.p.prototype +if(typeof a!="object"){if(typeof a=="function")return J.a3.prototype +if(typeof a=="symbol")return J.b6.prototype +if(typeof a=="bigint")return J.b4.prototype +return a}if(a instanceof A.h)return a +return J.f2(a)}, +jx(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.aE.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)}, +hs(a,b){if(typeof b==="number")if(Array.isArray(a)||A.h4(a,a[v.dispatchPropertyName]))if(b>>>0===b&&b>>0===b&&b>>6}, +dp(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").B(d).h("b_<1,2>")) +return new A.aj(a,b,c.h("@<0>").B(d).h("aj<1,2>"))}, +aF:function aF(){}, +bR:function bR(a,b){this.a=a +this.$ti=b}, +bo:function bo(){}, +ae:function ae(a,b){this.a=a +this.$ti=b}, +ai:function ai(a){this.a=a}, +dl:function dl(){}, +c:function c(){}, +Y:function Y(){}, +a5:function a5(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}, +b_:function b_(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}, +bn:function bn(a,b,c){this.a=a +this.b=b +this.$ti=c}, +cv:function cv(a,b){this.a=a +this.b=b}, +b1:function b1(){}, +bi:function bi(a,b){this.a=a +this.$ti=b}, +bH:function bH(){}, +hd(a){var s=v.mangledGlobalNames[a] +if(s!=null)return s +return"minified:"+a}, +h4(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.a2(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.aR(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.aR(a),null)}, +fr(a){var s,r,q +if(a==null||typeof a=="number"||A.eR(a))return J.a2(a) +if(typeof a=="string")return JSON.stringify(a) +if(a instanceof A.af)return a.i(0) +if(a instanceof A.bx)return a.b4(!0) +s=$.hr() +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.aa(s)}, +eZ(a,b){var s,r="index" +if(!A.fT(b))return new A.U(!0,b,r,null) +s=J.eu(a) +if(b<0||b>=s)return A.ex(b,s,a,r) +return new A.bh(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.a_() +b.dartException=a +s=A.jM +if("defineProperty" in Object){Object.defineProperty(b,"message",{get:s}) +b.name=""}else b.toString=s +return b}, +jM(){return J.a2(this.dartException)}, +M(a,b){throw A.z(a,b==null?new Error():b)}, +aV(a,b,c){var s +if(b==null)b=0 +if(c==null)c=0 +s=Error() +A.M(A.iR(a,b,c),s)}, +iR(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.bm("'"+s+"': Cannot "+o+" "+l+k+n)}, +aU(a){throw A.f(A.V(a))}, +a0(a){var s,r,q,p,o,n +a=A.jJ(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.dC(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)}, +dD(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)}, +eA(a,b){var s=b==null,r=s?null:b.method +return new A.c0(a,r,s?null:b.receiver)}, +ac(a){if(a==null)return new A.dh(a) +if(a instanceof A.b0)return A.ab(a,a.a) +if(typeof a!=="object")return a +if("dartException" in a)return A.ab(a,a.dartException) +return A.jo(a)}, +ab(a,b){if(t.Q.b(b))if(b.$thrownJsError==null)b.$thrownJsError=a +return b}, +jo(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.ab(a,A.eA(A.o(s)+" (Error "+q+")",null)) +case 445:case 5007:A.o(s) +return A.ab(a,new A.bf())}}if(a instanceof TypeError){p=$.he() +o=$.hf() +n=$.hg() +m=$.hh() +l=$.hk() +k=$.hl() +j=$.hj() +$.hi() +i=$.hn() +h=$.hm() +g=p.I(s) +if(g!=null)return A.ab(a,A.eA(s,g)) +else{g=o.I(s) +if(g!=null){g.method="call" +return A.ab(a,A.eA(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.ab(a,new A.bf())}return A.ab(a,new A.ct(typeof s=="string"?s:""))}if(a instanceof RangeError){if(typeof s=="string"&&s.indexOf("call stack")!==-1)return new A.bl() +s=function(b){try{return String(b)}catch(f){}return null}(a) +return A.ab(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.bl() +return a}, +aa(a){var s +if(a instanceof A.b0)return a.b +if(a==null)return new A.bA(a) +s=a.$cachedTrace +if(s!=null)return s +s=new A.bA(a) +if(typeof a==="object")a.$cachedTrace=s +return s}, +h8(a){if(a==null)return J.B(a) +if(typeof a=="object")return A.ce(a) +return J.B(a)}, +jw(a,b){var s,r,q,p=a.length +for(s=0;s>>0!==a||a>=c)throw A.f(A.eZ(b,a))}, +aB:function aB(){}, +bd:function bd(){}, +c3:function c3(){}, +aC:function aC(){}, +bb:function bb(){}, +bc:function bc(){}, +c4:function c4(){}, +c5:function c5(){}, +c6:function c6(){}, +c7:function c7(){}, +c8:function c8(){}, +c9:function c9(){}, +ca:function ca(){}, +be:function be(){}, +cb:function cb(){}, +bs:function bs(){}, +bt:function bt(){}, +bu:function bu(){}, +bv:function bv(){}, +eD(a,b){var s=b.c +return s==null?b.c=A.bE(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.e8(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.bE(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.eK(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.jl(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.eL(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.jn(a.x) +o=a.y +return o.length>0?p+("<"+A.fY(o,b)+">"):p}if(m===10)return A.je(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"?"}, +jn(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.e8(a,b,!1) +else if(typeof m=="number"){s=m +r=A.bF(a,5,"#") +q=A.e9(s) +for(p=0;p0)p+="<"+A.bD(c)+">" +s=a.eC.get(p) +if(s!=null)return s +r=new A.O(null,null) +r.w=8 +r.x=b +r.y=c +if(c.length>0)r.c=c[0] +r.as=p +q=A.a9(a,r) +a.eC.set(p,q) +return q}, +eK(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.bD(r)+">") +p=a.eC.get(q) +if(p!=null)return p +o=new A.O(null,null) +o.w=9 +o.x=s +o.y=r +o.as=q +n=A.a9(a,o) +a.eC.set(q,n) +return n}, +fK(a,b,c){var s,r,q="+"+(b+"("+A.bD(c)+")"),p=a.eC.get(q) +if(p!=null)return p +s=new A.O(null,null) +s.w=10 +s.x=b +s.y=c +s.as=q +r=A.a9(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.bD(m) +if(j>0){s=l>0?",":"" +g+=s+"["+A.bD(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.O(null,null) +p.w=11 +p.x=b +p.y=c +p.as=r +o=A.a9(a,p) +a.eC.set(r,o) +return o}, +eL(a,b,c,d){var s,r=b.as+("<"+A.bD(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.e9(s) +for(q=0,p=0;p0){n=A.ar(a,b,r,0) +m=A.aO(a,c,r,0) +return A.eL(a,n,m,c!==m)}}l=new A.O(null,null) +l.w=12 +l.x=b +l.y=c +l.as=d +return A.a9(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.bF(a.u,5,"#")) +break +case 64:k.push(A.bF(a.u,2,"@")) +break +case 126:k.push(A.bF(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.bG(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.bE(r,p,q)) +else{s=A.an(r,a.e,p) +switch(s.w){case 11:b.push(A.eL(r,s,q,a.n)) +break +default:b.push(A.eK(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.cD() +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.bP("Unexpected state under `()`: "+A.o(o)))}}, +ik(a,b){var s=b.pop() +if(0===s){b.push(A.bF(a.u,1,"0&")) +return}if(1===s){b.push(A.bF(a.u,4,"1&")) +return}throw A.f(A.bP("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.bE(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}, +O:function O(a,b){var _=this +_.a=a +_.b=b +_.r=_.f=_.d=_.c=null +_.w=0 +_.as=_.Q=_.z=_.y=_.x=null}, +cD:function cD(){this.c=this.b=this.a=null}, +cL:function cL(a){this.a=a}, +cB:function cB(){}, +bB:function bB(a){this.a=a}, +ia(){var s,r,q +if(self.scheduleImmediate!=null)return A.jq() +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.dG(s),1)).observe(r,{childList:true}) +return new A.dF(s,r,q)}else if(self.setImmediate!=null)return A.jr() +return A.js()}, +ib(a){self.scheduleImmediate(A.cM(new A.dH(a),0))}, +ic(a){self.setImmediate(A.cM(new A.dI(a),0))}, +id(a){A.iq(0,a)}, +iq(a,b){var s=new A.e6() +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}, +iN(a,b){A.iO(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.ac(a),r=A.aa(a),q=b.a +if(b.b)q.ao(new A.P(s,r)) +else q.aP(new A.P(s,r))}, +iO(a,b){var s,r,q=new A.eb(b),p=new A.ec(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.ej(s))}, +fG(a,b,c){return 0}, +ev(a){var s +if(t.Q.b(a)){s=a.gah() +if(s!=null)return s}return B.E}, +eE(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.P(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.aI(b,q) +return}b.a^=2 +A.aN(null,null,b.b,new A.dR(p,b))}, +aI(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.eh(f.a,f.b)}return}s.a=b +o=b.a +for(f=b;o!=null;f=o,o=n){f.a=null +A.aI(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.eh(m.a,m.b) +return}j=$.t +if(j!==k)$.t=k +else j=null +f=f.c +if((f&15)===8)new A.dV(s,g,p).$0() +else if(q){if((f&1)!==0)new A.dU(s,m).$0()}else if((f&2)!==0)new A.dT(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.eE(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}}, +jf(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))}, +jd(){var s,r +for(s=$.aM;s!=null;s=$.aM){$.bJ=null +r=s.b +$.aM=r +if(r==null)$.bI=null +s.a.$0()}}, +jk(){$.eS=!0 +try{A.jd()}finally{$.bJ=null +$.eS=!1 +if($.aM!=null)$.fa().$1(A.h0())}}, +fZ(a){var s=new A.cy(a),r=$.bI +if(r==null){$.aM=$.bI=s +if(!$.eS)$.fa().$1(A.h0())}else $.bI=r.b=s}, +jh(a){var s,r,q,p=$.aM +if(p==null){A.fZ(a) +$.bJ=$.bI +return}s=new A.cy(a) +r=$.bJ +if(r==null){s.b=p +$.aM=$.bJ=s}else{q=r.b +s.b=q +$.bJ=r.b=s +if(q==null)$.bI=s}}, +jK(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))}, +jT(a){A.eW(a,"stream",t.K) +return new A.cI()}, +eh(a,b){A.jh(new A.ei(a,b))}, +fW(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}}, +fX(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}}, +jg(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) +d=d}A.fZ(d)}, +dG:function dG(a){this.a=a}, +dF:function dF(a,b,c){this.a=a +this.b=b +this.c=c}, +dH:function dH(a){this.a=a}, +dI:function dI(a){this.a=a}, +e6:function e6(){}, +e7:function e7(a,b){this.a=a +this.b=b}, +cx:function cx(a,b){this.a=a +this.b=!1 +this.$ti=b}, +eb:function eb(a){this.a=a}, +ec:function ec(a){this.a=a}, +ej:function ej(a){this.a=a}, +aL:function aL(a){var _=this +_.a=a +_.e=_.d=_.c=_.b=null}, +ap:function ap(a,b){this.a=a +this.$ti=b}, +P:function P(a,b){this.a=a +this.b=b}, +aH:function aH(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}, +dO:function dO(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}, +dP:function dP(a,b){this.a=a +this.b=b}, +dV:function dV(a,b,c){this.a=a +this.b=b +this.c=c}, +dW:function dW(a,b){this.a=a +this.b=b}, +dX:function dX(a){this.a=a}, +dU:function dU(a,b){this.a=a +this.b=b}, +dT:function dT(a,b){this.a=a +this.b=b}, +cy:function cy(a){this.a=a +this.b=null}, +cI:function cI(){}, +ea:function ea(){}, +ei:function ei(a,b){this.a=a +this.b=b}, +e2:function e2(){}, +e3:function e3(a,b){this.a=a +this.b=b}, +e4:function e4(a,b,c){this.a=a +this.b=b +this.c=c}, +hJ(a,b){return new A.bp(a.h("@<0>").B(b).h("bp<1,2>"))}, +eF(a,b){var s=a[b] +return s===a?null:s}, +eH(a,b,c){if(c==null)a[b]=a +else a[b]=c}, +eG(){var s=Object.create(null) +A.eH(s,"",s) +delete s[""] +return s}, +R(a,b,c){return A.jw(a,new A.ah(b.h("@<0>").B(c).h("ah<1,2>")))}, +E(a,b){return new A.ah(a.h("@<0>").B(b).h("ah<1,2>"))}, +ax(a){return new A.br(a.h("br<0>"))}, +eI(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +hV(a){return new A.am(a.h("am<0>"))}, +da(a){return new A.am(a.h("am<0>"))}, +eJ(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +ih(a,b,c){var s=new A.aJ(a,b,c.h("aJ<0>")) +s.c=a.e +return s}, +hK(a,b,c){var s=A.hJ(b,c) +a.H(0,new A.d5(s,b,c)) +return s}, +d6(a){var s=J.ad(a) +if(s.j())return s.gk() +return null}, +eC(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.dd(r,s)) +s.a+="}"}finally{$.au.pop()}r=s.a +return r.charCodeAt(0)==0?r:r}, +bp:function bp(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +bq:function bq(a,b){this.a=a +this.$ti=b}, +cE:function cE(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +br:function br(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +a8:function a8(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}, +e_:function e_(a){this.a=a +this.c=this.b=null}, +aJ:function aJ(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(){}, +ba:function ba(){}, +dd:function dd(a,b){this.a=a +this.b=b}, +ak:function ak(){}, +bz:function bz(){}, +hE(a,b){a=A.z(a,new Error()) +a.stack=b.i(0) +throw a}, +eB(a,b,c,d){var s,r=c?J.hR(a,d):J.hQ(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.ad(a);r.j();)s.push(r.gk()) +return s}, +fu(a,b,c){var s=J.ad(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.aa(new Error())}, +d3(a){if(typeof a=="number"||A.eR(a)||a==null)return J.a2(a) +if(typeof a=="string")return JSON.stringify(a) +return A.fr(a)}, +hF(a,b){A.eW(a,"error",t.K) +A.eW(b,"stackTrace",t.l) +A.hE(a,b)}, +bP(a){return new A.bO(a)}, +bM(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.bh(b,c,!0,a,d,"Invalid value")}, +fs(a,b){return a}, +ex(a,b,c,d){return new A.bW(b,!0,a,d,"Index out of range")}, +fy(a){return new A.bm(a)}, +fx(a){return new A.cs(a)}, +i5(a){return new A.cj(a)}, +V(a){return new A.bT(a)}, +hP(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.jc(a,s)}finally{$.au.pop()}r=A.fu(b,s,", ")+c +return r.charCodeAt(0)==0?r:r}, +ey(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}, +jc(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.dp(A.Z(A.Z($.cP(),s),b))}if(B.e===d){s=J.B(a) +b=J.B(b) +c=J.B(c) +return A.dp(A.Z(A.Z(A.Z($.cP(),s),b),c))}s=J.B(a) +b=J.B(b) +c=J.B(c) +d=J.B(d) +d=A.dp(A.Z(A.Z(A.Z(A.Z($.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.W(a,s),new A.de(b,c),s.h("l.E"),b.h("@<0>").B(c).h("+(1,2)"))}, +cq:function cq(a){this.a=a}, +aZ:function aZ(a){this.b=a}, +cr:function cr(a,b){var _=this +_.d=a +_.f=_.e=0 +_.r=b +_.c=null}, +dr:function dr(a,b){this.a=a +this.b=b}, +dB:function dB(a,b){this.a=a +this.b=b}, +dA:function dA(a){this.a=a}, +dy:function dy(a,b){this.a=a +this.b=b}, +dx:function dx(a){this.a=a}, +dw:function dw(){}, +dz:function dz(a,b){this.a=a +this.b=b}, +ds:function ds(a){this.a=a}, +dt:function dt(a,b){this.a=a +this.b=b}, +du:function du(a,b){this.a=a +this.b=b}, +dv:function dv(a,b){this.a=a +this.b=b}, +cc:function cc(a,b){this.c=a +this.a=b}, +df:function df(a){this.a=a}, +de:function de(a,b){this.a=a +this.b=b}, +ie(a,b,c,d){var s,r=A.jp(new A.dM(c),t.m),q=null +if(r==null)r=q +else{if(typeof r=="function")A.M(A.bM("Attempting to rewrap a JS function.",null)) +s=function(e,f){return function(g){return e(f,g,arguments.length)}}(A.iP,r) +s[$.f9()]=r +r=s}if(r!=null)a.addEventListener(b,r,!1) +return new A.cC(a,b,r,!1)}, +jp(a,b){var s=$.t +if(s===B.a)return a +return s.bU(a,b)}, +ew:function ew(a,b){this.a=a +this.$ti=b}, +cC:function cC(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.e=d}, +dM:function dM(a){this.a=a}, +jI(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)}, +iP(a,b,c){if(c>=1)return a.$1(b) +return a.$0()}, +aQ(a,b){return a[b]}, +dg(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$dg(b,c,d){if(c===1){p.push(d) +r=q}while(true)switch(r){case 0:o=0 +case 2:if(!(o").B(b).h("ae<1,2>"))}, +A(a,b){var s +a.$flags&1&&A.aV(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.ey(a,"[","]")}, +gq(a){return new J.bN(a,a.length,A.aq(a).h("bN<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.b2.prototype={ +gt(a){return A.L(t.S)}, +$ik:1, +$ia:1} +J.c_.prototype={ +gt(a){return A.L(t.V)}, +$ik: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}, +$ik:1, +$ie:1} +A.aF.prototype={ +gq(a){return new A.bR(J.ad(this.ga9()),A.u(this).h("bR<1,2>"))}, +gl(a){return J.eu(this.ga9())}, +G(a,b){return A.u(this).y[1].a(J.hv(this.ga9(),b))}, +i(a){return J.a2(this.ga9())}} +A.bR.prototype={ +j(){return this.a.j()}, +gk(){return this.$ti.y[1].a(this.a.gk())}} +A.bo.prototype={ +m(a,b){return this.$ti.y[1].a(J.hs(this.a,b))}, +p(a,b,c){J.ht(this.a,b,this.$ti.c.a(c))}, +$ic:1, +$ij:1} +A.ae.prototype={ +ba(a,b){return new A.ae(this.a,this.$ti.h("@<1>").B(b).h("ae<1,2>"))}, +ga9(){return this.a}} +A.ai.prototype={ +i(a){return"LateInitializationError: "+this.a}} +A.dl.prototype={} +A.c.prototype={} +A.Y.prototype={ +gq(a){var s=this +return new A.a5(s,s.gl(s),A.u(s).h("a5"))}} +A.a5.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.en(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.b_.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.bn.prototype={ +gq(a){return new A.cv(J.ad(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.b1.prototype={} +A.bi.prototype={ +gl(a){return J.eu(this.a)}, +G(a,b){var s=this.a,r=J.en(s) +return r.G(s,r.gl(s)-1-b)}} +A.bH.prototype={} +A.ao.prototype={$r:"+(1,2)",$s:1} +A.aK.prototype={$r:"+isActive,todo(1,2)",$s:2} +A.bU.prototype={ +i(a){return A.eC(this)}} +A.aY.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.ah.prototype={ +gl(a){return this.a}, +ga_(){return new A.X(this,A.u(this).h("X<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}, +D(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))}}, +A(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.X.prototype={ +gl(a){return this.a.a}, +gq(a){var s=this.a +return new A.b9(s,s.r,s.e)}} +A.b9.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.W.prototype={ +gl(a){return this.a.a}, +gq(a){var s=this.a +return new A.c2(s,s.r,s.e,this.$ti.h("c2<1,2>"))}} +A.c2.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.eo.prototype={ +$1(a){return this.a(a)}, +$S:8} +A.ep.prototype={ +$2(a,b){return this.a(a,b)}, +$S:9} +A.eq.prototype={ +$1(a){return this.a(a)}, +$S:10} +A.bx.prototype={ +gt(a){return A.L(this.b_())}, +b_(){return A.jv(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.dJ.prototype={ +J(){var s=this.b +if(s===this)throw A.f(new A.ai("Local '' has not been initialized.")) +return s}} +A.aB.prototype={ +gt(a){return B.a5}, +$ik:1} +A.bd.prototype={} +A.c3.prototype={ +gt(a){return B.a6}, +$ik:1} +A.aC.prototype={ +gl(a){return a.length}, +$iJ:1} +A.bb.prototype={ +m(a,b){A.a1(b,a,a.length) +return a[b]}, +p(a,b,c){a.$flags&2&&A.aV(a) +A.a1(b,a,a.length) +a[b]=c}, +$ic:1, +$ij:1} +A.bc.prototype={ +p(a,b,c){a.$flags&2&&A.aV(a) +A.a1(b,a,a.length) +a[b]=c}, +$ic:1, +$ij:1} +A.c4.prototype={ +gt(a){return B.a7}, +$ik:1} +A.c5.prototype={ +gt(a){return B.a8}, +$ik:1} +A.c6.prototype={ +gt(a){return B.a9}, +m(a,b){A.a1(b,a,a.length) +return a[b]}, +$ik:1} +A.c7.prototype={ +gt(a){return B.aa}, +m(a,b){A.a1(b,a,a.length) +return a[b]}, +$ik:1} +A.c8.prototype={ +gt(a){return B.ab}, +m(a,b){A.a1(b,a,a.length) +return a[b]}, +$ik:1} +A.c9.prototype={ +gt(a){return B.af}, +m(a,b){A.a1(b,a,a.length) +return a[b]}, +$ik:1} +A.ca.prototype={ +gt(a){return B.ag}, +m(a,b){A.a1(b,a,a.length) +return a[b]}, +$ik:1} +A.be.prototype={ +gt(a){return B.ah}, +gl(a){return a.length}, +m(a,b){A.a1(b,a,a.length) +return a[b]}, +$ik:1} +A.cb.prototype={ +gt(a){return B.ai}, +gl(a){return a.length}, +m(a,b){A.a1(b,a,a.length) +return a[b]}, +$ik:1} +A.bs.prototype={} +A.bt.prototype={} +A.bu.prototype={} +A.bv.prototype={} +A.O.prototype={ +h(a){return A.bG(v.typeUniverse,this,a)}, +B(a){return A.fL(v.typeUniverse,this,a)}} +A.cD.prototype={} +A.cL.prototype={ +i(a){return A.K(this.a,null)}, +$ifv:1} +A.cB.prototype={ +i(a){return this.a}} +A.bB.prototype={$ia_:1} +A.dG.prototype={ +$1(a){var s=this.a,r=s.a +s.a=null +r.$0()}, +$S:5} +A.dF.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.dH.prototype={ +$0(){this.a.$0()}, +$S:6} +A.dI.prototype={ +$0(){this.a.$0()}, +$S:6} +A.e6.prototype={ +bx(a,b){if(self.setTimeout!=null)self.setTimeout(A.cM(new A.e7(this,b),0),a) +else throw A.f(A.fy("`setTimeout()` not found."))}} +A.e7.prototype={ +$0(){this.b.$0()}, +$S:0} +A.cx.prototype={} +A.eb.prototype={ +$1(a){return this.a.$2(0,a)}, +$S:2} +A.ec.prototype={ +$2(a,b){this.a.$2(1,new A.b0(a,b))}, +$S:12} +A.ej.prototype={ +$2(a,b){this.a(a,b)}, +$S:13} +A.aL.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.ad(a) +return 2}}} +A.ap.prototype={ +gq(a){return new A.aL(this.a())}} +A.P.prototype={ +i(a){return A.o(this.a)}, +$ir:1, +gah(){return this.b}} +A.aH.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.ac(s))){if((this.c&1)!==0)throw A.f(A.bM("The error handler of Future.then must return a value of the returned future's type","onError")) +throw A.f(A.bM("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.jf(b,r) +s=new A.x(r,c.h("x<0>")) +this.am(new A.aH(s,3,a,b,this.$ti.h("@<1>").B(c).h("aH<1,2>"))) +return s}, +b3(a,b,c){var s=new A.x($.t,c.h("x<0>")) +this.am(new A.aH(s,19,a,b,this.$ti.h("@<1>").B(c).h("aH<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.dO(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.dS(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.aI(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.aI(q,r)}, +ao(a){var s=this.a7() +this.bK(a) +A.aI(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.dQ(this,a))}, +aQ(a){A.eE(a,this,!1) +return}, +aP(a){this.a^=2 +A.aN(null,null,this.b,new A.dP(this,a))}, +$iaw:1} +A.dO.prototype={ +$0(){A.aI(this.a,this.b)}, +$S:0} +A.dS.prototype={ +$0(){A.aI(this.b,this.a.a)}, +$S:0} +A.dR.prototype={ +$0(){A.eE(this.a.a,this.b,!0)}, +$S:0} +A.dQ.prototype={ +$0(){this.a.aU(this.b)}, +$S:0} +A.dP.prototype={ +$0(){this.a.ao(this.b)}, +$S:0} +A.dV.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.ac(p) +r=A.aa(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.ev(q) +n=k.a +n.c=new A.P(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.dW(l,m),new A.dX(l),t.H) +q=k.a +q.c=l +q.b=!1}}, +$S:0} +A.dW.prototype={ +$1(a){this.a.bz(this.b)}, +$S:5} +A.dX.prototype={ +$2(a,b){this.a.ao(new A.P(a,b))}, +$S:14} +A.dU.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.ac(o) +r=A.aa(o) +q=s +p=r +if(p==null)p=A.ev(q) +n=this.a +n.c=new A.P(q,p) +n.b=!0}}, +$S:0} +A.dT.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.ac(o) +q=A.aa(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.ev(p) +m=l.b +m.c=new A.P(p,n) +p=m}p.b=!0}}, +$S:0} +A.cy.prototype={} +A.cI.prototype={} +A.ea.prototype={} +A.ei.prototype={ +$0(){A.hF(this.a,this.b)}, +$S:0} +A.e2.prototype={ +cr(a){var s,r,q +try{if(B.a===$.t){a.$0() +return}A.fW(null,null,this,a)}catch(q){s=A.ac(q) +r=A.aa(q) +A.eh(s,r)}}, +ct(a,b){var s,r,q +try{if(B.a===$.t){a.$1(b) +return}A.fX(null,null,this,a,b)}catch(q){s=A.ac(q) +r=A.aa(q) +A.eh(s,r)}}, +cu(a,b){return this.ct(a,b,t.z)}, +b8(a){return new A.e3(this,a)}, +bU(a,b){return new A.e4(this,a,b)}, +co(a){if($.t===B.a)return a.$0() +return A.fW(null,null,this,a)}, +cn(a){return this.co(a,t.z)}, +cs(a,b){if($.t===B.a)return a.$1(b) +return A.fX(null,null,this,a,b)}, +aF(a,b){var s=t.z +return this.cs(a,b,s,s)}, +cq(a,b,c){if($.t===B.a)return a.$2(b,c) +return A.jg(null,null,this,a,b,c)}, +cp(a,b,c){var s=t.z +return this.cq(a,b,c,s,s,s)}, +ci(a){return a}, +bg(a){var s=t.z +return this.ci(a,s,s,s)}} +A.e3.prototype={ +$0(){return this.a.cr(this.b)}, +$S:0} +A.e4.prototype={ +$1(a){return this.a.cu(this.b,a)}, +$S(){return this.c.h("~(0)")}} +A.bp.prototype={ +gl(a){return this.a}, +ga_(){return new A.bq(this,A.u(this).h("bq<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.eF(s,b) +return r}else if(typeof b=="number"&&(b&1073741823)===b){q=this.c +r=q==null?null:A.eF(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.eG():s,b,c)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +q.aR(r==null?q.c=A.eG():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.eG() +s=p.E(a) +r=o[s] +if(r==null){A.eH(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}}}, +A(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.E(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.cE.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.br.prototype={ +gq(a){return new A.a8(this,this.ap(),A.u(this).h("a8<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.E(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.eI():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +return q.W(r==null?q.c=A.eI():r,b)}else return q.al(b)}, +al(a){var s,r,q=this,p=q.d +if(p==null)p=q.d=A.eI() +s=q.E(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}, +A(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.E(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.eB(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.aJ(s,s.r,A.u(s).h("aJ<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.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.E(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}, +A(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.E(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.e_(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()}, +E(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.ey(a,"[","]")}} +A.ba.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.aL(A.dg(m.childNodes).a());s.j();){r=s.b +o=c.b +if(o===c)A.M(A.Q("")) +o.append(r)}d.b=A.da(t.N)}else{c.b=s +d.b=A.da(t.N) +n=0 +while(!0){s=c.b +if(s===c)A.M(A.Q("")) +if(!(n") +r=A.fn(new A.W(a2,r),new A.cX(),r.h("l.E"),t.N).c9(0,"; ")}A.cR(s,"style",r) +s=a3==null +if(!s&&a3.a!==0)for(r=new A.W(a3,A.u(a3).h("W<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.Q("")) +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.Q("")) +o.value=l.b +continue}j=!1 +if(k){k=c.b +if(k===c)A.M(A.Q("")) +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.Q("")) +o.value=l.b +continue}k=c.b +if(k===c)A.M(A.Q("")) +A.cR(k,o,l.b)}r=d.J() +o=["id","class","style"] +s=s?e:new A.X(a3,A.u(a3).h("X<1>")) +if(s!=null)B.b.D(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.Q("")) +k.removeAttribute(o)}if(a4!=null&&a4.a!==0){s=f.c +if(s==null)h=e +else{r=A.u(s).h("X<1>") +h=A.hV(r.h("l.E")) +h.D(0,new A.X(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.al}, +aG(){var s=this +s.gn() +s.z=s.e=s.ay=null +s.w=B.am}, +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,q=null +r.cx=a +s=a==null?q:a.gN() +if(s==null){s=r.cx +if(s==null)s=q +else{s=s.ch +s=s==null?q:s.gN()}}r.cy=s +s=r.a +if(J.q(s==null?q:s.cx,r)){s=r.a +s=s==null?q:s.gN() +s=!J.q(s,r.gN())}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_())}}, +gN(){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.a8(p,p.ap(),s.h("a8<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.cF.prototype={ +b6(a){a.K(new A.dY(this)) +a.aG()}, +bO(){var s,r,q=this.a,p=A.db(q,A.u(q).c) +B.b.ag(p,A.f1()) +q.F(0) +for(q=A.aq(p).h("bi<1>"),s=new A.bi(p,q),s=new A.a5(s,s.gl(0),q.h("a5")),q=q.h("Y.E");s.j();){r=s.d +this.b6(r==null?q.a(r):r)}}} +A.dY.prototype={ +$1(a){this.a.b6(a)}, +$S:3} +A.c1.prototype={} +A.dc.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.a6.prototype={ +S(){return A.i0(this)}} +A.aD.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.ad(q==null?[]:q) +s=this.dy +for(;q.j();){r=q.gk() +if(!s.aB(0,r))a.$1(r)}}} +A.b7.prototype={ +a0(a,b){this.a3(a,b)}, +v(){this.a1() +this.ai()}, +V(a){return!1}, +U(){this.as=!1}, +K(a){}} +A.di.prototype={} +A.bg.prototype={ +v(){var s,r,q=this +if(q.d$==null){s=q.ay.d$ +s.toString +r=new A.ag(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.b8.prototype={ +v(){var s,r,q=this +if(q.d$==null){s=q.ay.d$ +s.toString +r=new A.ag(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.S.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.gN()==null))break +r=r.CW}q=o?null:r.gN() +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}}, +gN(){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={ +O(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.bL.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.E(m,m) +l.p(0,"href","http://todomvc.com") +m=A.E(m,t.v) +s=t.z +m.D(0,A.f0().$2$1$onClick(r,s,s)) +return A.b([new A.cq(r),A.h2(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.aZ.prototype={ +a6(){return"DisplayState."+this.b}} +A.cr.prototype={ +bR(a){this.O(new A.dr(this,a))}, +cv(a){this.O(new A.dB(this,a))}, +cw(){this.O(new A.dA(this))}, +c1(a){this.O(new A.dy(this,a))}, +bX(){this.O(new A.dx(this))}, +bn(a){this.O(new A.dz(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.R(["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.R(["display",a4.a===0?c:b],a0,a0),a6=e.f>0?d:A.R(["checked",""],a0,a0) +a6=A.f4(A.b([],a2),a6,a,a,d,new A.ds(e),B.f,d) +s=A.R(["for","toggle-all"],a0,a0) +s=A.f_(A.b([a6,A.h5(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.R(["data-id",j],a0,a0) +h=k?d:A.R(["checked",""],a0,a0) +a6.push(A.h6(A.b([A.f_(A.b([A.f4(A.b([],a2),h,"toggle",d,new A.cu(j+"-"+k,q),new A.dt(o,e),B.f,d),A.h5(A.b([new A.A(l.b,d)],a2),d,d),A.h1(A.b([],a2),"destroy",new A.du(o,e),d)],a2),"view")],a2),i,n))}}a6=A.b([s,A.hc(a6,"todo-list")],a2) +s=A.R(["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.hb(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.R(["click",new A.dv(n,e)],a0,o) +r.push(A.h6(A.b([A.hb(A.b([new A.A(j.a,d)],a2),i,n)],a2),d,d))}r=A.hc(r,"filters") +a0=A.R(["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.bw(a5),d,d,d,a6,d),A.h2(A.b([q,r,A.h1(A.b([new A.A("Clear completed",d)],a2),"clear-completed",e.gbW(),new A.bw(a0))],a2),"footer",new A.bw(s))],a2),d)],a2)}} +A.dr.prototype={ +$0(){var s=this.a +s.d.p(0,++s.e,new A.aK(!0,this.b));++s.f}, +$S:0} +A.dB.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.aK(!o,p.b)) +r=s.f +if(o)s.f=r-1 +else s.f=r+1}, +$S:0} +A.dA.prototype={ +$0(){var s,r,q,p,o +for(s=this.a,r=s.d,q=new A.b9(r,r.r,r.e);q.j();){p=q.d +o=r.m(0,p).b +r.p(0,p,new A.aK(s.f===0,o))}s.f=s.f===0?r.a:0}, +$S:0} +A.dy.prototype={ +$0(){var s=this.a +if(s.d.A(0,this.b).a)--s.f}, +$S:0} +A.dx.prototype={ +$0(){this.a.d.ck(0,new A.dw())}, +$S:0} +A.dw.prototype={ +$2(a,b){return!b.a}, +$S:24} +A.dz.prototype={ +$0(){this.a.r=this.b}, +$S:0} +A.ds.prototype={ +$1(a){return this.a.cw()}, +$S:2} +A.dt.prototype={ +$1(a){return this.b.cv(this.a.a)}, +$S:2} +A.du.prototype={ +$0(){return this.b.c1(this.a.a)}, +$S:0} +A.dv.prototype={ +$1(a){return this.b.bn(this.a.a)}, +$S:1} +A.cc.prototype={ +ab(a){var s,r=t.N +r=A.R(["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.df(this),null,"")],s)}} +A.df.prototype={ +$1(a){return this.a.c.$1(A.fO(a))}, +$S:2} +A.de.prototype={ +$1(a){return new A.ao(a.a,a.b)}, +$S(){return this.a.h("@<0>").B(this.b).h("+(1,2)(F<1,2>)")}} +A.ew.prototype={} +A.cC.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.dM.prototype={ +$1(a){return this.a.$1(a)}, +$S:1};(function aliases(){var s=J.a4.prototype +s.bu=s.i +s=A.ag.prototype +s.bp=s.az +s=A.aX.prototype +s.aK=s.v +s.aL=s.U +s=A.bS.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.aD.prototype +s.bv=s.v +s=A.b7.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,"j0","hT",25) +r(A,"jq","ib",4) +r(A,"jr","ic",4) +r(A,"js","id",4) +q(A,"h0","jk",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","hD",27) +r(A,"em","ig",3) +o(A.bQ.prototype,"gce","cf",0) +o(A.cF.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.ez,J.bX,A.bj,J.bN,A.l,A.bR,A.r,A.dl,A.a5,A.aA,A.cv,A.b1,A.bx,A.bU,A.dC,A.dh,A.b0,A.bA,A.af,A.ba,A.d9,A.b9,A.c2,A.dJ,A.O,A.cD,A.cL,A.e6,A.cx,A.aL,A.P,A.aH,A.x,A.cy,A.cI,A.ea,A.cE,A.ak,A.a8,A.e_,A.aJ,A.m,A.dL,A.bl,A.dN,A.F,A.D,A.cJ,A.cn,A.cw,A.di,A.av,A.ch,A.cA,A.dE,A.bC,A.cK,A.co,A.bQ,A.d,A.bS,A.C,A.cF,A.c1,A.S,A.ci,A.ew,A.cC]) +p(J.bX,[J.bZ,J.b3,J.b5,J.b4,J.b6,J.ay,J.az]) +p(J.b5,[J.a4,J.p,A.aB,A.bd]) +p(J.a4,[J.cd,J.aE,J.a3]) +q(J.bY,A.bj) +q(J.d7,J.p) +p(J.ay,[J.b2,J.c_]) +p(A.l,[A.aF,A.c,A.aj,A.bn,A.ap]) +q(A.bH,A.aF) +q(A.bo,A.bH) +q(A.ae,A.bo) +p(A.r,[A.ai,A.a_,A.c0,A.ct,A.cg,A.cB,A.bO,A.U,A.bm,A.cs,A.cj,A.bT]) +p(A.c,[A.Y,A.X,A.W,A.bq]) +q(A.b_,A.aj) +q(A.bi,A.Y) +q(A.cG,A.bx) +p(A.cG,[A.ao,A.aK]) +q(A.aY,A.bU) +q(A.bf,A.a_) +p(A.af,[A.cU,A.cV,A.dq,A.eo,A.eq,A.dG,A.dF,A.eb,A.dW,A.e4,A.cX,A.cZ,A.d4,A.el,A.ef,A.ed,A.d2,A.d0,A.d_,A.dY,A.ds,A.dt,A.dv,A.df,A.de,A.dM]) +p(A.dq,[A.dm,A.aW]) +p(A.ba,[A.ah,A.bp]) +p(A.cV,[A.d8,A.ep,A.ec,A.ej,A.dX,A.d5,A.dd,A.cW,A.cY,A.eg,A.dw]) +p(A.bd,[A.c3,A.aC]) +p(A.aC,[A.bs,A.bu]) +q(A.bt,A.bs) +q(A.bb,A.bt) +q(A.bv,A.bu) +q(A.bc,A.bv) +p(A.bb,[A.c4,A.c5]) +p(A.bc,[A.c6,A.c7,A.c8,A.c9,A.ca,A.be,A.cb]) +q(A.bB,A.cB) +p(A.cU,[A.dH,A.dI,A.e7,A.dO,A.dS,A.dR,A.dQ,A.dP,A.dV,A.dU,A.dT,A.ei,A.e3,A.ee,A.dk,A.cT,A.d1,A.dr,A.dB,A.dA,A.dy,A.dx,A.dz,A.du]) +q(A.e2,A.ea) +q(A.bz,A.ak) +p(A.bz,[A.br,A.am]) +p(A.U,[A.bh,A.bW]) +q(A.cQ,A.cw) +q(A.cz,A.cQ) +q(A.cS,A.cz) +q(A.ag,A.di) +q(A.dj,A.ag) +p(A.dL,[A.n,A.bk,A.aG,A.aZ]) +p(A.bC,[A.dK,A.e1]) +q(A.dn,A.cK) +p(A.dn,[A.e5,A.bw]) +p(A.d,[A.aX,A.aD,A.b7]) +p(A.C,[A.a6,A.A,A.ck,A.al]) +p(A.a6,[A.cH,A.w]) +q(A.bg,A.aD) +p(A.bg,[A.by,A.bV]) +q(A.b8,A.b7) +q(A.cp,A.b8) +q(A.dc,A.c1) +q(A.cu,A.dc) +p(A.aX,[A.cl,A.cm]) +p(A.al,[A.bL,A.cc]) +q(A.cq,A.ck) +q(A.cr,A.ci) +s(A.bH,A.m) +s(A.bs,A.m) +s(A.bt,A.b1) +s(A.bu,A.m) +s(A.bv,A.b1) +s(A.cz,A.bS) +s(A.cw,A.ch) +s(A.cK,A.co) +r(A.bg,A.S) +r(A.b8,A.S)})() +var v={G:typeof self!="undefined"?self:globalThis,typeUniverse:{eC:new Map(),tR:{},eT:{},tPV:{},sEA:[]},mangledGlobalNames:{a:"int",v:"double",h7:"num",e:"String",T:"bool",D:"Null",j:"List",h:"Object",fm:"Map",i:"JSObject"},mangledNames:{},types:["~()","~(i)","~(@)","~(d)","~(~())","D(@)","D()","~(e)","@(@)","@(@,e)","@(e)","D(~())","D(@,a7)","~(a,@)","D(h,a7)","~(@,@)","~(h?,h?)","~(e,av)","e(F)","~(e,~(i))","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.aK&&a.b(c.a)&&b.b(c.b)}} +A.ix(v.typeUniverse,JSON.parse('{"cd":"a4","aE":"a4","a3":"a4","jR":"aB","bZ":{"T":[],"k":[]},"b3":{"k":[]},"b5":{"i":[]},"a4":{"i":[]},"p":{"j":["1"],"c":["1"],"i":[]},"bY":{"bj":[]},"d7":{"p":["1"],"j":["1"],"c":["1"],"i":[]},"ay":{"v":[]},"b2":{"v":[],"a":[],"k":[]},"c_":{"v":[],"k":[]},"az":{"e":[],"k":[]},"aF":{"l":["2"]},"bo":{"m":["2"],"j":["2"],"aF":["1","2"],"c":["2"],"l":["2"]},"ae":{"bo":["1","2"],"m":["2"],"j":["2"],"aF":["1","2"],"c":["2"],"l":["2"],"m.E":"2","l.E":"2"},"ai":{"r":[]},"c":{"l":["1"]},"Y":{"c":["1"],"l":["1"]},"aj":{"l":["2"],"l.E":"2"},"b_":{"aj":["1","2"],"c":["2"],"l":["2"],"l.E":"2"},"bn":{"l":["1"],"l.E":"1"},"bi":{"Y":["1"],"c":["1"],"l":["1"],"l.E":"1","Y.E":"1"},"aY":{"bU":["1","2"]},"bf":{"a_":[],"r":[]},"c0":{"r":[]},"ct":{"r":[]},"bA":{"a7":[]},"cg":{"r":[]},"ah":{"ba":["1","2"]},"X":{"c":["1"],"l":["1"],"l.E":"1"},"W":{"c":["F<1,2>"],"l":["F<1,2>"],"l.E":"F<1,2>"},"aB":{"i":[],"k":[]},"bd":{"i":[]},"c3":{"i":[],"k":[]},"aC":{"J":["1"],"i":[]},"bb":{"m":["v"],"j":["v"],"J":["v"],"c":["v"],"i":[]},"bc":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[]},"c4":{"m":["v"],"j":["v"],"J":["v"],"c":["v"],"i":[],"k":[],"m.E":"v"},"c5":{"m":["v"],"j":["v"],"J":["v"],"c":["v"],"i":[],"k":[],"m.E":"v"},"c6":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"c7":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"c8":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"c9":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"ca":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"be":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"cb":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"cL":{"fv":[]},"cB":{"r":[]},"bB":{"a_":[],"r":[]},"ap":{"l":["1"],"l.E":"1"},"P":{"r":[]},"x":{"aw":["1"]},"bp":{"ba":["1","2"]},"bq":{"c":["1"],"l":["1"],"l.E":"1"},"br":{"ak":["1"],"c":["1"]},"am":{"ak":["1"],"c":["1"]},"ak":{"c":["1"]},"bz":{"ak":["1"],"c":["1"]},"j":{"c":["1"]},"bO":{"r":[]},"a_":{"r":[]},"U":{"r":[]},"bh":{"r":[]},"bW":{"r":[]},"bm":{"r":[]},"cs":{"r":[]},"cj":{"r":[]},"bT":{"r":[]},"bl":{"r":[]},"cJ":{"a7":[]},"iA":{"w":[],"a6":[],"C":[]},"hL":{"d":[]},"aX":{"d":[]},"cH":{"a6":[],"C":[]},"by":{"S":[],"d":[]},"w":{"a6":[],"C":[]},"bV":{"S":[],"d":[]},"A":{"C":[]},"cp":{"S":[],"d":[]},"a6":{"C":[]},"aD":{"d":[]},"b7":{"d":[]},"bg":{"S":[],"d":[]},"b8":{"S":[],"d":[]},"ck":{"C":[]},"cl":{"d":[]},"al":{"C":[]},"cm":{"d":[]},"bL":{"al":[],"C":[]},"cq":{"C":[]},"cc":{"al":[],"C":[]},"hO":{"j":["a"],"c":["a"]},"i9":{"j":["a"],"c":["a"]},"i8":{"j":["a"],"c":["a"]},"hM":{"j":["a"],"c":["a"]},"i6":{"j":["a"],"c":["a"]},"hN":{"j":["a"],"c":["a"]},"i7":{"j":["a"],"c":["a"]},"hH":{"j":["v"],"c":["v"]},"hI":{"j":["v"],"c":["v"]}}')) +A.iw(v.typeUniverse,JSON.parse('{"cv":1,"b1":1,"bH":2,"b9":1,"aC":1,"aL":1,"cI":1,"bz":1,"co":1,"ci":1,"cC":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("jQ"),r:s("hL"),i:s("p"),k:s("p"),O:s("p"),f:s("p"),s:s("p"),b:s("p<@>"),u:s("p<~()>"),T:s("b3"),m:s("i"),g:s("a3"),p:s("J<@>"),B:s("c1"),j:s("j<@>"),W:s("F"),P:s("D"),K:s("h"),E:s("a6"),L:s("jS"),t:s("+()"),_:s("+isActive,todo(T,e)"),X:s("S"),l:s("a7"),q:s("al"),N:s("e"),x:s("A"),A:s("k"),G:s("fv"),c:s("a_"),o:s("aE"),Y:s("cu"),a:s("bn"),aY:s("x<@>"),D:s("x<~>"),F:s("ap"),y:s("T"),V:s("v"),z:s("@"),w:s("@(h)"),C:s("@(h,a7)"),S:s("a"),d:s("d?"),bc:s("aw?"),aQ:s("i?"),R:s("h?"),aD:s("e?"),cG:s("T?"),I:s("v?"),a3:s("a?"),ae:s("h7?"),n:s("h7"),H:s("~"),aI:s("~()"),v:s("~(i)")}})();(function constants(){var s=hunkHelpers.makeConstList +B.V=J.bX.prototype +B.b=J.p.prototype +B.u=J.b2.prototype +B.h=J.ay.prototype +B.W=J.a3.prototype +B.X=J.b5.prototype +B.v=J.cd.prototype +B.i=J.aE.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.dl() +B.a=new A.e2() +B.E=new A.cJ() +B.l=new A.aZ("all") +B.m=new A.aZ("active") +B.n=new A.aZ("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=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.aY(B.a_,["http://www.w3.org/2000/svg","http://www.w3.org/1998/Math/MathML"],A.cO("aY")) +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.bk("idle") +B.a3=new A.bk("midFrameCallback") +B.a4=new A.bk("postFrameCallbacks") +B.a5=A.H("jN") +B.a6=A.H("jO") +B.a7=A.H("hH") +B.a8=A.H("hI") +B.a9=A.H("hM") +B.aa=A.H("hN") +B.ab=A.H("hO") +B.ac=A.H("i") +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.aj=new A.cA("red") +B.ak=new A.cA("yellow") +B.c=new A.aG("initial") +B.d=new A.aG("active") +B.al=new A.aG("inactive") +B.am=new A.aG("defunct")})();(function staticFields(){$.dZ=null +$.au=A.b([],t.f) +$.fq=null +$.fj=null +$.fi=null +$.h3=null +$.h_=null +$.ha=null +$.ek=null +$.er=null +$.f3=null +$.e0=A.b([],A.cO("p?>")) +$.aM=null +$.bI=null +$.bJ=null +$.eS=!1 +$.t=B.a +$.I=1})();(function lazyInitializers(){var s=hunkHelpers.lazyFinal +s($,"jP","f9",()=>A.jy("_$dart_dartClosure")) +s($,"kc","hr",()=>A.b([new J.bY()],A.cO("p"))) +s($,"jU","he",()=>A.a0(A.dD({ +toString:function(){return"$receiver$"}}))) +s($,"jV","hf",()=>A.a0(A.dD({$method$:null, +toString:function(){return"$receiver$"}}))) +s($,"jW","hg",()=>A.a0(A.dD(null))) +s($,"jX","hh",()=>A.a0(function(){var $argumentsExpr$="$arguments$" +try{null.$method$($argumentsExpr$)}catch(r){return r.message}}())) +s($,"k_","hk",()=>A.a0(A.dD(void 0))) +s($,"k0","hl",()=>A.a0(function(){var $argumentsExpr$="$arguments$" +try{(void 0).$method$($argumentsExpr$)}catch(r){return r.message}}())) +s($,"jZ","hj",()=>A.a0(A.fw(null))) +s($,"jY","hi",()=>A.a0(function(){try{null.$method$}catch(r){return r.message}}())) +s($,"k2","hn",()=>A.a0(A.fw(void 0))) +s($,"k1","hm",()=>A.a0(function(){try{(void 0).$method$}catch(r){return r.message}}())) +s($,"k3","fa",()=>A.ia()) +s($,"kb","cP",()=>A.h8(B.ad)) +s($,"k4","et",()=>A.aQ(A.aT(),"Element")) +s($,"k6","fb",()=>A.aQ(A.aT(),"HTMLInputElement")) +s($,"k5","ho",()=>A.aQ(A.aT(),"HTMLAnchorElement")) +s($,"k8","fc",()=>A.aQ(A.aT(),"HTMLSelectElement")) +s($,"k9","hq",()=>A.aQ(A.aT(),"HTMLTextAreaElement")) +s($,"k7","hp",()=>A.aQ(A.aT(),"HTMLOptionElement")) +s($,"ka","fd",()=>A.aQ(A.aT(),"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.aB,SharedArrayBuffer:A.aB,ArrayBufferView:A.bd,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.be,CanvasPixelArray:A.be,Uint8Array:A.cb}) +hunkHelpers.setOrUpdateLeafTags({ArrayBuffer:true,SharedArrayBuffer: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.aC.$nativeSuperclassTag="ArrayBufferView" +A.bs.$nativeSuperclassTag="ArrayBufferView" +A.bt.$nativeSuperclassTag="ArrayBufferView" +A.bb.$nativeSuperclassTag="ArrayBufferView" +A.bu.$nativeSuperclassTag="ArrayBufferView" +A.bv.$nativeSuperclassTag="ArrayBufferView" +A.bc.$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/todomvc-dart-jaspr/dist/out-dart2wasm-O2/favicon.ico b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/favicon.ico new file mode 100644 index 000000000..bd829b4fc Binary files /dev/null and b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/favicon.ico differ diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.css b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.css new file mode 100644 index 000000000..fb6fb83ef --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html new file mode 100644 index 000000000..c9270857c --- /dev/null +++ b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html @@ -0,0 +1,22 @@ + + + + + + + + TodoMVC: Jaspr + + + + + + + + + + + diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.dart.js b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.dart.js new file mode 100644 index 000000000..0ffea7608 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.mjs b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.mjs new file mode 100644 index 000000000..1708b69d7 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.mjs @@ -0,0 +1,343 @@ +// 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), + _110: (s, p, i) => s.lastIndexOf(p, i), + _112: Object.is, + _132: o => o instanceof Uint8Array, + _133: (o, start, length) => new Uint8Array(o.buffer, o.byteOffset + start, length), + _134: o => o instanceof Int8Array, + _135: (o, start, length) => new Int8Array(o.buffer, o.byteOffset + start, length), + _136: o => o instanceof Uint8ClampedArray, + _137: (o, start, length) => new Uint8ClampedArray(o.buffer, o.byteOffset + start, length), + _138: o => o instanceof Uint16Array, + _139: (o, start, length) => new Uint16Array(o.buffer, o.byteOffset + start, length), + _140: o => o instanceof Int16Array, + _141: (o, start, length) => new Int16Array(o.buffer, o.byteOffset + start, length), + _142: o => o instanceof Uint32Array, + _143: (o, start, length) => new Uint32Array(o.buffer, o.byteOffset + start, length), + _144: o => o instanceof Int32Array, + _145: (o, start, length) => new Int32Array(o.buffer, o.byteOffset + start, length), + _148: o => o instanceof Float32Array, + _149: (o, start, length) => new Float32Array(o.buffer, o.byteOffset + start, length), + _150: o => o instanceof Float64Array, + _151: (o, start, length) => new Float64Array(o.buffer, o.byteOffset + start, length), + _152: (t, s) => t.set(s), + _154: (o) => new DataView(o.buffer, o.byteOffset, o.byteLength), + _156: o => o.buffer, + _157: o => o.byteOffset, + _158: Function.prototype.call.bind(Object.getOwnPropertyDescriptor(DataView.prototype, 'byteLength').get), + _159: (b, o) => new DataView(b, o), + _160: (b, o, l) => new DataView(b, o, l), + _161: Function.prototype.call.bind(DataView.prototype.getUint8), + _162: Function.prototype.call.bind(DataView.prototype.setUint8), + _163: Function.prototype.call.bind(DataView.prototype.getInt8), + _164: Function.prototype.call.bind(DataView.prototype.setInt8), + _165: Function.prototype.call.bind(DataView.prototype.getUint16), + _166: Function.prototype.call.bind(DataView.prototype.setUint16), + _167: Function.prototype.call.bind(DataView.prototype.getInt16), + _168: Function.prototype.call.bind(DataView.prototype.setInt16), + _169: Function.prototype.call.bind(DataView.prototype.getUint32), + _170: Function.prototype.call.bind(DataView.prototype.setUint32), + _171: Function.prototype.call.bind(DataView.prototype.getInt32), + _172: Function.prototype.call.bind(DataView.prototype.setInt32), + _177: Function.prototype.call.bind(DataView.prototype.getFloat32), + _178: Function.prototype.call.bind(DataView.prototype.setFloat32), + _179: Function.prototype.call.bind(DataView.prototype.getFloat64), + _180: Function.prototype.call.bind(DataView.prototype.setFloat64), + _197: (c) => + queueMicrotask(() => dartInstance.exports.$invokeCallback(c)), + _210: (x0,x1) => x0.createElement(x1), + _212: (x0,x1) => x0.querySelector(x1), + _213: f => finalizeWrapper(f, function(x0) { return dartInstance.exports._213(f,arguments.length,x0) }), + _215: (x0,x1,x2,x3) => x0.addEventListener(x1,x2,x3), + _216: (x0,x1,x2,x3) => x0.removeEventListener(x1,x2,x3), + _217: x0 => x0.preventDefault(), + _224: (x0,x1) => x0.item(x1), + _225: (x0,x1,x2) => x0.createElementNS(x1,x2), + _226: (x0,x1) => x0.item(x1), + _227: (x0,x1,x2) => x0.replaceChild(x1,x2), + _228: (x0,x1) => x0.append(x1), + _229: (x0,x1) => x0.removeAttribute(x1), + _230: x0 => new Text(x0), + _231: (x0,x1) => x0.replaceWith(x1), + _232: (x0,x1) => x0.item(x1), + _233: (x0,x1,x2) => x0.insertBefore(x1,x2), + _234: (x0,x1) => x0.removeChild(x1), + _235: (x0,x1) => x0.hasAttribute(x1), + _236: (x0,x1) => x0.getAttribute(x1), + _237: (x0,x1,x2) => x0.setAttribute(x1,x2), + _238: (x0,x1) => x0.error(x1), + _260: o => o === undefined, + _262: o => typeof o === 'function' && o[jsWrappedDartFunctionSymbol] === true, + _266: (l, r) => l === r, + _267: o => o, + _268: o => o, + _269: o => o, + _270: b => !!b, + _271: o => o.length, + _273: (o, i) => o[i], + _274: f => f.dartFunction, + _281: (o, p) => o[p], + _285: o => String(o), + _287: 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; + // Feature check for `SharedArrayBuffer` before doing a type-check. + if (globalThis.SharedArrayBuffer !== undefined && + o instanceof SharedArrayBuffer) { + return 17; + } + return 18; + }, + _302: x0 => new ArrayBuffer(x0), + _317: x0 => x0.random(), + _320: () => globalThis.Math, + _321: Function.prototype.call.bind(Number.prototype.toString), + _322: Function.prototype.call.bind(BigInt.prototype.toString), + _323: Function.prototype.call.bind(Number.prototype.toString), + _1390: x0 => x0.checked, + _1397: x0 => x0.files, + _1440: x0 => x0.type, + _1444: x0 => x0.value, + _1445: (x0,x1) => { x0.value = x1 }, + _1446: x0 => x0.valueAsDate, + _1448: x0 => x0.valueAsNumber, + _1531: x0 => x0.selectedOptions, + _1534: x0 => x0.value, + _1535: (x0,x1) => { x0.value = x1 }, + _1554: x0 => x0.value, + _1593: x0 => x0.value, + _4727: x0 => x0.target, + _4777: x0 => x0.length, + _4779: x0 => x0.length, + _4823: x0 => x0.parentNode, + _4825: x0 => x0.childNodes, + _4828: x0 => x0.previousSibling, + _4829: x0 => x0.nextSibling, + _4832: x0 => x0.textContent, + _4833: (x0,x1) => { x0.textContent = x1 }, + _4837: () => globalThis.document, + _5245: x0 => x0.namespaceURI, + _5248: x0 => x0.tagName, + _5256: x0 => x0.attributes, + _5382: x0 => x0.length, + _5386: x0 => x0.name, + _11650: () => globalThis.console, + _11674: () => globalThis.Element, + _11675: () => globalThis.HTMLInputElement, + _11676: () => globalThis.HTMLAnchorElement, + _11677: () => globalThis.HTMLSelectElement, + _11678: () => globalThis.HTMLTextAreaElement, + _11679: () => globalThis.HTMLOptionElement, + _11680: () => 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; + }, + "test": (s) => typeof s == "string", + }; + + + + + 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/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.wasm b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.wasm new file mode 100644 index 000000000..6cb2d6495 Binary files /dev/null and b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.wasm differ diff --git a/experimental/todomvc-dart-jaspr/lib/app.dart b/experimental/todomvc-dart-jaspr/lib/app.dart new file mode 100644 index 000000000..d1f2fc715 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/lib/components/todomvc.dart b/experimental/todomvc-dart-jaspr/lib/components/todomvc.dart new file mode 100644 index 000000000..8b411e857 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/pubspec.lock b/experimental/todomvc-dart-jaspr/pubspec.lock new file mode 100644 index 000000000..286f877a3 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f + url: "https://pub.dev" + source: hosted + version: "82.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0" + url: "https://pub.dev" + source: hosted + version: "7.4.5" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: ee188b6df6c85f1441497c7171c84f1392affadc0384f71089cb10a3bc508cef + url: "https://pub.dev" + source: hosted + version: "0.13.1" + 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: "51dc711996cbf609b90cbe5b335bbce83143875a9d58e4b5c6d3c4f684d3dda7" + url: "https://pub.dev" + source: hosted + version: "2.5.4" + 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: b4f8d74125ab53869e63d488b8df2a036a7136d3b6d1759d3247e4d8d2e8f379 + url: "https://pub.dev" + source: hosted + version: "5.0.15" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: ee4257b3f20c0c90e72ed2b57ad637f694ccba48839a821e87db762548c22a62 + url: "https://pub.dev" + source: hosted + version: "2.5.4" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "382a4d649addbfb7ba71a3631df0ec6a45d5ab9b098638144faf27f02778eb53" + url: "https://pub.dev" + source: hosted + version: "2.5.4" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "85fbbb1036d576d966332a3f5ce83f2ce66a40bea1a94ad2d5fc29a19a0d3792" + url: "https://pub.dev" + source: hosted + version: "9.1.2" + build_web_compilers: + dependency: "direct dev" + description: + name: build_web_compilers + sha256: "7c82235c82657efa0e6e877ef813757c7fd9e0e0406106f32ab30a874c939c63" + url: "https://pub.dev" + source: hosted + version: "4.2.0" + 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: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27" + url: "https://pub.dev" + source: hosted + version: "8.10.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + 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: "409c485fd14f544af1da965d5a0d160ee57cd58b63eeaa7280a4f28cf5bda7f1" + url: "https://pub.dev" + source: hosted + version: "0.7.5" + custom_lint_builder: + dependency: transitive + description: + name: custom_lint_builder + sha256: "107e0a43606138015777590ee8ce32f26ba7415c25b722ff0908a6f5d7a4c228" + url: "https://pub.dev" + source: hosted + version: "0.7.5" + custom_lint_core: + dependency: transitive + description: + name: custom_lint_core + sha256: "31110af3dde9d29fb10828ca33f1dce24d2798477b167675543ce3d208dee8be" + url: "https://pub.dev" + source: hosted + version: "0.7.5" + custom_lint_visitor: + dependency: transitive + description: + name: custom_lint_visitor + sha256: cba5b6d7a6217312472bf4468cdf68c949488aed7ffb0eab792cd0b6c435054d + url: "https://pub.dev" + source: hosted + version: "1.0.0+7.4.5" + 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: "5b236382b47ee411741447c1f1e111459c941ea1b3f2b540dde54c210a3662af" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + 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: c514114300ab30a95903fed1fdcf2949d057a0ea961168ec890a2b415b3ec52a + url: "https://pub.dev" + source: hosted + version: "2.0.2" + 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: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + 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: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" + url: "https://pub.dev" + source: hosted + version: "1.4.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: dc5cf37e7284062779f1235f317bb54071a92a3dafdf681d94c52edac86f3bff + url: "https://pub.dev" + source: hosted + version: "0.19.1" + jaspr_builder: + dependency: "direct dev" + description: + name: jaspr_builder + sha256: "4bf42193868ea9850072f589f16c91c5f44e5e8d0b29bc703562857eae5a6a99" + url: "https://pub.dev" + source: hosted + version: "0.19.1" + jaspr_cli: + dependency: "direct dev" + description: + name: jaspr_cli + sha256: "7c11200fc172529c2228e7647194013d6e05feae94ccacff4a2869def764c9ad" + url: "https://pub.dev" + source: hosted + version: "0.19.1" + jaspr_lints: + dependency: "direct dev" + description: + name: jaspr_lints + sha256: "70f6b5cbb3a3cdd42f06bd617d4e26eaa31626bf1717ccf65cf97a3e41e9c28d" + url: "https://pub.dev" + source: hosted + version: "0.4.0" + 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: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + url: "https://pub.dev" + source: hosted + version: "1.17.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: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" + url: "https://pub.dev" + source: hosted + version: "6.0.3" + process: + dependency: transitive + description: + name: process + sha256: "44b4226c0afd4bc3b7c7e67d44c4801abd97103cf0c84609e2654b664ca2798c" + url: "https://pub.dev" + source: hosted + version: "5.0.4" + protobuf: + dependency: transitive + description: + name: protobuf + sha256: "579fe5557eae58e3adca2e999e38f02441d8aa908703854a9e0a0f47fa857731" + url: "https://pub.dev" + source: hosted + version: "4.1.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: "816989dd0a1f92cd5f0db012ed330035571034956dc3593fba66aaa6ee6a7e43" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + 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: fcc97470240bb37377f298e2bd816f09fd7216c07928641c0560719f50603643 + url: "https://pub.dev" + source: hosted + version: "4.1.8" + 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: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + url: "https://pub.dev" + source: hosted + version: "0.7.6" + 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: "8d1429a4b27320a9c4fc854287d18c8fde1549bf622165c5837202a9f370b53d" + url: "https://pub.dev" + source: hosted + version: "8.0.5" + universal_web: + dependency: transitive + description: + name: universal_web + sha256: "045d5d5277f7dd3b6838b08098f5ec4cfb15b790c5d3deb8e79f642ae1af3ad2" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + 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: "0b7fd4a0bbc4b92641dbf20adfd7e3fd1398fe17102d94b674234563e110088a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + 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: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03" + url: "https://pub.dev" + source: hosted + version: "5.14.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 <3.10.0-z" diff --git a/experimental/todomvc-dart-jaspr/pubspec.yaml b/experimental/todomvc-dart-jaspr/pubspec.yaml new file mode 100644 index 000000000..b74848b91 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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.19.1 + +dev_dependencies: + build_runner: + build_web_compilers: ^4.1.0 + jaspr_builder: + jaspr_lints: + jaspr_cli: + lints: + +jaspr: + mode: client diff --git a/experimental/todomvc-dart-jaspr/web/base.css b/experimental/todomvc-dart-jaspr/web/base.css new file mode 100644 index 000000000..d3938100c --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/web/favicon.ico b/experimental/todomvc-dart-jaspr/web/favicon.ico new file mode 100644 index 000000000..bd829b4fc Binary files /dev/null and b/experimental/todomvc-dart-jaspr/web/favicon.ico differ diff --git a/experimental/todomvc-dart-jaspr/web/index.css b/experimental/todomvc-dart-jaspr/web/index.css new file mode 100644 index 000000000..fb6fb83ef --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/web/index.html b/experimental/todomvc-dart-jaspr/web/index.html new file mode 100644 index 000000000..c9270857c --- /dev/null +++ b/experimental/todomvc-dart-jaspr/web/index.html @@ -0,0 +1,22 @@ + + + + + + + + TodoMVC: Jaspr + + + + + + + + + + + diff --git a/experimental/todomvc-dart-jaspr/web/main.dart b/experimental/todomvc-dart-jaspr/web/main.dart new file mode 100644 index 000000000..e7284b369 --- /dev/null +++ b/experimental/todomvc-dart-jaspr/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 0a3878423..c9fb4da1b 100644 --- a/resources/tests.mjs +++ b/resources/tests.mjs @@ -836,6 +836,66 @@ Suites.push({ ], }); +Suites.push({ + name: "TodoMVC-Jaspr-Dart2JS-O4", + url: "experimental/todomvc-dart-jaspr/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/todomvc-dart-jaspr/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",