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