From f72b2598a047e5b07837781a51ebd30cc41f6cd2 Mon Sep 17 00:00:00 2001 From: Lewis Hemens Date: Wed, 29 May 2024 21:31:58 +0100 Subject: [PATCH 01/10] Add beta deploy --- .github/workflows/deploy-beta.yaml | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/deploy-beta.yaml diff --git a/.github/workflows/deploy-beta.yaml b/.github/workflows/deploy-beta.yaml new file mode 100644 index 0000000..a88883d --- /dev/null +++ b/.github/workflows/deploy-beta.yaml @@ -0,0 +1,33 @@ +name: Deploy + +on: + push: + branches: + - beta + +jobs: + deploy: + name: Build and deploy + runs-on: ubuntu-latest + environment: deploy + + steps: + # Checks out a copy of your repository. + - name: Checkout code + uses: actions/checkout@v2 + + # Builds code using bazelisk and copies the site folder out of the bazel symlinked dir. + - name: Build the site + uses: "docker://mattinsler/bazelisk:latest" + with: + args: bash -c "bazel build site/... && cp -r --dereference bazel-bin/site ./deploy" + + # Deploy the site to Cloudflare. + - name: Publish + uses: cloudflare/pages-action@1 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: 4aa13cc00192d0927df8194260cb2ce8 + projectName: asciiflow-beta + directory: ./deploy + gitHubToken: ${{ secrets.GITHUB_TOKEN }} From 8c5efc8dbd801e1650de7e0c18d591eba48e8cbb Mon Sep 17 00:00:00 2001 From: Lewis Hemens Date: Wed, 29 May 2024 22:09:58 +0100 Subject: [PATCH 02/10] Remove specific beta deploy --- .github/workflows/deploy-beta.yaml | 33 ------------------------------ .github/workflows/deploy.yaml | 1 + 2 files changed, 1 insertion(+), 33 deletions(-) delete mode 100644 .github/workflows/deploy-beta.yaml diff --git a/.github/workflows/deploy-beta.yaml b/.github/workflows/deploy-beta.yaml deleted file mode 100644 index a88883d..0000000 --- a/.github/workflows/deploy-beta.yaml +++ /dev/null @@ -1,33 +0,0 @@ -name: Deploy - -on: - push: - branches: - - beta - -jobs: - deploy: - name: Build and deploy - runs-on: ubuntu-latest - environment: deploy - - steps: - # Checks out a copy of your repository. - - name: Checkout code - uses: actions/checkout@v2 - - # Builds code using bazelisk and copies the site folder out of the bazel symlinked dir. - - name: Build the site - uses: "docker://mattinsler/bazelisk:latest" - with: - args: bash -c "bazel build site/... && cp -r --dereference bazel-bin/site ./deploy" - - # Deploy the site to Cloudflare. - - name: Publish - uses: cloudflare/pages-action@1 - with: - apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} - accountId: 4aa13cc00192d0927df8194260cb2ce8 - projectName: asciiflow-beta - directory: ./deploy - gitHubToken: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 7820716..12fa287 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -4,6 +4,7 @@ on: push: branches: - main + - beta jobs: deploy: From 376772263b1ba6e26bc2a30843bc874ea115380a Mon Sep 17 00:00:00 2001 From: Lewis Hemens Date: Wed, 29 May 2024 22:15:24 +0100 Subject: [PATCH 03/10] Test redeploy beta From 8ac0365e7ced158208b2c4a7874edb71523f4274 Mon Sep 17 00:00:00 2001 From: Lewis Hemens Date: Wed, 29 May 2024 23:07:15 +0100 Subject: [PATCH 04/10] Precision drawing (#299) * Big revamp of box/line drawing logic. Rather than just drawing a single special character and trying to work it out, actually draw the correct values on lines, and move snapping to draw time, not render time. * Revamp line moving semantics to match new drawing logic * Further improvements to line moving * Various cleanups * Remove drawing stringifier dependency on the store --- MODULE.bazel.lock | 7635 ++++++++++++++++++++-------------------- client/characters.ts | 279 ++ client/common.ts | 67 +- client/constants.ts | 10 +- client/direction.ts | 30 + client/draw/box.ts | 29 +- client/draw/line.ts | 59 +- client/draw/move.ts | 362 +- client/draw/select.ts | 11 +- client/draw/utils.ts | 85 +- client/drawer.tsx | 42 +- client/export.tsx | 2 +- client/layer.ts | 90 +- client/render_layer.ts | 60 +- client/snap.ts | 78 + client/store/canvas.ts | 19 +- client/store/index.ts | 6 +- client/vector.ts | 12 +- client/view.tsx | 5 +- 19 files changed, 4702 insertions(+), 4179 deletions(-) create mode 100644 client/direction.ts create mode 100644 client/snap.ts diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index a260da7..b23e73e 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1924,7 +1924,7 @@ "general": { "bzlTransitiveDigest": "1AgLnqJKLQ3oVnMjCFAnZu9xkVBlccfPNkYRAnC0R10=", "accumulatedFileDigests": { - "@@//:pnpm-lock.yaml": "0bb0e652a9b5a4420950c8e55acd87cd1786b1027a41305b7ccdc0b113705316" + "@@//:pnpm-lock.yaml": "2a671c3fe710ca9773224102fe1f414af7e8ac030f73569cb12ecee281e8d5ae" }, "envVariables": {}, "generatedRepoSpecs": { @@ -3035,7 +3035,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -3113,7 +3113,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -3243,7 +3243,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -3270,7 +3270,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -3618,7 +3618,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -3819,7 +3819,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -6201,7 +6201,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -6269,7 +6269,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -6372,7 +6372,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -6399,7 +6399,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -6714,7 +6714,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -6906,7 +6906,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -10264,31 +10264,6 @@ "generate_bzl_library_targets": false } }, - "npm__webpack-dev-middleware__7.0.0__webpack_5.90.3": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__webpack-dev-middleware__7.0.0__webpack_5.90.3", - "package": "webpack-dev-middleware", - "version": "7.0.0_webpack_5.90.3", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-tZ5hqsWwww/8DislmrzXE3x+4f+v10H1z57mA2dWFrILb4i3xX+dPhTkcdR0DLyQztrhF2AUmO5nN085UYjd/Q==", - "url": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.0.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, "npm__at_types_eslint-scope__3.7.7": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -14493,31 +14468,6 @@ "generate_bzl_library_targets": false } }, - "npm__cookie__0.5.0": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__cookie__0.5.0", - "package": "cookie", - "version": "0.5.0", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "url": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, "npm__at_types_http-proxy__1.17.14": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -15169,7 +15119,7 @@ "link_packages": {}, "deps": { "eventemitter3": "4.0.7", - "follow-redirects": "1.15.5", + "follow-redirects": "1.15.6", "requires-port": "1.0.0" }, "transitive_closure": { @@ -15177,7 +15127,7 @@ "4.0.7" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "http-proxy": [ "1.18.1" @@ -16441,6 +16391,32 @@ ] } }, + "npm__follow-redirects__1.15.6__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__follow-redirects__1.15.6__links", + "package": "follow-redirects", + "version": "1.15.6", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "follow-redirects": [ + "1.15.6" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__ansi-colors__4.1.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -18818,31 +18794,6 @@ ] } }, - "npm__express__4.18.2": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__express__4.18.2", - "package": "express", - "version": "4.18.2", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "url": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, "npm__ansi-regex__6.0.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -19970,32 +19921,6 @@ ] } }, - "npm__cookie__0.5.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__cookie__0.5.0__links", - "package": "cookie", - "version": "0.5.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "cookie": [ - "0.5.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__use-sync-external-store__1.2.0__react_16.14.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -23005,67 +22930,6 @@ ] } }, - "npm__raw-body__2.5.1__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__raw-body__2.5.1__links", - "package": "raw-body", - "version": "2.5.1", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "transitive_closure": { - "bytes": [ - "3.1.2" - ], - "depd": [ - "2.0.0" - ], - "http-errors": [ - "2.0.0" - ], - "iconv-lite": [ - "0.4.24" - ], - "inherits": [ - "2.0.4" - ], - "raw-body": [ - "2.5.1" - ], - "safer-buffer": [ - "2.1.2" - ], - "setprototypeof": [ - "1.2.0" - ], - "statuses": [ - "2.0.1" - ], - "toidentifier": [ - "1.0.1" - ], - "unpipe": [ - "1.0.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__at_babel_plugin-transform-template-literals__7.23.3__at_babel_core_7.23.9": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -23319,6 +23183,32 @@ ] } }, + "npm__cookie__0.6.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__cookie__0.6.0__links", + "package": "cookie", + "version": "0.6.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "cookie": [ + "0.6.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__color-name__1.1.4__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -25621,18 +25511,18 @@ ] } }, - "npm__body-parser__1.20.1": { + "npm__body-parser__1.20.2": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__body-parser__1.20.1", + "name": "aspect_rules_js~1.35.0~npm~npm__body-parser__1.20.2", "package": "body-parser", - "version": "1.20.1", + "version": "1.20.2", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "url": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "url": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", "commit": "", "patch_args": [], "patches": [], @@ -25710,322 +25600,1295 @@ ] } }, - "npm__unicode-property-aliases-ecmascript__2.1.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__unicode-property-aliases-ecmascript__2.1.0__links", - "package": "unicode-property-aliases-ecmascript", - "version": "2.1.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "unicode-property-aliases-ecmascript": [ - "2.1.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__at_babel_generator__7.23.6": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_generator__7.23.6", - "package": "@babel/generator", - "version": "7.23.6", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "url": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__jsesc__0.5.0": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__jsesc__0.5.0", - "package": "jsesc", - "version": "0.5.0", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "url": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__pathval__1.1.1": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__pathval__1.1.1", - "package": "pathval", - "version": "1.1.1", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "url": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__at_jridgewell_resolve-uri__3.1.2__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_jridgewell_resolve-uri__3.1.2__links", - "package": "@jridgewell/resolve-uri", - "version": "3.1.2", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "@jridgewell/resolve-uri": [ - "3.1.2" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__growl__1.10.5": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__growl__1.10.5", - "package": "growl", - "version": "1.10.5", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "url": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__is-extglob__2.1.1": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__is-extglob__2.1.1", - "package": "is-extglob", - "version": "2.1.1", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "url": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__postcss-selector-parser__6.0.15": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__postcss-selector-parser__6.0.15", - "package": "postcss-selector-parser", - "version": "6.0.15", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", - "url": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__encodeurl__1.0.2__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__encodeurl__1.0.2__links", - "package": "encodeurl", - "version": "1.0.2", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "encodeurl": [ - "1.0.2" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__update-browserslist-db__1.0.13__browserslist_4.23.0__links": { + "npm__webpack-dev-middleware__7.1.1__webpack_5.90.3__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__update-browserslist-db__1.0.13__browserslist_4.23.0__links", - "package": "update-browserslist-db", - "version": "1.0.13_browserslist_4.23.0", + "name": "aspect_rules_js~1.35.0~npm~npm__webpack-dev-middleware__7.1.1__webpack_5.90.3__links", + "package": "webpack-dev-middleware", + "version": "7.1.1_webpack_5.90.3", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "browserslist": "4.23.0", - "escalade": "3.1.2", - "picocolors": "1.0.0" + "colorette": "2.0.20", + "memfs": "4.7.7", + "mime-types": "2.1.35", + "on-finished": "2.4.1", + "range-parser": "1.2.1", + "schema-utils": "4.2.0", + "webpack": "5.90.3_webpack-cli_5.1.4" }, "transitive_closure": { - "browserslist": [ - "4.23.0" + "@discoveryjs/json-ext": [ + "0.5.7" ], - "caniuse-lite": [ - "1.0.30001589" + "@isaacs/cliui": [ + "8.0.2" ], - "electron-to-chromium": [ - "1.4.681" + "@jridgewell/gen-mapping": [ + "0.3.3" ], - "escalade": [ + "@jridgewell/resolve-uri": [ "3.1.2" ], - "node-releases": [ - "2.0.14" + "@jridgewell/set-array": [ + "1.1.2" ], - "picocolors": [ - "1.0.0" + "@jridgewell/source-map": [ + "0.3.5" ], - "update-browserslist-db": [ - "1.0.13_browserslist_4.23.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__terser-webpack-plugin__5.3.10__webpack_5.90.3": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__terser-webpack-plugin__5.3.10__webpack_5.90.3", - "package": "terser-webpack-plugin", - "version": "5.3.10_webpack_5.90.3", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "url": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__minimist__1.2.8": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__minimist__1.2.8", - "package": "minimist", - "version": "1.2.8", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "url": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "commit": "", - "patch_args": [], - "patches": [], + "@jridgewell/sourcemap-codec": [ + "1.4.15" + ], + "@jridgewell/trace-mapping": [ + "0.3.22" + ], + "@leichtgewicht/ip-codec": [ + "2.0.4" + ], + "@pkgjs/parseargs": [ + "0.11.0" + ], + "@types/body-parser": [ + "1.19.5" + ], + "@types/bonjour": [ + "3.5.13" + ], + "@types/connect": [ + "3.4.38" + ], + "@types/connect-history-api-fallback": [ + "1.5.4" + ], + "@types/eslint": [ + "8.56.3" + ], + "@types/eslint-scope": [ + "3.7.7" + ], + "@types/estree": [ + "1.0.5" + ], + "@types/express": [ + "4.17.21" + ], + "@types/express-serve-static-core": [ + "4.17.43" + ], + "@types/http-errors": [ + "2.0.4" + ], + "@types/http-proxy": [ + "1.17.14" + ], + "@types/json-schema": [ + "7.0.15" + ], + "@types/mime": [ + "1.3.5", + "3.0.4" + ], + "@types/node": [ + "20.11.20" + ], + "@types/node-forge": [ + "1.3.11" + ], + "@types/qs": [ + "6.9.11" + ], + "@types/range-parser": [ + "1.2.7" + ], + "@types/retry": [ + "0.12.2" + ], + "@types/send": [ + "0.17.4" + ], + "@types/serve-index": [ + "1.9.4" + ], + "@types/serve-static": [ + "1.15.5" + ], + "@types/sockjs": [ + "0.3.36" + ], + "@types/ws": [ + "8.5.10" + ], + "@webassemblyjs/ast": [ + "1.11.6" + ], + "@webassemblyjs/floating-point-hex-parser": [ + "1.11.6" + ], + "@webassemblyjs/helper-api-error": [ + "1.11.6" + ], + "@webassemblyjs/helper-buffer": [ + "1.11.6" + ], + "@webassemblyjs/helper-numbers": [ + "1.11.6" + ], + "@webassemblyjs/helper-wasm-bytecode": [ + "1.11.6" + ], + "@webassemblyjs/helper-wasm-section": [ + "1.11.6" + ], + "@webassemblyjs/ieee754": [ + "1.11.6" + ], + "@webassemblyjs/leb128": [ + "1.11.6" + ], + "@webassemblyjs/utf8": [ + "1.11.6" + ], + "@webassemblyjs/wasm-edit": [ + "1.11.6" + ], + "@webassemblyjs/wasm-gen": [ + "1.11.6" + ], + "@webassemblyjs/wasm-opt": [ + "1.11.6" + ], + "@webassemblyjs/wasm-parser": [ + "1.11.6" + ], + "@webassemblyjs/wast-printer": [ + "1.11.6" + ], + "@webpack-cli/configtest": [ + "2.1.1_-359619668" + ], + "@webpack-cli/info": [ + "2.0.2_-359619668" + ], + "@webpack-cli/serve": [ + "2.0.5_-1025266409" + ], + "@xtuc/ieee754": [ + "1.2.0" + ], + "@xtuc/long": [ + "4.2.2" + ], + "accepts": [ + "1.3.8" + ], + "acorn": [ + "8.11.3" + ], + "acorn-import-assertions": [ + "1.9.0_acorn_8.11.3" + ], + "ajv": [ + "6.12.6", + "8.12.0" + ], + "ajv-formats": [ + "2.1.1_ajv_8.12.0" + ], + "ajv-keywords": [ + "3.5.2_ajv_6.12.6", + "5.1.0_ajv_8.12.0" + ], + "ansi-html-community": [ + "0.0.8" + ], + "ansi-regex": [ + "5.0.1", + "6.0.1" + ], + "ansi-styles": [ + "4.3.0", + "6.2.1" + ], + "anymatch": [ + "3.1.3" + ], + "array-flatten": [ + "1.1.1" + ], + "balanced-match": [ + "1.0.2" + ], + "batch": [ + "0.6.1" + ], + "binary-extensions": [ + "2.2.0" + ], + "body-parser": [ + "1.20.2" + ], + "bonjour-service": [ + "1.2.1" + ], + "brace-expansion": [ + "2.0.1" + ], + "braces": [ + "3.0.2" + ], + "browserslist": [ + "4.23.0" + ], + "buffer-from": [ + "1.1.2" + ], + "bundle-name": [ + "4.1.0" + ], + "bytes": [ + "3.0.0", + "3.1.2" + ], + "call-bind": [ + "1.0.7" + ], + "caniuse-lite": [ + "1.0.30001589" + ], + "chokidar": [ + "3.6.0" + ], + "chrome-trace-event": [ + "1.0.3" + ], + "clone-deep": [ + "4.0.1" + ], + "color-convert": [ + "2.0.1" + ], + "color-name": [ + "1.1.4" + ], + "colorette": [ + "2.0.20" + ], + "commander": [ + "10.0.1", + "2.20.3" + ], + "compressible": [ + "2.0.18" + ], + "compression": [ + "1.7.4" + ], + "connect-history-api-fallback": [ + "2.0.0" + ], + "content-disposition": [ + "0.5.4" + ], + "content-type": [ + "1.0.5" + ], + "cookie": [ + "0.6.0" + ], + "cookie-signature": [ + "1.0.6" + ], + "core-util-is": [ + "1.0.3" + ], + "cross-spawn": [ + "7.0.3" + ], + "debug": [ + "2.6.9", + "4.3.4_supports-color_8.1.1" + ], + "default-browser": [ + "5.2.1" + ], + "default-browser-id": [ + "5.0.0" + ], + "default-gateway": [ + "6.0.3" + ], + "define-data-property": [ + "1.1.4" + ], + "define-lazy-prop": [ + "3.0.0" + ], + "depd": [ + "1.1.2", + "2.0.0" + ], + "destroy": [ + "1.2.0" + ], + "detect-node": [ + "2.1.0" + ], + "dns-packet": [ + "5.6.1" + ], + "eastasianwidth": [ + "0.2.0" + ], + "ee-first": [ + "1.1.1" + ], + "electron-to-chromium": [ + "1.4.681" + ], + "emoji-regex": [ + "8.0.0", + "9.2.2" + ], + "encodeurl": [ + "1.0.2" + ], + "enhanced-resolve": [ + "5.15.0" + ], + "envinfo": [ + "7.11.1" + ], + "es-define-property": [ + "1.0.0" + ], + "es-errors": [ + "1.3.0" + ], + "es-module-lexer": [ + "1.4.1" + ], + "escalade": [ + "3.1.2" + ], + "escape-html": [ + "1.0.3" + ], + "eslint-scope": [ + "5.1.1" + ], + "esrecurse": [ + "4.3.0" + ], + "estraverse": [ + "4.3.0", + "5.3.0" + ], + "etag": [ + "1.8.1" + ], + "eventemitter3": [ + "4.0.7" + ], + "events": [ + "3.3.0" + ], + "execa": [ + "5.1.1" + ], + "express": [ + "4.19.2" + ], + "fast-deep-equal": [ + "3.1.3" + ], + "fast-json-stable-stringify": [ + "2.1.0" + ], + "fastest-levenshtein": [ + "1.0.16" + ], + "faye-websocket": [ + "0.11.4" + ], + "fill-range": [ + "7.0.1" + ], + "finalhandler": [ + "1.2.0" + ], + "find-up": [ + "4.1.0" + ], + "flat": [ + "5.0.2" + ], + "follow-redirects": [ + "1.15.6" + ], + "foreground-child": [ + "3.1.1" + ], + "forwarded": [ + "0.2.0" + ], + "fresh": [ + "0.5.2" + ], + "fsevents": [ + "2.3.3" + ], + "function-bind": [ + "1.1.2" + ], + "get-intrinsic": [ + "1.2.4" + ], + "get-stream": [ + "6.0.1" + ], + "glob": [ + "10.3.10" + ], + "glob-parent": [ + "5.1.2" + ], + "glob-to-regexp": [ + "0.4.1" + ], + "gopd": [ + "1.0.1" + ], + "graceful-fs": [ + "4.2.11" + ], + "handle-thing": [ + "2.0.1" + ], + "has-flag": [ + "4.0.0" + ], + "has-property-descriptors": [ + "1.0.2" + ], + "has-proto": [ + "1.0.3" + ], + "has-symbols": [ + "1.0.3" + ], + "hasown": [ + "2.0.1" + ], + "hpack.js": [ + "2.1.6" + ], + "html-entities": [ + "2.4.0" + ], + "http-deceiver": [ + "1.2.7" + ], + "http-errors": [ + "1.6.3", + "2.0.0" + ], + "http-parser-js": [ + "0.5.8" + ], + "http-proxy": [ + "1.18.1" + ], + "http-proxy-middleware": [ + "2.0.6_at_types_express_4.17.21" + ], + "human-signals": [ + "2.1.0" + ], + "iconv-lite": [ + "0.4.24" + ], + "import-local": [ + "3.1.0" + ], + "inherits": [ + "2.0.3", + "2.0.4" + ], + "interpret": [ + "3.1.1" + ], + "ipaddr.js": [ + "1.9.1", + "2.1.0" + ], + "is-binary-path": [ + "2.1.0" + ], + "is-core-module": [ + "2.13.1" + ], + "is-docker": [ + "3.0.0" + ], + "is-extglob": [ + "2.1.1" + ], + "is-fullwidth-code-point": [ + "3.0.0" + ], + "is-glob": [ + "4.0.3" + ], + "is-inside-container": [ + "1.0.0" + ], + "is-network-error": [ + "1.0.1" + ], + "is-number": [ + "7.0.0" + ], + "is-plain-obj": [ + "3.0.0" + ], + "is-plain-object": [ + "2.0.4" + ], + "is-stream": [ + "2.0.1" + ], + "is-wsl": [ + "3.1.0" + ], + "isarray": [ + "1.0.0" + ], + "isexe": [ + "2.0.0" + ], + "isobject": [ + "3.0.1" + ], + "jackspeak": [ + "2.3.6" + ], + "jest-worker": [ + "27.5.1" + ], + "json-parse-even-better-errors": [ + "2.3.1" + ], + "json-schema-traverse": [ + "0.4.1", + "1.0.0" + ], + "kind-of": [ + "6.0.3" + ], + "launch-editor": [ + "2.6.1" + ], + "loader-runner": [ + "4.3.0" + ], + "locate-path": [ + "5.0.0" + ], + "lru-cache": [ + "10.2.0" + ], + "media-typer": [ + "0.3.0" + ], + "memfs": [ + "4.7.7" + ], + "merge-descriptors": [ + "1.0.1" + ], + "merge-stream": [ + "2.0.0" + ], + "methods": [ + "1.1.2" + ], + "micromatch": [ + "4.0.5" + ], + "mime": [ + "1.6.0" + ], + "mime-db": [ + "1.52.0" + ], + "mime-types": [ + "2.1.35" + ], + "mimic-fn": [ + "2.1.0" + ], + "minimalistic-assert": [ + "1.0.1" + ], + "minimatch": [ + "9.0.3" + ], + "minipass": [ + "7.0.4" + ], + "ms": [ + "2.0.0", + "2.1.2", + "2.1.3" + ], + "multicast-dns": [ + "7.2.5" + ], + "negotiator": [ + "0.6.3" + ], + "neo-async": [ + "2.6.2" + ], + "node-forge": [ + "1.3.1" + ], + "node-releases": [ + "2.0.14" + ], + "normalize-path": [ + "3.0.0" + ], + "npm-run-path": [ + "4.0.1" + ], + "object-inspect": [ + "1.13.1" + ], + "obuf": [ + "1.1.2" + ], + "on-finished": [ + "2.4.1" + ], + "on-headers": [ + "1.0.2" + ], + "onetime": [ + "5.1.2" + ], + "open": [ + "10.0.3" + ], + "p-limit": [ + "2.3.0" + ], + "p-locate": [ + "4.1.0" + ], + "p-retry": [ + "6.2.0" + ], + "p-try": [ + "2.2.0" + ], + "parseurl": [ + "1.3.3" + ], + "path-exists": [ + "4.0.0" + ], + "path-key": [ + "3.1.1" + ], + "path-parse": [ + "1.0.7" + ], + "path-scurry": [ + "1.10.1" + ], + "path-to-regexp": [ + "0.1.7" + ], + "picocolors": [ + "1.0.0" + ], + "picomatch": [ + "2.3.1" + ], + "pkg-dir": [ + "4.2.0" + ], + "process-nextick-args": [ + "2.0.1" + ], + "proxy-addr": [ + "2.0.7" + ], + "punycode": [ + "2.3.1" + ], + "qs": [ + "6.11.0" + ], + "randombytes": [ + "2.1.0" + ], + "range-parser": [ + "1.2.1" + ], + "raw-body": [ + "2.5.2" + ], + "readable-stream": [ + "2.3.8", + "3.6.2" + ], + "readdirp": [ + "3.6.0" + ], + "rechoir": [ + "0.8.0" + ], + "require-from-string": [ + "2.0.2" + ], + "requires-port": [ + "1.0.0" + ], + "resolve": [ + "1.22.8" + ], + "resolve-cwd": [ + "3.0.0" + ], + "resolve-from": [ + "5.0.0" + ], + "retry": [ + "0.13.1" + ], + "rimraf": [ + "5.0.5" + ], + "run-applescript": [ + "7.0.0" + ], + "safe-buffer": [ + "5.1.2", + "5.2.1" + ], + "safer-buffer": [ + "2.1.2" + ], + "schema-utils": [ + "3.3.0", + "4.2.0" + ], + "select-hose": [ + "2.0.0" + ], + "selfsigned": [ + "2.4.1" + ], + "send": [ + "0.18.0" + ], + "serialize-javascript": [ + "6.0.2" + ], + "serve-index": [ + "1.9.1" + ], + "serve-static": [ + "1.15.0" + ], + "set-function-length": [ + "1.2.1" + ], + "setprototypeof": [ + "1.1.0", + "1.2.0" + ], + "shallow-clone": [ + "3.0.1" + ], + "shebang-command": [ + "2.0.0" + ], + "shebang-regex": [ + "3.0.0" + ], + "shell-quote": [ + "1.8.1" + ], + "side-channel": [ + "1.0.5" + ], + "signal-exit": [ + "3.0.7", + "4.1.0" + ], + "sockjs": [ + "0.3.24" + ], + "source-map": [ + "0.6.1" + ], + "source-map-support": [ + "0.5.21" + ], + "spdy": [ + "4.0.2" + ], + "spdy-transport": [ + "3.0.0" + ], + "statuses": [ + "1.5.0", + "2.0.1" + ], + "string-width": [ + "4.2.3", + "5.1.2" + ], + "string_decoder": [ + "1.1.1", + "1.3.0" + ], + "strip-ansi": [ + "6.0.1", + "7.1.0" + ], + "strip-final-newline": [ + "2.0.0" + ], + "supports-color": [ + "8.1.1" + ], + "supports-preserve-symlinks-flag": [ + "1.0.0" + ], + "tapable": [ + "2.2.1" + ], + "terser": [ + "5.28.1" + ], + "terser-webpack-plugin": [ + "5.3.10_webpack_5.90.3" + ], + "thunky": [ + "1.1.0" + ], + "to-regex-range": [ + "5.0.1" + ], + "toidentifier": [ + "1.0.1" + ], + "tslib": [ + "2.6.2" + ], + "type-is": [ + "1.6.18" + ], + "undici-types": [ + "5.26.5" + ], + "unpipe": [ + "1.0.0" + ], + "update-browserslist-db": [ + "1.0.13_browserslist_4.23.0" + ], + "uri-js": [ + "4.4.1" + ], + "util-deprecate": [ + "1.0.2" + ], + "utils-merge": [ + "1.0.1" + ], + "uuid": [ + "8.3.2" + ], + "vary": [ + "1.1.2" + ], + "watchpack": [ + "2.4.0" + ], + "wbuf": [ + "1.7.3" + ], + "webpack": [ + "5.90.3_webpack-cli_5.1.4" + ], + "webpack-cli": [ + "5.1.4_-975075900" + ], + "webpack-dev-middleware": [ + "7.1.1_webpack_5.90.3" + ], + "webpack-dev-server": [ + "5.0.2_-359619668" + ], + "webpack-merge": [ + "5.10.0" + ], + "webpack-sources": [ + "3.2.3" + ], + "websocket-driver": [ + "0.7.4" + ], + "websocket-extensions": [ + "0.1.4" + ], + "which": [ + "2.0.2" + ], + "wildcard": [ + "2.0.1" + ], + "wrap-ansi": [ + "7.0.0", + "8.1.0" + ], + "ws": [ + "8.16.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__unicode-property-aliases-ecmascript__2.1.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__unicode-property-aliases-ecmascript__2.1.0__links", + "package": "unicode-property-aliases-ecmascript", + "version": "2.1.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "unicode-property-aliases-ecmascript": [ + "2.1.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__at_babel_generator__7.23.6": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_generator__7.23.6", + "package": "@babel/generator", + "version": "7.23.6", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "url": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__jsesc__0.5.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__jsesc__0.5.0", + "package": "jsesc", + "version": "0.5.0", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "url": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__pathval__1.1.1": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__pathval__1.1.1", + "package": "pathval", + "version": "1.1.1", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "url": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__at_jridgewell_resolve-uri__3.1.2__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_jridgewell_resolve-uri__3.1.2__links", + "package": "@jridgewell/resolve-uri", + "version": "3.1.2", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "@jridgewell/resolve-uri": [ + "3.1.2" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__growl__1.10.5": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__growl__1.10.5", + "package": "growl", + "version": "1.10.5", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "url": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__is-extglob__2.1.1": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__is-extglob__2.1.1", + "package": "is-extglob", + "version": "2.1.1", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "url": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__postcss-selector-parser__6.0.15": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__postcss-selector-parser__6.0.15", + "package": "postcss-selector-parser", + "version": "6.0.15", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "url": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__encodeurl__1.0.2__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__encodeurl__1.0.2__links", + "package": "encodeurl", + "version": "1.0.2", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "encodeurl": [ + "1.0.2" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__update-browserslist-db__1.0.13__browserslist_4.23.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__update-browserslist-db__1.0.13__browserslist_4.23.0__links", + "package": "update-browserslist-db", + "version": "1.0.13_browserslist_4.23.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "browserslist": "4.23.0", + "escalade": "3.1.2", + "picocolors": "1.0.0" + }, + "transitive_closure": { + "browserslist": [ + "4.23.0" + ], + "caniuse-lite": [ + "1.0.30001589" + ], + "electron-to-chromium": [ + "1.4.681" + ], + "escalade": [ + "3.1.2" + ], + "node-releases": [ + "2.0.14" + ], + "picocolors": [ + "1.0.0" + ], + "update-browserslist-db": [ + "1.0.13_browserslist_4.23.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__terser-webpack-plugin__5.3.10__webpack_5.90.3": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__terser-webpack-plugin__5.3.10__webpack_5.90.3", + "package": "terser-webpack-plugin", + "version": "5.3.10_webpack_5.90.3", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "url": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__minimist__1.2.8": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__minimist__1.2.8", + "package": "minimist", + "version": "1.2.8", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "url": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "commit": "", + "patch_args": [], + "patches": [], "custom_postinstall": "", "npm_auth": "", "npm_auth_basic": "", @@ -27813,7 +28676,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -27892,7 +28755,7 @@ "2.0.0" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -27998,7 +28861,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -28029,7 +28892,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -28366,7 +29229,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -28565,7 +29428,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -29171,7 +30034,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -29239,7 +30102,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -29342,7 +30205,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -29369,7 +30232,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -29684,7 +30547,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -29876,7 +30739,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -30438,7 +31301,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -30506,7 +31369,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -30609,7 +31472,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -30636,7 +31499,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -30951,7 +31814,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -31143,7 +32006,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -31216,516 +32079,36 @@ "name": "aspect_rules_js~1.35.0~npm~npm__balanced-match__1.0.2", "package": "balanced-match", "version": "1.0.2", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "url": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__schema-utils__4.2.0": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__schema-utils__4.2.0", - "package": "schema-utils", - "version": "4.2.0", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "url": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__at_babel_plugin-syntax-async-generators__7.8.4__at_babel_core_7.23.9__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-syntax-async-generators__7.8.4__at_babel_core_7.23.9__links", - "package": "@babel/plugin-syntax-async-generators", - "version": "7.8.4_at_babel_core_7.23.9", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "@babel/core": "7.23.9", - "@babel/helper-plugin-utils": "7.22.5" - }, - "transitive_closure": { - "@ampproject/remapping": [ - "2.2.1" - ], - "@babel/code-frame": [ - "7.23.5" - ], - "@babel/compat-data": [ - "7.23.5" - ], - "@babel/core": [ - "7.23.9" - ], - "@babel/generator": [ - "7.23.6" - ], - "@babel/helper-compilation-targets": [ - "7.23.6" - ], - "@babel/helper-environment-visitor": [ - "7.22.20" - ], - "@babel/helper-function-name": [ - "7.23.0" - ], - "@babel/helper-hoist-variables": [ - "7.22.5" - ], - "@babel/helper-module-imports": [ - "7.22.15" - ], - "@babel/helper-module-transforms": [ - "7.23.3_at_babel_core_7.23.9" - ], - "@babel/helper-plugin-utils": [ - "7.22.5" - ], - "@babel/helper-simple-access": [ - "7.22.5" - ], - "@babel/helper-split-export-declaration": [ - "7.22.6" - ], - "@babel/helper-string-parser": [ - "7.23.4" - ], - "@babel/helper-validator-identifier": [ - "7.22.20" - ], - "@babel/helper-validator-option": [ - "7.23.5" - ], - "@babel/helpers": [ - "7.23.9" - ], - "@babel/highlight": [ - "7.23.4" - ], - "@babel/parser": [ - "7.23.9" - ], - "@babel/plugin-syntax-async-generators": [ - "7.8.4_at_babel_core_7.23.9" - ], - "@babel/template": [ - "7.23.9" - ], - "@babel/traverse": [ - "7.23.9" - ], - "@babel/types": [ - "7.23.9" - ], - "@jridgewell/gen-mapping": [ - "0.3.3" - ], - "@jridgewell/resolve-uri": [ - "3.1.2" - ], - "@jridgewell/set-array": [ - "1.1.2" - ], - "@jridgewell/sourcemap-codec": [ - "1.4.15" - ], - "@jridgewell/trace-mapping": [ - "0.3.22" - ], - "ansi-styles": [ - "3.2.1" - ], - "browserslist": [ - "4.23.0" - ], - "caniuse-lite": [ - "1.0.30001589" - ], - "chalk": [ - "2.4.2" - ], - "color-convert": [ - "1.9.3" - ], - "color-name": [ - "1.1.3" - ], - "convert-source-map": [ - "2.0.0" - ], - "debug": [ - "4.3.4_supports-color_8.1.1" - ], - "electron-to-chromium": [ - "1.4.681" - ], - "escalade": [ - "3.1.2" - ], - "escape-string-regexp": [ - "1.0.5" - ], - "gensync": [ - "1.0.0-beta.2" - ], - "globals": [ - "11.12.0" - ], - "has-flag": [ - "3.0.0", - "4.0.0" - ], - "js-tokens": [ - "4.0.0" - ], - "jsesc": [ - "2.5.2" - ], - "json5": [ - "2.2.3" - ], - "lru-cache": [ - "5.1.1" - ], - "ms": [ - "2.1.2" - ], - "node-releases": [ - "2.0.14" - ], - "picocolors": [ - "1.0.0" - ], - "semver": [ - "6.3.1" - ], - "supports-color": [ - "5.5.0", - "8.1.1" - ], - "to-fast-properties": [ - "2.0.0" - ], - "update-browserslist-db": [ - "1.0.13_browserslist_4.23.0" - ], - "yallist": [ - "3.1.1" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__js-tokens__4.0.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__js-tokens__4.0.0__links", - "package": "js-tokens", - "version": "4.0.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "js-tokens": [ - "4.0.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__param-case__3.0.4__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__param-case__3.0.4__links", - "package": "param-case", - "version": "3.0.4", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "dot-case": "3.0.4", - "tslib": "2.6.2" - }, - "transitive_closure": { - "dot-case": [ - "3.0.4" - ], - "lower-case": [ - "2.0.2" - ], - "no-case": [ - "3.0.4" - ], - "param-case": [ - "3.0.4" - ], - "tslib": [ - "2.6.2" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__is-fullwidth-code-point__3.0.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__is-fullwidth-code-point__3.0.0__links", - "package": "is-fullwidth-code-point", - "version": "3.0.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "is-fullwidth-code-point": [ - "3.0.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__regexpu-core__5.3.2": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__regexpu-core__5.3.2", - "package": "regexpu-core", - "version": "5.3.2", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "url": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__lodash.debounce__4.0.8": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__lodash.debounce__4.0.8", - "package": "lodash.debounce", - "version": "4.0.8", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "url": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__node-forge__1.3.1": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__node-forge__1.3.1", - "package": "node-forge", - "version": "1.3.1", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "url": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__compressible__2.0.18__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__compressible__2.0.18__links", - "package": "compressible", - "version": "2.0.18", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "mime-db": "1.52.0" - }, - "transitive_closure": { - "compressible": [ - "2.0.18" - ], - "mime-db": [ - "1.52.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__at_types_body-parser__1.19.5": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_body-parser__1.19.5", - "package": "@types/body-parser", - "version": "1.19.5", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "url": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__yauzl__2.10.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__yauzl__2.10.0__links", - "package": "yauzl", - "version": "2.10.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.1.0" - }, - "transitive_closure": { - "buffer-crc32": [ - "0.2.13" - ], - "fd-slicer": [ - "1.1.0" - ], - "pend": [ - "1.2.0" - ], - "yauzl": [ - "2.10.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "url": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false } }, - "npm__is-network-error__1.0.1": { + "npm__schema-utils__4.2.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__is-network-error__1.0.1", - "package": "is-network-error", - "version": "1.0.1", + "name": "aspect_rules_js~1.35.0~npm~npm__schema-utils__4.2.0", + "package": "schema-utils", + "version": "4.2.0", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-OwQXkwBJeESyhFw+OumbJVD58BFBJJI5OM5S1+eyrDKlgDZPX2XNT5gXS56GSD3NPbbwUuMlR1Q71SRp5SobuQ==", - "url": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.0.1.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "url": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "commit": "", "patch_args": [], "patches": [], @@ -31739,20 +32122,19 @@ "generate_bzl_library_targets": false } }, - "npm__at_babel_plugin-transform-regenerator__7.23.3__at_babel_core_7.23.9__links": { + "npm__at_babel_plugin-syntax-async-generators__7.8.4__at_babel_core_7.23.9__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-transform-regenerator__7.23.3__at_babel_core_7.23.9__links", - "package": "@babel/plugin-transform-regenerator", - "version": "7.23.3_at_babel_core_7.23.9", + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-syntax-async-generators__7.8.4__at_babel_core_7.23.9__links", + "package": "@babel/plugin-syntax-async-generators", + "version": "7.8.4_at_babel_core_7.23.9", "dev": false, "root_package": "", "link_packages": {}, "deps": { "@babel/core": "7.23.9", - "@babel/helper-plugin-utils": "7.22.5", - "regenerator-transform": "0.15.2" + "@babel/helper-plugin-utils": "7.22.5" }, "transitive_closure": { "@ampproject/remapping": [ @@ -31815,11 +32197,8 @@ "@babel/parser": [ "7.23.9" ], - "@babel/plugin-transform-regenerator": [ - "7.23.3_at_babel_core_7.23.9" - ], - "@babel/runtime": [ - "7.23.9" + "@babel/plugin-syntax-async-generators": [ + "7.8.4_at_babel_core_7.23.9" ], "@babel/template": [ "7.23.9" @@ -31898,543 +32277,125 @@ "2.2.3" ], "lru-cache": [ - "5.1.1" - ], - "ms": [ - "2.1.2" - ], - "node-releases": [ - "2.0.14" - ], - "picocolors": [ - "1.0.0" - ], - "regenerator-runtime": [ - "0.14.1" - ], - "regenerator-transform": [ - "0.15.2" - ], - "semver": [ - "6.3.1" - ], - "supports-color": [ - "5.5.0", - "8.1.1" - ], - "to-fast-properties": [ - "2.0.0" - ], - "update-browserslist-db": [ - "1.0.13_browserslist_4.23.0" - ], - "yallist": [ - "3.1.1" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__get-stream__6.0.1": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__get-stream__6.0.1", - "package": "get-stream", - "version": "6.0.1", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "url": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__serialize-javascript__6.0.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__serialize-javascript__6.0.0__links", - "package": "serialize-javascript", - "version": "6.0.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "randombytes": "2.1.0" - }, - "transitive_closure": { - "randombytes": [ - "2.1.0" - ], - "safe-buffer": [ - "5.2.1" - ], - "serialize-javascript": [ - "6.0.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__diff__3.5.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__diff__3.5.0__links", - "package": "diff", - "version": "3.5.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "diff": [ - "3.5.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__has-flag__3.0.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__has-flag__3.0.0__links", - "package": "has-flag", - "version": "3.0.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "has-flag": [ - "3.0.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__semver-compare__1.0.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__semver-compare__1.0.0__links", - "package": "semver-compare", - "version": "1.0.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "semver-compare": [ - "1.0.0" - ] - }, - "lifecycle_build_target": true, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [ - "no-sandbox" - ], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__once__1.4.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__once__1.4.0__links", - "package": "once", - "version": "1.4.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "wrappy": "1.0.2" - }, - "transitive_closure": { - "once": [ - "1.4.0" - ], - "wrappy": [ - "1.0.2" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__default-browser__5.2.1": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__default-browser__5.2.1", - "package": "default-browser", - "version": "5.2.1", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "url": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__postcss-modules-extract-imports__3.0.0__postcss_8.4.35__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__postcss-modules-extract-imports__3.0.0__postcss_8.4.35__links", - "package": "postcss-modules-extract-imports", - "version": "3.0.0_postcss_8.4.35", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "postcss": "8.4.35" - }, - "transitive_closure": { - "nanoid": [ - "3.3.7" - ], - "picocolors": [ - "1.0.0" - ], - "postcss": [ - "8.4.35" - ], - "postcss-modules-extract-imports": [ - "3.0.0_postcss_8.4.35" - ], - "source-map-js": [ - "1.0.2" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__at_babel_plugin-transform-modules-commonjs__7.23.3__at_babel_core_7.23.9": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-transform-modules-commonjs__7.23.3__at_babel_core_7.23.9", - "package": "@babel/plugin-transform-modules-commonjs", - "version": "7.23.3_at_babel_core_7.23.9", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "url": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__ms__2.1.2__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__ms__2.1.2__links", - "package": "ms", - "version": "2.1.2", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "ms": [ - "2.1.2" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__at_types_bonjour__3.5.13__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_bonjour__3.5.13__links", - "package": "@types/bonjour", - "version": "3.5.13", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "@types/node": "20.11.20" - }, - "transitive_closure": { - "@types/bonjour": [ - "3.5.13" - ], - "@types/node": [ - "20.11.20" - ], - "undici-types": [ - "5.26.5" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__supports-color__7.2.0": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__supports-color__7.2.0", - "package": "supports-color", - "version": "7.2.0", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "url": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__at_types_react-router__5.1.20": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_react-router__5.1.20", - "package": "@types/react-router", - "version": "5.1.20", - "root_package": "", - "link_workspace": "", - "link_packages": { - "": [ - "@types/react-router" - ] - }, - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "url": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__get-stream__5.2.0": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__get-stream__5.2.0", - "package": "get-stream", - "version": "5.2.0", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "url": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__string-width__5.1.2": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__string-width__5.1.2", - "package": "string-width", - "version": "5.1.2", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "url": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false + "5.1.1" + ], + "ms": [ + "2.1.2" + ], + "node-releases": [ + "2.0.14" + ], + "picocolors": [ + "1.0.0" + ], + "semver": [ + "6.3.1" + ], + "supports-color": [ + "5.5.0", + "8.1.1" + ], + "to-fast-properties": [ + "2.0.0" + ], + "update-browserslist-db": [ + "1.0.13_browserslist_4.23.0" + ], + "yallist": [ + "3.1.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] } }, - "npm__at_babel_plugin-syntax-optional-catch-binding__7.8.3__at_babel_core_7.23.9": { + "npm__js-tokens__4.0.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", + "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-syntax-optional-catch-binding__7.8.3__at_babel_core_7.23.9", - "package": "@babel/plugin-syntax-optional-catch-binding", - "version": "7.8.3_at_babel_core_7.23.9", + "name": "aspect_rules_js~1.35.0~npm~npm__js-tokens__4.0.0__links", + "package": "js-tokens", + "version": "4.0.0", + "dev": false, "root_package": "", - "link_workspace": "", "link_packages": {}, - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "url": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false + "deps": {}, + "transitive_closure": { + "js-tokens": [ + "4.0.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] } }, - "npm__at_webassemblyjs_helper-wasm-bytecode__1.11.6": { + "npm__param-case__3.0.4__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", + "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_webassemblyjs_helper-wasm-bytecode__1.11.6", - "package": "@webassemblyjs/helper-wasm-bytecode", - "version": "1.11.6", + "name": "aspect_rules_js~1.35.0~npm~npm__param-case__3.0.4__links", + "package": "param-case", + "version": "3.0.4", + "dev": false, "root_package": "", - "link_workspace": "", "link_packages": {}, - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "url": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false + "deps": { + "dot-case": "3.0.4", + "tslib": "2.6.2" + }, + "transitive_closure": { + "dot-case": [ + "3.0.4" + ], + "lower-case": [ + "2.0.2" + ], + "no-case": [ + "3.0.4" + ], + "param-case": [ + "3.0.4" + ], + "tslib": [ + "2.6.2" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] } }, - "npm__nth-check__2.1.1__links": { + "npm__is-fullwidth-code-point__3.0.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__nth-check__2.1.1__links", - "package": "nth-check", - "version": "2.1.1", + "name": "aspect_rules_js~1.35.0~npm~npm__is-fullwidth-code-point__3.0.0__links", + "package": "is-fullwidth-code-point", + "version": "3.0.0", "dev": false, "root_package": "", "link_packages": {}, - "deps": { - "boolbase": "1.0.0" - }, + "deps": {}, "transitive_closure": { - "boolbase": [ - "1.0.0" - ], - "nth-check": [ - "2.1.1" + "is-fullwidth-code-point": [ + "3.0.0" ] }, "lifecycle_build_target": false, @@ -32447,18 +32408,18 @@ ] } }, - "npm__signal-exit__3.0.7": { + "npm__regexpu-core__5.3.2": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__signal-exit__3.0.7", - "package": "signal-exit", - "version": "3.0.7", + "name": "aspect_rules_js~1.35.0~npm~npm__regexpu-core__5.3.2", + "package": "regexpu-core", + "version": "5.3.2", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "url": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "url": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "commit": "", "patch_args": [], "patches": [], @@ -32472,18 +32433,18 @@ "generate_bzl_library_targets": false } }, - "npm__keyv__4.5.4": { + "npm__lodash.debounce__4.0.8": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__keyv__4.5.4", - "package": "keyv", - "version": "4.5.4", + "name": "aspect_rules_js~1.35.0~npm~npm__lodash.debounce__4.0.8", + "package": "lodash.debounce", + "version": "4.0.8", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "url": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "url": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "commit": "", "patch_args": [], "patches": [], @@ -32497,18 +32458,18 @@ "generate_bzl_library_targets": false } }, - "npm__at_types_serve-index__1.9.4": { + "npm__node-forge__1.3.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_serve-index__1.9.4", - "package": "@types/serve-index", - "version": "1.9.4", + "name": "aspect_rules_js~1.35.0~npm~npm__node-forge__1.3.1", + "package": "node-forge", + "version": "1.3.1", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "url": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "url": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "commit": "", "patch_args": [], "patches": [], @@ -32522,47 +32483,49 @@ "generate_bzl_library_targets": false } }, - "npm__shebang-command__2.0.0": { + "npm__compressible__2.0.18__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", + "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__shebang-command__2.0.0", - "package": "shebang-command", - "version": "2.0.0", + "name": "aspect_rules_js~1.35.0~npm~npm__compressible__2.0.18__links", + "package": "compressible", + "version": "2.0.18", + "dev": false, "root_package": "", - "link_workspace": "", "link_packages": {}, - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "url": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false + "deps": { + "mime-db": "1.52.0" + }, + "transitive_closure": { + "compressible": [ + "2.0.18" + ], + "mime-db": [ + "1.52.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] } }, - "npm__at_types_react-dom__16.9.24": { + "npm__at_types_body-parser__1.19.5": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_react-dom__16.9.24", - "package": "@types/react-dom", - "version": "16.9.24", + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_body-parser__1.19.5", + "package": "@types/body-parser", + "version": "1.19.5", "root_package": "", "link_workspace": "", - "link_packages": { - "": [ - "@types/react-dom" - ] - }, - "integrity": "sha512-Gcmq2JTDheyWn/1eteqyzzWKSqDjYU6KYsIvH7thb7CR5OYInAWOX+7WnKf6PaU/cbdOc4szJItcDEJO7UGmfA==", - "url": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.24.tgz", + "link_packages": {}, + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "url": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "commit": "", "patch_args": [], "patches": [], @@ -32576,29 +32539,32 @@ "generate_bzl_library_targets": false } }, - "npm__launch-editor__2.6.1__links": { + "npm__yauzl__2.10.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__launch-editor__2.6.1__links", - "package": "launch-editor", - "version": "2.6.1", + "name": "aspect_rules_js~1.35.0~npm~npm__yauzl__2.10.0__links", + "package": "yauzl", + "version": "2.10.0", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "picocolors": "1.0.0", - "shell-quote": "1.8.1" + "buffer-crc32": "0.2.13", + "fd-slicer": "1.1.0" }, "transitive_closure": { - "launch-editor": [ - "2.6.1" + "buffer-crc32": [ + "0.2.13" ], - "picocolors": [ - "1.0.0" + "fd-slicer": [ + "1.1.0" ], - "shell-quote": [ - "1.8.1" + "pend": [ + "1.2.0" + ], + "yauzl": [ + "2.10.0" ] }, "lifecycle_build_target": false, @@ -32611,48 +32577,146 @@ ] } }, - "npm__at_babel_helper-function-name__7.23.0__links": { + "npm__is-network-error__1.0.1": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__is-network-error__1.0.1", + "package": "is-network-error", + "version": "1.0.1", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-OwQXkwBJeESyhFw+OumbJVD58BFBJJI5OM5S1+eyrDKlgDZPX2XNT5gXS56GSD3NPbbwUuMlR1Q71SRp5SobuQ==", + "url": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.0.1.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__at_babel_plugin-transform-regenerator__7.23.3__at_babel_core_7.23.9__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_helper-function-name__7.23.0__links", - "package": "@babel/helper-function-name", - "version": "7.23.0", + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-transform-regenerator__7.23.3__at_babel_core_7.23.9__links", + "package": "@babel/plugin-transform-regenerator", + "version": "7.23.3_at_babel_core_7.23.9", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "@babel/template": "7.23.9", - "@babel/types": "7.23.9" + "@babel/core": "7.23.9", + "@babel/helper-plugin-utils": "7.22.5", + "regenerator-transform": "0.15.2" }, "transitive_closure": { + "@ampproject/remapping": [ + "2.2.1" + ], "@babel/code-frame": [ "7.23.5" ], + "@babel/compat-data": [ + "7.23.5" + ], + "@babel/core": [ + "7.23.9" + ], + "@babel/generator": [ + "7.23.6" + ], + "@babel/helper-compilation-targets": [ + "7.23.6" + ], + "@babel/helper-environment-visitor": [ + "7.22.20" + ], "@babel/helper-function-name": [ "7.23.0" ], + "@babel/helper-hoist-variables": [ + "7.22.5" + ], + "@babel/helper-module-imports": [ + "7.22.15" + ], + "@babel/helper-module-transforms": [ + "7.23.3_at_babel_core_7.23.9" + ], + "@babel/helper-plugin-utils": [ + "7.22.5" + ], + "@babel/helper-simple-access": [ + "7.22.5" + ], + "@babel/helper-split-export-declaration": [ + "7.22.6" + ], "@babel/helper-string-parser": [ "7.23.4" ], "@babel/helper-validator-identifier": [ "7.22.20" ], + "@babel/helper-validator-option": [ + "7.23.5" + ], + "@babel/helpers": [ + "7.23.9" + ], "@babel/highlight": [ "7.23.4" ], "@babel/parser": [ "7.23.9" ], + "@babel/plugin-transform-regenerator": [ + "7.23.3_at_babel_core_7.23.9" + ], + "@babel/runtime": [ + "7.23.9" + ], "@babel/template": [ "7.23.9" ], + "@babel/traverse": [ + "7.23.9" + ], "@babel/types": [ "7.23.9" ], + "@jridgewell/gen-mapping": [ + "0.3.3" + ], + "@jridgewell/resolve-uri": [ + "3.1.2" + ], + "@jridgewell/set-array": [ + "1.1.2" + ], + "@jridgewell/sourcemap-codec": [ + "1.4.15" + ], + "@jridgewell/trace-mapping": [ + "0.3.22" + ], "ansi-styles": [ "3.2.1" ], + "browserslist": [ + "4.23.0" + ], + "caniuse-lite": [ + "1.0.30001589" + ], "chalk": [ "2.4.2" ], @@ -32662,20 +32726,158 @@ "color-name": [ "1.1.3" ], + "convert-source-map": [ + "2.0.0" + ], + "debug": [ + "4.3.4_supports-color_8.1.1" + ], + "electron-to-chromium": [ + "1.4.681" + ], + "escalade": [ + "3.1.2" + ], "escape-string-regexp": [ "1.0.5" ], + "gensync": [ + "1.0.0-beta.2" + ], + "globals": [ + "11.12.0" + ], "has-flag": [ - "3.0.0" + "3.0.0", + "4.0.0" ], "js-tokens": [ "4.0.0" ], + "jsesc": [ + "2.5.2" + ], + "json5": [ + "2.2.3" + ], + "lru-cache": [ + "5.1.1" + ], + "ms": [ + "2.1.2" + ], + "node-releases": [ + "2.0.14" + ], + "picocolors": [ + "1.0.0" + ], + "regenerator-runtime": [ + "0.14.1" + ], + "regenerator-transform": [ + "0.15.2" + ], + "semver": [ + "6.3.1" + ], "supports-color": [ - "5.5.0" + "5.5.0", + "8.1.1" ], "to-fast-properties": [ "2.0.0" + ], + "update-browserslist-db": [ + "1.0.13_browserslist_4.23.0" + ], + "yallist": [ + "3.1.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__get-stream__6.0.1": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__get-stream__6.0.1", + "package": "get-stream", + "version": "6.0.1", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "url": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__serialize-javascript__6.0.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__serialize-javascript__6.0.0__links", + "package": "serialize-javascript", + "version": "6.0.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "randombytes": "2.1.0" + }, + "transitive_closure": { + "randombytes": [ + "2.1.0" + ], + "safe-buffer": [ + "5.2.1" + ], + "serialize-javascript": [ + "6.0.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__diff__3.5.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__diff__3.5.0__links", + "package": "diff", + "version": "3.5.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "diff": [ + "3.5.0" ] }, "lifecycle_build_target": false, @@ -32688,50 +32890,53 @@ ] } }, - "npm__hpack.js__2.1.6": { + "npm__has-flag__3.0.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", + "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__hpack.js__2.1.6", - "package": "hpack.js", - "version": "2.1.6", + "name": "aspect_rules_js~1.35.0~npm~npm__has-flag__3.0.0__links", + "package": "has-flag", + "version": "3.0.0", + "dev": false, "root_package": "", - "link_workspace": "", "link_packages": {}, - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "url": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false + "deps": {}, + "transitive_closure": { + "has-flag": [ + "3.0.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] } }, - "npm__he__1.1.1__links": { + "npm__semver-compare__1.0.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__he__1.1.1__links", - "package": "he", - "version": "1.1.1", + "name": "aspect_rules_js~1.35.0~npm~npm__semver-compare__1.0.0__links", + "package": "semver-compare", + "version": "1.0.0", "dev": false, "root_package": "", "link_packages": {}, "deps": {}, "transitive_closure": { - "he": [ - "1.1.1" + "semver-compare": [ + "1.0.0" ] }, - "lifecycle_build_target": false, + "lifecycle_build_target": true, "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], + "lifecycle_hooks_execution_requirements": [ + "no-sandbox" + ], "bins": {}, "npm_translate_lock_repo": "npm", "package_visibility": [ @@ -32739,44 +32944,25 @@ ] } }, - "npm__at_types_connect-history-api-fallback__1.5.4__links": { + "npm__once__1.4.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_connect-history-api-fallback__1.5.4__links", - "package": "@types/connect-history-api-fallback", - "version": "1.5.4", + "name": "aspect_rules_js~1.35.0~npm~npm__once__1.4.0__links", + "package": "once", + "version": "1.4.0", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "@types/express-serve-static-core": "4.17.43", - "@types/node": "20.11.20" + "wrappy": "1.0.2" }, "transitive_closure": { - "@types/connect-history-api-fallback": [ - "1.5.4" - ], - "@types/express-serve-static-core": [ - "4.17.43" - ], - "@types/mime": [ - "1.3.5" - ], - "@types/node": [ - "20.11.20" - ], - "@types/qs": [ - "6.9.11" - ], - "@types/range-parser": [ - "1.2.7" - ], - "@types/send": [ - "0.17.4" + "once": [ + "1.4.0" ], - "undici-types": [ - "5.26.5" + "wrappy": [ + "1.0.2" ] }, "lifecycle_build_target": false, @@ -32789,18 +32975,18 @@ ] } }, - "npm__follow-redirects__1.15.5": { + "npm__default-browser__5.2.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__follow-redirects__1.15.5", - "package": "follow-redirects", - "version": "1.15.5", + "name": "aspect_rules_js~1.35.0~npm~npm__default-browser__5.2.1", + "package": "default-browser", + "version": "5.2.1", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", - "url": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "url": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", "commit": "", "patch_args": [], "patches": [], @@ -32814,20 +33000,239 @@ "generate_bzl_library_targets": false } }, - "npm__tapable__2.2.1__links": { + "npm__express__4.19.2__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__tapable__2.2.1__links", - "package": "tapable", - "version": "2.2.1", + "name": "aspect_rules_js~1.35.0~npm~npm__express__4.19.2__links", + "package": "express", + "version": "4.19.2", "dev": false, "root_package": "", "link_packages": {}, - "deps": {}, + "deps": { + "accepts": "1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "1.0.5", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.4.1", + "parseurl": "1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.7", + "qs": "6.11.0", + "range-parser": "1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "1.6.18", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, "transitive_closure": { - "tapable": [ - "2.2.1" + "accepts": [ + "1.3.8" + ], + "array-flatten": [ + "1.1.1" + ], + "body-parser": [ + "1.20.2" + ], + "bytes": [ + "3.1.2" + ], + "call-bind": [ + "1.0.7" + ], + "content-disposition": [ + "0.5.4" + ], + "content-type": [ + "1.0.5" + ], + "cookie": [ + "0.6.0" + ], + "cookie-signature": [ + "1.0.6" + ], + "debug": [ + "2.6.9" + ], + "define-data-property": [ + "1.1.4" + ], + "depd": [ + "2.0.0" + ], + "destroy": [ + "1.2.0" + ], + "ee-first": [ + "1.1.1" + ], + "encodeurl": [ + "1.0.2" + ], + "es-define-property": [ + "1.0.0" + ], + "es-errors": [ + "1.3.0" + ], + "escape-html": [ + "1.0.3" + ], + "etag": [ + "1.8.1" + ], + "express": [ + "4.19.2" + ], + "finalhandler": [ + "1.2.0" + ], + "forwarded": [ + "0.2.0" + ], + "fresh": [ + "0.5.2" + ], + "function-bind": [ + "1.1.2" + ], + "get-intrinsic": [ + "1.2.4" + ], + "gopd": [ + "1.0.1" + ], + "has-property-descriptors": [ + "1.0.2" + ], + "has-proto": [ + "1.0.3" + ], + "has-symbols": [ + "1.0.3" + ], + "hasown": [ + "2.0.1" + ], + "http-errors": [ + "2.0.0" + ], + "iconv-lite": [ + "0.4.24" + ], + "inherits": [ + "2.0.4" + ], + "ipaddr.js": [ + "1.9.1" + ], + "media-typer": [ + "0.3.0" + ], + "merge-descriptors": [ + "1.0.1" + ], + "methods": [ + "1.1.2" + ], + "mime": [ + "1.6.0" + ], + "mime-db": [ + "1.52.0" + ], + "mime-types": [ + "2.1.35" + ], + "ms": [ + "2.0.0", + "2.1.3" + ], + "negotiator": [ + "0.6.3" + ], + "object-inspect": [ + "1.13.1" + ], + "on-finished": [ + "2.4.1" + ], + "parseurl": [ + "1.3.3" + ], + "path-to-regexp": [ + "0.1.7" + ], + "proxy-addr": [ + "2.0.7" + ], + "qs": [ + "6.11.0" + ], + "range-parser": [ + "1.2.1" + ], + "raw-body": [ + "2.5.2" + ], + "safe-buffer": [ + "5.2.1" + ], + "safer-buffer": [ + "2.1.2" + ], + "send": [ + "0.18.0" + ], + "serve-static": [ + "1.15.0" + ], + "set-function-length": [ + "1.2.1" + ], + "setprototypeof": [ + "1.2.0" + ], + "side-channel": [ + "1.0.5" + ], + "statuses": [ + "2.0.1" + ], + "toidentifier": [ + "1.0.1" + ], + "type-is": [ + "1.6.18" + ], + "unpipe": [ + "1.0.0" + ], + "utils-merge": [ + "1.0.1" + ], + "vary": [ + "1.1.2" ] }, "lifecycle_build_target": false, @@ -32840,72 +33245,58 @@ ] } }, - "npm__sprintf-js__1.1.3": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__sprintf-js__1.1.3", - "package": "sprintf-js", - "version": "1.1.3", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "url": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [ - "preinstall", - "install", - "postinstall" - ], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__ansi-regex__6.0.1": { + "npm__postcss-modules-extract-imports__3.0.0__postcss_8.4.35__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", + "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__ansi-regex__6.0.1", - "package": "ansi-regex", - "version": "6.0.1", + "name": "aspect_rules_js~1.35.0~npm~npm__postcss-modules-extract-imports__3.0.0__postcss_8.4.35__links", + "package": "postcss-modules-extract-imports", + "version": "3.0.0_postcss_8.4.35", + "dev": false, "root_package": "", - "link_workspace": "", "link_packages": {}, - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false + "deps": { + "postcss": "8.4.35" + }, + "transitive_closure": { + "nanoid": [ + "3.3.7" + ], + "picocolors": [ + "1.0.0" + ], + "postcss": [ + "8.4.35" + ], + "postcss-modules-extract-imports": [ + "3.0.0_postcss_8.4.35" + ], + "source-map-js": [ + "1.0.2" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] } }, - "npm__at_electron_get__2.0.3": { + "npm__at_babel_plugin-transform-modules-commonjs__7.23.3__at_babel_core_7.23.9": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_electron_get__2.0.3", - "package": "@electron/get", - "version": "2.0.3", + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-transform-modules-commonjs__7.23.3__at_babel_core_7.23.9", + "package": "@babel/plugin-transform-modules-commonjs", + "version": "7.23.3_at_babel_core_7.23.9", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", - "url": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "url": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", "commit": "", "patch_args": [], "patches": [], @@ -32919,27 +33310,25 @@ "generate_bzl_library_targets": false } }, - "npm__es6-error__4.1.1__links": { + "npm__ms__2.1.2__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__es6-error__4.1.1__links", - "package": "es6-error", - "version": "4.1.1", + "name": "aspect_rules_js~1.35.0~npm~npm__ms__2.1.2__links", + "package": "ms", + "version": "2.1.2", "dev": false, "root_package": "", "link_packages": {}, "deps": {}, "transitive_closure": { - "es6-error": [ - "4.1.1" + "ms": [ + "2.1.2" ] }, - "lifecycle_build_target": true, + "lifecycle_build_target": false, "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [ - "no-sandbox" - ], + "lifecycle_hooks_execution_requirements": [], "bins": {}, "npm_translate_lock_repo": "npm", "package_visibility": [ @@ -32947,59 +33336,28 @@ ] } }, - "npm__call-bind__1.0.7__links": { + "npm__at_types_bonjour__3.5.13__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__call-bind__1.0.7__links", - "package": "call-bind", - "version": "1.0.7", + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_bonjour__3.5.13__links", + "package": "@types/bonjour", + "version": "3.5.13", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "es-define-property": "1.0.0", - "es-errors": "1.3.0", - "function-bind": "1.1.2", - "get-intrinsic": "1.2.4", - "set-function-length": "1.2.1" + "@types/node": "20.11.20" }, "transitive_closure": { - "call-bind": [ - "1.0.7" - ], - "define-data-property": [ - "1.1.4" - ], - "es-define-property": [ - "1.0.0" - ], - "es-errors": [ - "1.3.0" - ], - "function-bind": [ - "1.1.2" - ], - "get-intrinsic": [ - "1.2.4" - ], - "gopd": [ - "1.0.1" - ], - "has-property-descriptors": [ - "1.0.2" - ], - "has-proto": [ - "1.0.3" - ], - "has-symbols": [ - "1.0.3" + "@types/bonjour": [ + "3.5.13" ], - "hasown": [ - "2.0.1" + "@types/node": [ + "20.11.20" ], - "set-function-length": [ - "1.2.1" + "undici-types": [ + "5.26.5" ] }, "lifecycle_build_target": false, @@ -33012,18 +33370,18 @@ ] } }, - "npm__http-errors__1.6.3": { + "npm__supports-color__7.2.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__http-errors__1.6.3", - "package": "http-errors", - "version": "1.6.3", + "name": "aspect_rules_js~1.35.0~npm~npm__supports-color__7.2.0", + "package": "supports-color", + "version": "7.2.0", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "url": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "url": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "commit": "", "patch_args": [], "patches": [], @@ -33037,18 +33395,22 @@ "generate_bzl_library_targets": false } }, - "npm__require-from-string__2.0.2": { + "npm__at_types_react-router__5.1.20": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__require-from-string__2.0.2", - "package": "require-from-string", - "version": "2.0.2", + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_react-router__5.1.20", + "package": "@types/react-router", + "version": "5.1.20", "root_package": "", "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "url": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "link_packages": { + "": [ + "@types/react-router" + ] + }, + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "url": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", "commit": "", "patch_args": [], "patches": [], @@ -33062,18 +33424,18 @@ "generate_bzl_library_targets": false } }, - "npm__brace-expansion__2.0.1": { + "npm__get-stream__5.2.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__brace-expansion__2.0.1", - "package": "brace-expansion", - "version": "2.0.1", + "name": "aspect_rules_js~1.35.0~npm~npm__get-stream__5.2.0", + "package": "get-stream", + "version": "5.2.0", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "url": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "commit": "", "patch_args": [], "patches": [], @@ -33087,241 +33449,18 @@ "generate_bzl_library_targets": false } }, - "npm__at_babel_helper-create-regexp-features-plugin__7.22.15__at_babel_core_7.23.9__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_helper-create-regexp-features-plugin__7.22.15__at_babel_core_7.23.9__links", - "package": "@babel/helper-create-regexp-features-plugin", - "version": "7.22.15_at_babel_core_7.23.9", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "@babel/core": "7.23.9", - "@babel/helper-annotate-as-pure": "7.22.5", - "regexpu-core": "5.3.2", - "semver": "6.3.1" - }, - "transitive_closure": { - "@ampproject/remapping": [ - "2.2.1" - ], - "@babel/code-frame": [ - "7.23.5" - ], - "@babel/compat-data": [ - "7.23.5" - ], - "@babel/core": [ - "7.23.9" - ], - "@babel/generator": [ - "7.23.6" - ], - "@babel/helper-annotate-as-pure": [ - "7.22.5" - ], - "@babel/helper-compilation-targets": [ - "7.23.6" - ], - "@babel/helper-create-regexp-features-plugin": [ - "7.22.15_at_babel_core_7.23.9" - ], - "@babel/helper-environment-visitor": [ - "7.22.20" - ], - "@babel/helper-function-name": [ - "7.23.0" - ], - "@babel/helper-hoist-variables": [ - "7.22.5" - ], - "@babel/helper-module-imports": [ - "7.22.15" - ], - "@babel/helper-module-transforms": [ - "7.23.3_at_babel_core_7.23.9" - ], - "@babel/helper-simple-access": [ - "7.22.5" - ], - "@babel/helper-split-export-declaration": [ - "7.22.6" - ], - "@babel/helper-string-parser": [ - "7.23.4" - ], - "@babel/helper-validator-identifier": [ - "7.22.20" - ], - "@babel/helper-validator-option": [ - "7.23.5" - ], - "@babel/helpers": [ - "7.23.9" - ], - "@babel/highlight": [ - "7.23.4" - ], - "@babel/parser": [ - "7.23.9" - ], - "@babel/regjsgen": [ - "0.8.0" - ], - "@babel/template": [ - "7.23.9" - ], - "@babel/traverse": [ - "7.23.9" - ], - "@babel/types": [ - "7.23.9" - ], - "@jridgewell/gen-mapping": [ - "0.3.3" - ], - "@jridgewell/resolve-uri": [ - "3.1.2" - ], - "@jridgewell/set-array": [ - "1.1.2" - ], - "@jridgewell/sourcemap-codec": [ - "1.4.15" - ], - "@jridgewell/trace-mapping": [ - "0.3.22" - ], - "ansi-styles": [ - "3.2.1" - ], - "browserslist": [ - "4.23.0" - ], - "caniuse-lite": [ - "1.0.30001589" - ], - "chalk": [ - "2.4.2" - ], - "color-convert": [ - "1.9.3" - ], - "color-name": [ - "1.1.3" - ], - "convert-source-map": [ - "2.0.0" - ], - "debug": [ - "4.3.4_supports-color_8.1.1" - ], - "electron-to-chromium": [ - "1.4.681" - ], - "escalade": [ - "3.1.2" - ], - "escape-string-regexp": [ - "1.0.5" - ], - "gensync": [ - "1.0.0-beta.2" - ], - "globals": [ - "11.12.0" - ], - "has-flag": [ - "3.0.0", - "4.0.0" - ], - "js-tokens": [ - "4.0.0" - ], - "jsesc": [ - "0.5.0", - "2.5.2" - ], - "json5": [ - "2.2.3" - ], - "lru-cache": [ - "5.1.1" - ], - "ms": [ - "2.1.2" - ], - "node-releases": [ - "2.0.14" - ], - "picocolors": [ - "1.0.0" - ], - "regenerate": [ - "1.4.2" - ], - "regenerate-unicode-properties": [ - "10.1.1" - ], - "regexpu-core": [ - "5.3.2" - ], - "regjsparser": [ - "0.9.1" - ], - "semver": [ - "6.3.1" - ], - "supports-color": [ - "5.5.0", - "8.1.1" - ], - "to-fast-properties": [ - "2.0.0" - ], - "unicode-canonical-property-names-ecmascript": [ - "2.0.0" - ], - "unicode-match-property-ecmascript": [ - "2.0.0" - ], - "unicode-match-property-value-ecmascript": [ - "2.1.0" - ], - "unicode-property-aliases-ecmascript": [ - "2.1.0" - ], - "update-browserslist-db": [ - "1.0.13_browserslist_4.23.0" - ], - "yallist": [ - "3.1.1" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__at_types_eslint__8.56.3": { + "npm__string-width__5.1.2": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_eslint__8.56.3", - "package": "@types/eslint", - "version": "8.56.3", + "name": "aspect_rules_js~1.35.0~npm~npm__string-width__5.1.2", + "package": "string-width", + "version": "5.1.2", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==", - "url": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "url": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "commit": "", "patch_args": [], "patches": [], @@ -33335,22 +33474,18 @@ "generate_bzl_library_targets": false } }, - "npm__react__16.14.0": { + "npm__at_babel_plugin-syntax-optional-catch-binding__7.8.3__at_babel_core_7.23.9": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__react__16.14.0", - "package": "react", - "version": "16.14.0", + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-syntax-optional-catch-binding__7.8.3__at_babel_core_7.23.9", + "package": "@babel/plugin-syntax-optional-catch-binding", + "version": "7.8.3_at_babel_core_7.23.9", "root_package": "", "link_workspace": "", - "link_packages": { - "": [ - "react" - ] - }, - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "url": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "link_packages": {}, + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "url": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "commit": "", "patch_args": [], "patches": [], @@ -33364,239 +33499,18 @@ "generate_bzl_library_targets": false } }, - "npm__at_babel_plugin-transform-private-property-in-object__7.23.4__at_babel_core_7.23.9__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-transform-private-property-in-object__7.23.4__at_babel_core_7.23.9__links", - "package": "@babel/plugin-transform-private-property-in-object", - "version": "7.23.4_at_babel_core_7.23.9", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "@babel/core": "7.23.9", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-create-class-features-plugin": "7.23.10_at_babel_core_7.23.9", - "@babel/helper-plugin-utils": "7.22.5", - "@babel/plugin-syntax-private-property-in-object": "7.14.5_at_babel_core_7.23.9" - }, - "transitive_closure": { - "@ampproject/remapping": [ - "2.2.1" - ], - "@babel/code-frame": [ - "7.23.5" - ], - "@babel/compat-data": [ - "7.23.5" - ], - "@babel/core": [ - "7.23.9" - ], - "@babel/generator": [ - "7.23.6" - ], - "@babel/helper-annotate-as-pure": [ - "7.22.5" - ], - "@babel/helper-compilation-targets": [ - "7.23.6" - ], - "@babel/helper-create-class-features-plugin": [ - "7.23.10_at_babel_core_7.23.9" - ], - "@babel/helper-environment-visitor": [ - "7.22.20" - ], - "@babel/helper-function-name": [ - "7.23.0" - ], - "@babel/helper-hoist-variables": [ - "7.22.5" - ], - "@babel/helper-member-expression-to-functions": [ - "7.23.0" - ], - "@babel/helper-module-imports": [ - "7.22.15" - ], - "@babel/helper-module-transforms": [ - "7.23.3_at_babel_core_7.23.9" - ], - "@babel/helper-optimise-call-expression": [ - "7.22.5" - ], - "@babel/helper-plugin-utils": [ - "7.22.5" - ], - "@babel/helper-replace-supers": [ - "7.22.20_at_babel_core_7.23.9" - ], - "@babel/helper-simple-access": [ - "7.22.5" - ], - "@babel/helper-skip-transparent-expression-wrappers": [ - "7.22.5" - ], - "@babel/helper-split-export-declaration": [ - "7.22.6" - ], - "@babel/helper-string-parser": [ - "7.23.4" - ], - "@babel/helper-validator-identifier": [ - "7.22.20" - ], - "@babel/helper-validator-option": [ - "7.23.5" - ], - "@babel/helpers": [ - "7.23.9" - ], - "@babel/highlight": [ - "7.23.4" - ], - "@babel/parser": [ - "7.23.9" - ], - "@babel/plugin-syntax-private-property-in-object": [ - "7.14.5_at_babel_core_7.23.9" - ], - "@babel/plugin-transform-private-property-in-object": [ - "7.23.4_at_babel_core_7.23.9" - ], - "@babel/template": [ - "7.23.9" - ], - "@babel/traverse": [ - "7.23.9" - ], - "@babel/types": [ - "7.23.9" - ], - "@jridgewell/gen-mapping": [ - "0.3.3" - ], - "@jridgewell/resolve-uri": [ - "3.1.2" - ], - "@jridgewell/set-array": [ - "1.1.2" - ], - "@jridgewell/sourcemap-codec": [ - "1.4.15" - ], - "@jridgewell/trace-mapping": [ - "0.3.22" - ], - "ansi-styles": [ - "3.2.1" - ], - "browserslist": [ - "4.23.0" - ], - "caniuse-lite": [ - "1.0.30001589" - ], - "chalk": [ - "2.4.2" - ], - "color-convert": [ - "1.9.3" - ], - "color-name": [ - "1.1.3" - ], - "convert-source-map": [ - "2.0.0" - ], - "debug": [ - "4.3.4_supports-color_8.1.1" - ], - "electron-to-chromium": [ - "1.4.681" - ], - "escalade": [ - "3.1.2" - ], - "escape-string-regexp": [ - "1.0.5" - ], - "gensync": [ - "1.0.0-beta.2" - ], - "globals": [ - "11.12.0" - ], - "has-flag": [ - "3.0.0", - "4.0.0" - ], - "js-tokens": [ - "4.0.0" - ], - "jsesc": [ - "2.5.2" - ], - "json5": [ - "2.2.3" - ], - "lru-cache": [ - "5.1.1" - ], - "ms": [ - "2.1.2" - ], - "node-releases": [ - "2.0.14" - ], - "picocolors": [ - "1.0.0" - ], - "semver": [ - "6.3.1" - ], - "supports-color": [ - "5.5.0", - "8.1.1" - ], - "to-fast-properties": [ - "2.0.0" - ], - "update-browserslist-db": [ - "1.0.13_browserslist_4.23.0" - ], - "yallist": [ - "3.1.1" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, - "npm__react-router__5.3.4__react_16.14.0": { + "npm__at_webassemblyjs_helper-wasm-bytecode__1.11.6": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__react-router__5.3.4__react_16.14.0", - "package": "react-router", - "version": "5.3.4_react_16.14.0", + "name": "aspect_rules_js~1.35.0~npm~npm__at_webassemblyjs_helper-wasm-bytecode__1.11.6", + "package": "@webassemblyjs/helper-wasm-bytecode", + "version": "1.11.6", "root_package": "", "link_workspace": "", - "link_packages": { - "": [ - "react-router" - ] - }, - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "url": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "link_packages": {}, + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "url": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "commit": "", "patch_args": [], "patches": [], @@ -33610,20 +33524,25 @@ "generate_bzl_library_targets": false } }, - "npm__isexe__2.0.0__links": { + "npm__nth-check__2.1.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__isexe__2.0.0__links", - "package": "isexe", - "version": "2.0.0", + "name": "aspect_rules_js~1.35.0~npm~npm__nth-check__2.1.1__links", + "package": "nth-check", + "version": "2.1.1", "dev": false, "root_package": "", "link_packages": {}, - "deps": {}, + "deps": { + "boolbase": "1.0.0" + }, "transitive_closure": { - "isexe": [ - "2.0.0" + "boolbase": [ + "1.0.0" + ], + "nth-check": [ + "2.1.1" ] }, "lifecycle_build_target": false, @@ -33636,83 +33555,68 @@ ] } }, - "npm__p-retry__6.2.0__links": { + "npm__signal-exit__3.0.7": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", + "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__p-retry__6.2.0__links", - "package": "p-retry", - "version": "6.2.0", - "dev": false, + "name": "aspect_rules_js~1.35.0~npm~npm__signal-exit__3.0.7", + "package": "signal-exit", + "version": "3.0.7", "root_package": "", + "link_workspace": "", "link_packages": {}, - "deps": { - "@types/retry": "0.12.2", - "is-network-error": "1.0.1", - "retry": "0.13.1" - }, - "transitive_closure": { - "@types/retry": [ - "0.12.2" - ], - "is-network-error": [ - "1.0.1" - ], - "p-retry": [ - "6.2.0" - ], - "retry": [ - "0.13.1" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "url": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false } }, - "npm__array-flatten__1.1.1__links": { + "npm__keyv__4.5.4": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", + "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__array-flatten__1.1.1__links", - "package": "array-flatten", - "version": "1.1.1", - "dev": false, + "name": "aspect_rules_js~1.35.0~npm~npm__keyv__4.5.4", + "package": "keyv", + "version": "4.5.4", "root_package": "", + "link_workspace": "", "link_packages": {}, - "deps": {}, - "transitive_closure": { - "array-flatten": [ - "1.1.1" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "url": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false } }, - "npm__at_babel_plugin-transform-private-methods__7.23.3__at_babel_core_7.23.9": { + "npm__at_types_serve-index__1.9.4": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-transform-private-methods__7.23.3__at_babel_core_7.23.9", - "package": "@babel/plugin-transform-private-methods", - "version": "7.23.3_at_babel_core_7.23.9", + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_serve-index__1.9.4", + "package": "@types/serve-index", + "version": "1.9.4", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", - "url": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "url": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "commit": "", "patch_args": [], "patches": [], @@ -33726,44 +33630,47 @@ "generate_bzl_library_targets": false } }, - "npm__argparse__2.0.1__links": { + "npm__shebang-command__2.0.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", + "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__argparse__2.0.1__links", - "package": "argparse", - "version": "2.0.1", - "dev": false, + "name": "aspect_rules_js~1.35.0~npm~npm__shebang-command__2.0.0", + "package": "shebang-command", + "version": "2.0.0", "root_package": "", + "link_workspace": "", "link_packages": {}, - "deps": {}, - "transitive_closure": { - "argparse": [ - "2.0.1" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "url": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false } }, - "npm__relateurl__0.2.7": { + "npm__at_types_react-dom__16.9.24": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__relateurl__0.2.7", - "package": "relateurl", - "version": "0.2.7", + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_react-dom__16.9.24", + "package": "@types/react-dom", + "version": "16.9.24", "root_package": "", "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "url": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "link_packages": { + "": [ + "@types/react-dom" + ] + }, + "integrity": "sha512-Gcmq2JTDheyWn/1eteqyzzWKSqDjYU6KYsIvH7thb7CR5OYInAWOX+7WnKf6PaU/cbdOc4szJItcDEJO7UGmfA==", + "url": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.24.tgz", "commit": "", "patch_args": [], "patches": [], @@ -33777,32 +33684,29 @@ "generate_bzl_library_targets": false } }, - "npm__debug__4.3.4__supports-color_8.1.1__links": { + "npm__launch-editor__2.6.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__debug__4.3.4__supports-color_8.1.1__links", - "package": "debug", - "version": "4.3.4_supports-color_8.1.1", + "name": "aspect_rules_js~1.35.0~npm~npm__launch-editor__2.6.1__links", + "package": "launch-editor", + "version": "2.6.1", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "ms": "2.1.2", - "supports-color": "8.1.1" + "picocolors": "1.0.0", + "shell-quote": "1.8.1" }, "transitive_closure": { - "debug": [ - "4.3.4_supports-color_8.1.1" - ], - "has-flag": [ - "4.0.0" + "launch-editor": [ + "2.6.1" ], - "ms": [ - "2.1.2" + "picocolors": [ + "1.0.0" ], - "supports-color": [ - "8.1.1" + "shell-quote": [ + "1.8.1" ] }, "lifecycle_build_target": false, @@ -33815,20 +33719,71 @@ ] } }, - "npm__get-caller-file__2.0.5__links": { + "npm__at_babel_helper-function-name__7.23.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__get-caller-file__2.0.5__links", - "package": "get-caller-file", - "version": "2.0.5", + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_helper-function-name__7.23.0__links", + "package": "@babel/helper-function-name", + "version": "7.23.0", "dev": false, "root_package": "", "link_packages": {}, - "deps": {}, + "deps": { + "@babel/template": "7.23.9", + "@babel/types": "7.23.9" + }, "transitive_closure": { - "get-caller-file": [ - "2.0.5" + "@babel/code-frame": [ + "7.23.5" + ], + "@babel/helper-function-name": [ + "7.23.0" + ], + "@babel/helper-string-parser": [ + "7.23.4" + ], + "@babel/helper-validator-identifier": [ + "7.22.20" + ], + "@babel/highlight": [ + "7.23.4" + ], + "@babel/parser": [ + "7.23.9" + ], + "@babel/template": [ + "7.23.9" + ], + "@babel/types": [ + "7.23.9" + ], + "ansi-styles": [ + "3.2.1" + ], + "chalk": [ + "2.4.2" + ], + "color-convert": [ + "1.9.3" + ], + "color-name": [ + "1.1.3" + ], + "escape-string-regexp": [ + "1.0.5" + ], + "has-flag": [ + "3.0.0" + ], + "js-tokens": [ + "4.0.0" + ], + "supports-color": [ + "5.5.0" + ], + "to-fast-properties": [ + "2.0.0" ] }, "lifecycle_build_target": false, @@ -33841,62 +33796,50 @@ ] } }, - "npm__http2-wrapper__1.0.3__links": { + "npm__hpack.js__2.1.6": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", + "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__http2-wrapper__1.0.3__links", - "package": "http2-wrapper", - "version": "1.0.3", - "dev": false, + "name": "aspect_rules_js~1.35.0~npm~npm__hpack.js__2.1.6", + "package": "hpack.js", + "version": "2.1.6", "root_package": "", + "link_workspace": "", "link_packages": {}, - "deps": { - "quick-lru": "5.1.1", - "resolve-alpn": "1.2.1" - }, - "transitive_closure": { - "http2-wrapper": [ - "1.0.3" - ], - "quick-lru": [ - "5.1.1" - ], - "resolve-alpn": [ - "1.2.1" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "url": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false } }, - "npm__boolean__3.2.0__links": { + "npm__he__1.1.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__boolean__3.2.0__links", - "package": "boolean", - "version": "3.2.0", + "name": "aspect_rules_js~1.35.0~npm~npm__he__1.1.1__links", + "package": "he", + "version": "1.1.1", "dev": false, "root_package": "", "link_packages": {}, "deps": {}, "transitive_closure": { - "boolean": [ - "3.2.0" + "he": [ + "1.1.1" ] }, - "lifecycle_build_target": true, + "lifecycle_build_target": false, "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [ - "no-sandbox" - ], + "lifecycle_hooks_execution_requirements": [], "bins": {}, "npm_translate_lock_repo": "npm", "package_visibility": [ @@ -33904,51 +33847,44 @@ ] } }, - "npm__history__4.10.1__links": { + "npm__at_types_connect-history-api-fallback__1.5.4__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__history__4.10.1__links", - "package": "history", - "version": "4.10.1", + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_connect-history-api-fallback__1.5.4__links", + "package": "@types/connect-history-api-fallback", + "version": "1.5.4", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "@babel/runtime": "7.23.9", - "loose-envify": "1.4.0", - "resolve-pathname": "3.0.0", - "tiny-invariant": "1.3.2", - "tiny-warning": "1.0.3", - "value-equal": "1.0.1" + "@types/express-serve-static-core": "4.17.43", + "@types/node": "20.11.20" }, "transitive_closure": { - "@babel/runtime": [ - "7.23.9" - ], - "history": [ - "4.10.1" + "@types/connect-history-api-fallback": [ + "1.5.4" ], - "js-tokens": [ - "4.0.0" + "@types/express-serve-static-core": [ + "4.17.43" ], - "loose-envify": [ - "1.4.0" + "@types/mime": [ + "1.3.5" ], - "regenerator-runtime": [ - "0.14.1" + "@types/node": [ + "20.11.20" ], - "resolve-pathname": [ - "3.0.0" + "@types/qs": [ + "6.9.11" ], - "tiny-invariant": [ - "1.3.2" + "@types/range-parser": [ + "1.2.7" ], - "tiny-warning": [ - "1.0.3" + "@types/send": [ + "0.17.4" ], - "value-equal": [ - "1.0.1" + "undici-types": [ + "5.26.5" ] }, "lifecycle_build_target": false, @@ -33961,52 +33897,45 @@ ] } }, - "npm__vscode-test__0.4.3__links": { + "npm__follow-redirects__1.15.6": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__follow-redirects__1.15.6", + "package": "follow-redirects", + "version": "1.15.6", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "url": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__tapable__2.2.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__vscode-test__0.4.3__links", - "package": "vscode-test", - "version": "0.4.3", + "name": "aspect_rules_js~1.35.0~npm~npm__tapable__2.2.1__links", + "package": "tapable", + "version": "2.2.1", "dev": false, "root_package": "", "link_packages": {}, - "deps": { - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.4" - }, + "deps": {}, "transitive_closure": { - "agent-base": [ - "4.3.0" - ], - "debug": [ - "3.1.0_supports-color_5.4.0", - "3.2.7" - ], - "es6-promise": [ - "4.2.8" - ], - "es6-promisify": [ - "5.0.0" - ], - "has-flag": [ - "3.0.0" - ], - "http-proxy-agent": [ - "2.1.0" - ], - "https-proxy-agent": [ - "2.2.4" - ], - "ms": [ - "2.0.0", - "2.1.3" - ], - "supports-color": [ - "5.4.0" - ], - "vscode-test": [ - "0.4.3" + "tapable": [ + "2.2.1" ] }, "lifecycle_build_target": false, @@ -34019,18 +33948,18 @@ ] } }, - "npm__debug__4.3.4__supports-color_8.1.1": { + "npm__sprintf-js__1.1.3": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__debug__4.3.4__supports-color_8.1.1", - "package": "debug", - "version": "4.3.4_supports-color_8.1.1", + "name": "aspect_rules_js~1.35.0~npm~npm__sprintf-js__1.1.3", + "package": "sprintf-js", + "version": "1.1.3", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "url": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "url": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "commit": "", "patch_args": [], "patches": [], @@ -34039,23 +33968,52 @@ "npm_auth_basic": "", "npm_auth_username": "", "npm_auth_password": "", - "lifecycle_hooks": [], + "lifecycle_hooks": [ + "preinstall", + "install", + "postinstall" + ], "extra_build_content": "", "generate_bzl_library_targets": false } }, - "npm__node-releases__2.0.14": { + "npm__ansi-regex__6.0.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__node-releases__2.0.14", - "package": "node-releases", - "version": "2.0.14", + "name": "aspect_rules_js~1.35.0~npm~npm__ansi-regex__6.0.1", + "package": "ansi-regex", + "version": "6.0.1", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__at_electron_get__2.0.3": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_electron_get__2.0.3", + "package": "@electron/get", + "version": "2.0.3", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "url": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "url": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", "commit": "", "patch_args": [], "patches": [], @@ -34069,60 +34027,27 @@ "generate_bzl_library_targets": false } }, - "npm__at_babel_generator__7.23.6__links": { + "npm__es6-error__4.1.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_generator__7.23.6__links", - "package": "@babel/generator", - "version": "7.23.6", + "name": "aspect_rules_js~1.35.0~npm~npm__es6-error__4.1.1__links", + "package": "es6-error", + "version": "4.1.1", "dev": false, "root_package": "", "link_packages": {}, - "deps": { - "@babel/types": "7.23.9", - "@jridgewell/gen-mapping": "0.3.3", - "@jridgewell/trace-mapping": "0.3.22", - "jsesc": "2.5.2" - }, + "deps": {}, "transitive_closure": { - "@babel/generator": [ - "7.23.6" - ], - "@babel/helper-string-parser": [ - "7.23.4" - ], - "@babel/helper-validator-identifier": [ - "7.22.20" - ], - "@babel/types": [ - "7.23.9" - ], - "@jridgewell/gen-mapping": [ - "0.3.3" - ], - "@jridgewell/resolve-uri": [ - "3.1.2" - ], - "@jridgewell/set-array": [ - "1.1.2" - ], - "@jridgewell/sourcemap-codec": [ - "1.4.15" - ], - "@jridgewell/trace-mapping": [ - "0.3.22" - ], - "jsesc": [ - "2.5.2" - ], - "to-fast-properties": [ - "2.0.0" + "es6-error": [ + "4.1.1" ] }, - "lifecycle_build_target": false, + "lifecycle_build_target": true, "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], + "lifecycle_hooks_execution_requirements": [ + "no-sandbox" + ], "bins": {}, "npm_translate_lock_repo": "npm", "package_visibility": [ @@ -34130,468 +34055,35 @@ ] } }, - "npm__obuf__1.1.2": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__obuf__1.1.2", - "package": "obuf", - "version": "1.1.2", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "url": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, - "npm__terser-webpack-plugin__5.3.10__webpack_5.90.3__links": { + "npm__call-bind__1.0.7__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__terser-webpack-plugin__5.3.10__webpack_5.90.3__links", - "package": "terser-webpack-plugin", - "version": "5.3.10_webpack_5.90.3", + "name": "aspect_rules_js~1.35.0~npm~npm__call-bind__1.0.7__links", + "package": "call-bind", + "version": "1.0.7", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "@jridgewell/trace-mapping": "0.3.22", - "jest-worker": "27.5.1", - "schema-utils": "3.3.0", - "serialize-javascript": "6.0.2", - "terser": "5.28.1", - "webpack": "5.90.3_webpack-cli_5.1.4" + "es-define-property": "1.0.0", + "es-errors": "1.3.0", + "function-bind": "1.1.2", + "get-intrinsic": "1.2.4", + "set-function-length": "1.2.1" }, "transitive_closure": { - "@discoveryjs/json-ext": [ - "0.5.7" - ], - "@isaacs/cliui": [ - "8.0.2" - ], - "@jridgewell/gen-mapping": [ - "0.3.3" - ], - "@jridgewell/resolve-uri": [ - "3.1.2" - ], - "@jridgewell/set-array": [ - "1.1.2" - ], - "@jridgewell/source-map": [ - "0.3.5" - ], - "@jridgewell/sourcemap-codec": [ - "1.4.15" - ], - "@jridgewell/trace-mapping": [ - "0.3.22" - ], - "@leichtgewicht/ip-codec": [ - "2.0.4" - ], - "@pkgjs/parseargs": [ - "0.11.0" - ], - "@types/body-parser": [ - "1.19.5" - ], - "@types/bonjour": [ - "3.5.13" - ], - "@types/connect": [ - "3.4.38" - ], - "@types/connect-history-api-fallback": [ - "1.5.4" - ], - "@types/eslint": [ - "8.56.3" - ], - "@types/eslint-scope": [ - "3.7.7" - ], - "@types/estree": [ - "1.0.5" - ], - "@types/express": [ - "4.17.21" - ], - "@types/express-serve-static-core": [ - "4.17.43" - ], - "@types/http-errors": [ - "2.0.4" - ], - "@types/http-proxy": [ - "1.17.14" - ], - "@types/json-schema": [ - "7.0.15" - ], - "@types/mime": [ - "1.3.5", - "3.0.4" - ], - "@types/node": [ - "20.11.20" - ], - "@types/node-forge": [ - "1.3.11" - ], - "@types/qs": [ - "6.9.11" - ], - "@types/range-parser": [ - "1.2.7" - ], - "@types/retry": [ - "0.12.2" - ], - "@types/send": [ - "0.17.4" - ], - "@types/serve-index": [ - "1.9.4" - ], - "@types/serve-static": [ - "1.15.5" - ], - "@types/sockjs": [ - "0.3.36" - ], - "@types/ws": [ - "8.5.10" - ], - "@webassemblyjs/ast": [ - "1.11.6" - ], - "@webassemblyjs/floating-point-hex-parser": [ - "1.11.6" - ], - "@webassemblyjs/helper-api-error": [ - "1.11.6" - ], - "@webassemblyjs/helper-buffer": [ - "1.11.6" - ], - "@webassemblyjs/helper-numbers": [ - "1.11.6" - ], - "@webassemblyjs/helper-wasm-bytecode": [ - "1.11.6" - ], - "@webassemblyjs/helper-wasm-section": [ - "1.11.6" - ], - "@webassemblyjs/ieee754": [ - "1.11.6" - ], - "@webassemblyjs/leb128": [ - "1.11.6" - ], - "@webassemblyjs/utf8": [ - "1.11.6" - ], - "@webassemblyjs/wasm-edit": [ - "1.11.6" - ], - "@webassemblyjs/wasm-gen": [ - "1.11.6" - ], - "@webassemblyjs/wasm-opt": [ - "1.11.6" - ], - "@webassemblyjs/wasm-parser": [ - "1.11.6" - ], - "@webassemblyjs/wast-printer": [ - "1.11.6" - ], - "@webpack-cli/configtest": [ - "2.1.1_-359619668" - ], - "@webpack-cli/info": [ - "2.0.2_-359619668" - ], - "@webpack-cli/serve": [ - "2.0.5_-1025266409" - ], - "@xtuc/ieee754": [ - "1.2.0" - ], - "@xtuc/long": [ - "4.2.2" - ], - "accepts": [ - "1.3.8" - ], - "acorn": [ - "8.11.3" - ], - "acorn-import-assertions": [ - "1.9.0_acorn_8.11.3" - ], - "ajv": [ - "6.12.6", - "8.12.0" - ], - "ajv-formats": [ - "2.1.1_ajv_8.12.0" - ], - "ajv-keywords": [ - "3.5.2_ajv_6.12.6", - "5.1.0_ajv_8.12.0" - ], - "ansi-html-community": [ - "0.0.8" - ], - "ansi-regex": [ - "5.0.1", - "6.0.1" - ], - "ansi-styles": [ - "4.3.0", - "6.2.1" - ], - "anymatch": [ - "3.1.3" - ], - "array-flatten": [ - "1.1.1" - ], - "balanced-match": [ - "1.0.2" - ], - "batch": [ - "0.6.1" - ], - "binary-extensions": [ - "2.2.0" - ], - "body-parser": [ - "1.20.1" - ], - "bonjour-service": [ - "1.2.1" - ], - "brace-expansion": [ - "2.0.1" - ], - "braces": [ - "3.0.2" - ], - "browserslist": [ - "4.23.0" - ], - "buffer-from": [ - "1.1.2" - ], - "bundle-name": [ - "4.1.0" - ], - "bytes": [ - "3.0.0", - "3.1.2" - ], "call-bind": [ "1.0.7" ], - "caniuse-lite": [ - "1.0.30001589" - ], - "chokidar": [ - "3.6.0" - ], - "chrome-trace-event": [ - "1.0.3" - ], - "clone-deep": [ - "4.0.1" - ], - "color-convert": [ - "2.0.1" - ], - "color-name": [ - "1.1.4" - ], - "colorette": [ - "2.0.20" - ], - "commander": [ - "10.0.1", - "2.20.3" - ], - "compressible": [ - "2.0.18" - ], - "compression": [ - "1.7.4" - ], - "connect-history-api-fallback": [ - "2.0.0" - ], - "content-disposition": [ - "0.5.4" - ], - "content-type": [ - "1.0.5" - ], - "cookie": [ - "0.5.0" - ], - "cookie-signature": [ - "1.0.6" - ], - "core-util-is": [ - "1.0.3" - ], - "cross-spawn": [ - "7.0.3" - ], - "debug": [ - "2.6.9", - "4.3.4_supports-color_8.1.1" - ], - "default-browser": [ - "5.2.1" - ], - "default-browser-id": [ - "5.0.0" - ], - "default-gateway": [ - "6.0.3" - ], "define-data-property": [ "1.1.4" ], - "define-lazy-prop": [ - "3.0.0" - ], - "depd": [ - "1.1.2", - "2.0.0" - ], - "destroy": [ - "1.2.0" - ], - "detect-node": [ - "2.1.0" - ], - "dns-packet": [ - "5.6.1" - ], - "eastasianwidth": [ - "0.2.0" - ], - "ee-first": [ - "1.1.1" - ], - "electron-to-chromium": [ - "1.4.681" - ], - "emoji-regex": [ - "8.0.0", - "9.2.2" - ], - "encodeurl": [ - "1.0.2" - ], - "enhanced-resolve": [ - "5.15.0" - ], - "envinfo": [ - "7.11.1" - ], "es-define-property": [ "1.0.0" ], - "es-errors": [ - "1.3.0" - ], - "es-module-lexer": [ - "1.4.1" - ], - "escalade": [ - "3.1.2" - ], - "escape-html": [ - "1.0.3" - ], - "eslint-scope": [ - "5.1.1" - ], - "esrecurse": [ - "4.3.0" - ], - "estraverse": [ - "4.3.0", - "5.3.0" - ], - "etag": [ - "1.8.1" - ], - "eventemitter3": [ - "4.0.7" - ], - "events": [ - "3.3.0" - ], - "execa": [ - "5.1.1" - ], - "express": [ - "4.18.2" - ], - "fast-deep-equal": [ - "3.1.3" - ], - "fast-json-stable-stringify": [ - "2.1.0" - ], - "fastest-levenshtein": [ - "1.0.16" - ], - "faye-websocket": [ - "0.11.4" - ], - "fill-range": [ - "7.0.1" - ], - "finalhandler": [ - "1.2.0" - ], - "find-up": [ - "4.1.0" - ], - "flat": [ - "5.0.2" - ], - "follow-redirects": [ - "1.15.5" - ], - "foreground-child": [ - "3.1.1" - ], - "forwarded": [ - "0.2.0" - ], - "fresh": [ - "0.5.2" - ], - "fsevents": [ - "2.3.3" + "es-errors": [ + "1.3.0" ], "function-bind": [ "1.1.2" @@ -34599,30 +34091,9 @@ "get-intrinsic": [ "1.2.4" ], - "get-stream": [ - "6.0.1" - ], - "glob": [ - "10.3.10" - ], - "glob-parent": [ - "5.1.2" - ], - "glob-to-regexp": [ - "0.4.1" - ], "gopd": [ "1.0.1" ], - "graceful-fs": [ - "4.2.11" - ], - "handle-thing": [ - "2.0.1" - ], - "has-flag": [ - "4.0.0" - ], "has-property-descriptors": [ "1.0.2" ], @@ -34635,486 +34106,1015 @@ "hasown": [ "2.0.1" ], - "hpack.js": [ - "2.1.6" - ], - "html-entities": [ - "2.4.0" - ], - "http-deceiver": [ - "1.2.7" - ], - "http-errors": [ - "1.6.3", - "2.0.0" + "set-function-length": [ + "1.2.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__http-errors__1.6.3": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__http-errors__1.6.3", + "package": "http-errors", + "version": "1.6.3", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "url": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__require-from-string__2.0.2": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__require-from-string__2.0.2", + "package": "require-from-string", + "version": "2.0.2", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "url": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__brace-expansion__2.0.1": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__brace-expansion__2.0.1", + "package": "brace-expansion", + "version": "2.0.1", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__at_babel_helper-create-regexp-features-plugin__7.22.15__at_babel_core_7.23.9__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_helper-create-regexp-features-plugin__7.22.15__at_babel_core_7.23.9__links", + "package": "@babel/helper-create-regexp-features-plugin", + "version": "7.22.15_at_babel_core_7.23.9", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "@babel/core": "7.23.9", + "@babel/helper-annotate-as-pure": "7.22.5", + "regexpu-core": "5.3.2", + "semver": "6.3.1" + }, + "transitive_closure": { + "@ampproject/remapping": [ + "2.2.1" ], - "http-parser-js": [ - "0.5.8" + "@babel/code-frame": [ + "7.23.5" ], - "http-proxy": [ - "1.18.1" + "@babel/compat-data": [ + "7.23.5" ], - "http-proxy-middleware": [ - "2.0.6_at_types_express_4.17.21" + "@babel/core": [ + "7.23.9" ], - "human-signals": [ - "2.1.0" + "@babel/generator": [ + "7.23.6" ], - "iconv-lite": [ - "0.4.24" + "@babel/helper-annotate-as-pure": [ + "7.22.5" ], - "import-local": [ - "3.1.0" + "@babel/helper-compilation-targets": [ + "7.23.6" ], - "inherits": [ - "2.0.3", - "2.0.4" + "@babel/helper-create-regexp-features-plugin": [ + "7.22.15_at_babel_core_7.23.9" ], - "interpret": [ - "3.1.1" + "@babel/helper-environment-visitor": [ + "7.22.20" ], - "ipaddr.js": [ - "1.9.1", - "2.1.0" + "@babel/helper-function-name": [ + "7.23.0" ], - "is-binary-path": [ - "2.1.0" + "@babel/helper-hoist-variables": [ + "7.22.5" ], - "is-core-module": [ - "2.13.1" + "@babel/helper-module-imports": [ + "7.22.15" ], - "is-docker": [ - "3.0.0" + "@babel/helper-module-transforms": [ + "7.23.3_at_babel_core_7.23.9" ], - "is-extglob": [ - "2.1.1" + "@babel/helper-simple-access": [ + "7.22.5" ], - "is-fullwidth-code-point": [ - "3.0.0" + "@babel/helper-split-export-declaration": [ + "7.22.6" ], - "is-glob": [ - "4.0.3" + "@babel/helper-string-parser": [ + "7.23.4" ], - "is-inside-container": [ - "1.0.0" + "@babel/helper-validator-identifier": [ + "7.22.20" ], - "is-network-error": [ - "1.0.1" + "@babel/helper-validator-option": [ + "7.23.5" ], - "is-number": [ - "7.0.0" + "@babel/helpers": [ + "7.23.9" ], - "is-plain-obj": [ - "3.0.0" + "@babel/highlight": [ + "7.23.4" ], - "is-plain-object": [ - "2.0.4" + "@babel/parser": [ + "7.23.9" ], - "is-stream": [ - "2.0.1" + "@babel/regjsgen": [ + "0.8.0" ], - "is-wsl": [ - "3.1.0" + "@babel/template": [ + "7.23.9" ], - "isarray": [ - "1.0.0" + "@babel/traverse": [ + "7.23.9" ], - "isexe": [ - "2.0.0" + "@babel/types": [ + "7.23.9" ], - "isobject": [ - "3.0.1" + "@jridgewell/gen-mapping": [ + "0.3.3" ], - "jackspeak": [ - "2.3.6" + "@jridgewell/resolve-uri": [ + "3.1.2" ], - "jest-worker": [ - "27.5.1" + "@jridgewell/set-array": [ + "1.1.2" ], - "json-parse-even-better-errors": [ - "2.3.1" + "@jridgewell/sourcemap-codec": [ + "1.4.15" ], - "json-schema-traverse": [ - "0.4.1", - "1.0.0" + "@jridgewell/trace-mapping": [ + "0.3.22" ], - "kind-of": [ - "6.0.3" + "ansi-styles": [ + "3.2.1" ], - "launch-editor": [ - "2.6.1" + "browserslist": [ + "4.23.0" ], - "loader-runner": [ - "4.3.0" + "caniuse-lite": [ + "1.0.30001589" ], - "locate-path": [ - "5.0.0" + "chalk": [ + "2.4.2" ], - "lru-cache": [ - "10.2.0" + "color-convert": [ + "1.9.3" ], - "media-typer": [ - "0.3.0" + "color-name": [ + "1.1.3" ], - "memfs": [ - "4.7.7" + "convert-source-map": [ + "2.0.0" ], - "merge-descriptors": [ - "1.0.1" + "debug": [ + "4.3.4_supports-color_8.1.1" ], - "merge-stream": [ - "2.0.0" + "electron-to-chromium": [ + "1.4.681" ], - "methods": [ - "1.1.2" + "escalade": [ + "3.1.2" ], - "micromatch": [ - "4.0.5" + "escape-string-regexp": [ + "1.0.5" ], - "mime": [ - "1.6.0" + "gensync": [ + "1.0.0-beta.2" ], - "mime-db": [ - "1.52.0" + "globals": [ + "11.12.0" ], - "mime-types": [ - "2.1.35" + "has-flag": [ + "3.0.0", + "4.0.0" ], - "mimic-fn": [ - "2.1.0" + "js-tokens": [ + "4.0.0" ], - "minimalistic-assert": [ - "1.0.1" + "jsesc": [ + "0.5.0", + "2.5.2" ], - "minimatch": [ - "9.0.3" + "json5": [ + "2.2.3" ], - "minipass": [ - "7.0.4" + "lru-cache": [ + "5.1.1" ], "ms": [ - "2.0.0", - "2.1.2", - "2.1.3" + "2.1.2" ], - "multicast-dns": [ - "7.2.5" + "node-releases": [ + "2.0.14" ], - "negotiator": [ - "0.6.3" + "picocolors": [ + "1.0.0" ], - "neo-async": [ - "2.6.2" + "regenerate": [ + "1.4.2" ], - "node-forge": [ - "1.3.1" + "regenerate-unicode-properties": [ + "10.1.1" ], - "node-releases": [ - "2.0.14" + "regexpu-core": [ + "5.3.2" ], - "normalize-path": [ - "3.0.0" + "regjsparser": [ + "0.9.1" ], - "npm-run-path": [ - "4.0.1" + "semver": [ + "6.3.1" ], - "object-inspect": [ - "1.13.1" + "supports-color": [ + "5.5.0", + "8.1.1" ], - "obuf": [ - "1.1.2" + "to-fast-properties": [ + "2.0.0" ], - "on-finished": [ - "2.4.1" + "unicode-canonical-property-names-ecmascript": [ + "2.0.0" ], - "on-headers": [ - "1.0.2" + "unicode-match-property-ecmascript": [ + "2.0.0" ], - "onetime": [ - "5.1.2" + "unicode-match-property-value-ecmascript": [ + "2.1.0" ], - "open": [ - "10.0.3" + "unicode-property-aliases-ecmascript": [ + "2.1.0" ], - "p-limit": [ - "2.3.0" + "update-browserslist-db": [ + "1.0.13_browserslist_4.23.0" ], - "p-locate": [ - "4.1.0" + "yallist": [ + "3.1.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__at_types_eslint__8.56.3": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_eslint__8.56.3", + "package": "@types/eslint", + "version": "8.56.3", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==", + "url": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__react__16.14.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__react__16.14.0", + "package": "react", + "version": "16.14.0", + "root_package": "", + "link_workspace": "", + "link_packages": { + "": [ + "react" + ] + }, + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "url": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__at_babel_plugin-transform-private-property-in-object__7.23.4__at_babel_core_7.23.9__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-transform-private-property-in-object__7.23.4__at_babel_core_7.23.9__links", + "package": "@babel/plugin-transform-private-property-in-object", + "version": "7.23.4_at_babel_core_7.23.9", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "@babel/core": "7.23.9", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-create-class-features-plugin": "7.23.10_at_babel_core_7.23.9", + "@babel/helper-plugin-utils": "7.22.5", + "@babel/plugin-syntax-private-property-in-object": "7.14.5_at_babel_core_7.23.9" + }, + "transitive_closure": { + "@ampproject/remapping": [ + "2.2.1" ], - "p-retry": [ - "6.2.0" + "@babel/code-frame": [ + "7.23.5" ], - "p-try": [ - "2.2.0" + "@babel/compat-data": [ + "7.23.5" ], - "parseurl": [ - "1.3.3" + "@babel/core": [ + "7.23.9" ], - "path-exists": [ - "4.0.0" + "@babel/generator": [ + "7.23.6" ], - "path-key": [ - "3.1.1" + "@babel/helper-annotate-as-pure": [ + "7.22.5" ], - "path-parse": [ - "1.0.7" + "@babel/helper-compilation-targets": [ + "7.23.6" ], - "path-scurry": [ - "1.10.1" + "@babel/helper-create-class-features-plugin": [ + "7.23.10_at_babel_core_7.23.9" ], - "path-to-regexp": [ - "0.1.7" + "@babel/helper-environment-visitor": [ + "7.22.20" ], - "picocolors": [ - "1.0.0" + "@babel/helper-function-name": [ + "7.23.0" ], - "picomatch": [ - "2.3.1" + "@babel/helper-hoist-variables": [ + "7.22.5" ], - "pkg-dir": [ - "4.2.0" + "@babel/helper-member-expression-to-functions": [ + "7.23.0" ], - "process-nextick-args": [ - "2.0.1" + "@babel/helper-module-imports": [ + "7.22.15" ], - "proxy-addr": [ - "2.0.7" + "@babel/helper-module-transforms": [ + "7.23.3_at_babel_core_7.23.9" ], - "punycode": [ - "2.3.1" + "@babel/helper-optimise-call-expression": [ + "7.22.5" ], - "qs": [ - "6.11.0" + "@babel/helper-plugin-utils": [ + "7.22.5" ], - "randombytes": [ - "2.1.0" + "@babel/helper-replace-supers": [ + "7.22.20_at_babel_core_7.23.9" ], - "range-parser": [ - "1.2.1" + "@babel/helper-simple-access": [ + "7.22.5" ], - "raw-body": [ - "2.5.1" + "@babel/helper-skip-transparent-expression-wrappers": [ + "7.22.5" ], - "readable-stream": [ - "2.3.8", - "3.6.2" + "@babel/helper-split-export-declaration": [ + "7.22.6" ], - "readdirp": [ - "3.6.0" + "@babel/helper-string-parser": [ + "7.23.4" ], - "rechoir": [ - "0.8.0" + "@babel/helper-validator-identifier": [ + "7.22.20" ], - "require-from-string": [ - "2.0.2" + "@babel/helper-validator-option": [ + "7.23.5" ], - "requires-port": [ - "1.0.0" + "@babel/helpers": [ + "7.23.9" ], - "resolve": [ - "1.22.8" + "@babel/highlight": [ + "7.23.4" ], - "resolve-cwd": [ - "3.0.0" + "@babel/parser": [ + "7.23.9" ], - "resolve-from": [ - "5.0.0" + "@babel/plugin-syntax-private-property-in-object": [ + "7.14.5_at_babel_core_7.23.9" ], - "retry": [ - "0.13.1" + "@babel/plugin-transform-private-property-in-object": [ + "7.23.4_at_babel_core_7.23.9" ], - "rimraf": [ - "5.0.5" + "@babel/template": [ + "7.23.9" ], - "run-applescript": [ - "7.0.0" + "@babel/traverse": [ + "7.23.9" ], - "safe-buffer": [ - "5.1.2", - "5.2.1" + "@babel/types": [ + "7.23.9" ], - "safer-buffer": [ - "2.1.2" + "@jridgewell/gen-mapping": [ + "0.3.3" ], - "schema-utils": [ - "3.3.0", - "4.2.0" + "@jridgewell/resolve-uri": [ + "3.1.2" ], - "select-hose": [ - "2.0.0" + "@jridgewell/set-array": [ + "1.1.2" ], - "selfsigned": [ - "2.4.1" + "@jridgewell/sourcemap-codec": [ + "1.4.15" ], - "send": [ - "0.18.0" + "@jridgewell/trace-mapping": [ + "0.3.22" ], - "serialize-javascript": [ - "6.0.2" + "ansi-styles": [ + "3.2.1" ], - "serve-index": [ - "1.9.1" + "browserslist": [ + "4.23.0" ], - "serve-static": [ - "1.15.0" + "caniuse-lite": [ + "1.0.30001589" ], - "set-function-length": [ - "1.2.1" + "chalk": [ + "2.4.2" ], - "setprototypeof": [ - "1.1.0", - "1.2.0" + "color-convert": [ + "1.9.3" ], - "shallow-clone": [ - "3.0.1" + "color-name": [ + "1.1.3" ], - "shebang-command": [ + "convert-source-map": [ "2.0.0" ], - "shebang-regex": [ - "3.0.0" + "debug": [ + "4.3.4_supports-color_8.1.1" ], - "shell-quote": [ - "1.8.1" + "electron-to-chromium": [ + "1.4.681" ], - "side-channel": [ + "escalade": [ + "3.1.2" + ], + "escape-string-regexp": [ "1.0.5" ], - "signal-exit": [ - "3.0.7", - "4.1.0" + "gensync": [ + "1.0.0-beta.2" ], - "sockjs": [ - "0.3.24" + "globals": [ + "11.12.0" ], - "source-map": [ - "0.6.1" + "has-flag": [ + "3.0.0", + "4.0.0" ], - "source-map-support": [ - "0.5.21" + "js-tokens": [ + "4.0.0" ], - "spdy": [ - "4.0.2" + "jsesc": [ + "2.5.2" ], - "spdy-transport": [ - "3.0.0" + "json5": [ + "2.2.3" ], - "statuses": [ - "1.5.0", - "2.0.1" + "lru-cache": [ + "5.1.1" ], - "string-width": [ - "4.2.3", - "5.1.2" + "ms": [ + "2.1.2" ], - "string_decoder": [ - "1.1.1", - "1.3.0" + "node-releases": [ + "2.0.14" ], - "strip-ansi": [ - "6.0.1", - "7.1.0" + "picocolors": [ + "1.0.0" ], - "strip-final-newline": [ - "2.0.0" + "semver": [ + "6.3.1" ], "supports-color": [ + "5.5.0", "8.1.1" ], - "supports-preserve-symlinks-flag": [ - "1.0.0" - ], - "tapable": [ - "2.2.1" - ], - "terser": [ - "5.28.1" - ], - "terser-webpack-plugin": [ - "5.3.10_webpack_5.90.3" + "to-fast-properties": [ + "2.0.0" ], - "thunky": [ - "1.1.0" + "update-browserslist-db": [ + "1.0.13_browserslist_4.23.0" ], - "to-regex-range": [ - "5.0.1" + "yallist": [ + "3.1.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__react-router__5.3.4__react_16.14.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__react-router__5.3.4__react_16.14.0", + "package": "react-router", + "version": "5.3.4_react_16.14.0", + "root_package": "", + "link_workspace": "", + "link_packages": { + "": [ + "react-router" + ] + }, + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "url": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__isexe__2.0.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__isexe__2.0.0__links", + "package": "isexe", + "version": "2.0.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "isexe": [ + "2.0.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__p-retry__6.2.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__p-retry__6.2.0__links", + "package": "p-retry", + "version": "6.2.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "@types/retry": "0.12.2", + "is-network-error": "1.0.1", + "retry": "0.13.1" + }, + "transitive_closure": { + "@types/retry": [ + "0.12.2" ], - "toidentifier": [ + "is-network-error": [ "1.0.1" ], - "tslib": [ - "2.6.2" + "p-retry": [ + "6.2.0" ], - "type-is": [ - "1.6.18" + "retry": [ + "0.13.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__array-flatten__1.1.1__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__array-flatten__1.1.1__links", + "package": "array-flatten", + "version": "1.1.1", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "array-flatten": [ + "1.1.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__at_babel_plugin-transform-private-methods__7.23.3__at_babel_core_7.23.9": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_plugin-transform-private-methods__7.23.3__at_babel_core_7.23.9", + "package": "@babel/plugin-transform-private-methods", + "version": "7.23.3_at_babel_core_7.23.9", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "url": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__argparse__2.0.1__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__argparse__2.0.1__links", + "package": "argparse", + "version": "2.0.1", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "argparse": [ + "2.0.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__relateurl__0.2.7": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__relateurl__0.2.7", + "package": "relateurl", + "version": "0.2.7", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "url": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__debug__4.3.4__supports-color_8.1.1__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__debug__4.3.4__supports-color_8.1.1__links", + "package": "debug", + "version": "4.3.4_supports-color_8.1.1", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "ms": "2.1.2", + "supports-color": "8.1.1" + }, + "transitive_closure": { + "debug": [ + "4.3.4_supports-color_8.1.1" ], - "undici-types": [ - "5.26.5" + "has-flag": [ + "4.0.0" ], - "unpipe": [ - "1.0.0" + "ms": [ + "2.1.2" ], - "update-browserslist-db": [ - "1.0.13_browserslist_4.23.0" + "supports-color": [ + "8.1.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__get-caller-file__2.0.5__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__get-caller-file__2.0.5__links", + "package": "get-caller-file", + "version": "2.0.5", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "get-caller-file": [ + "2.0.5" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__http2-wrapper__1.0.3__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__http2-wrapper__1.0.3__links", + "package": "http2-wrapper", + "version": "1.0.3", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "quick-lru": "5.1.1", + "resolve-alpn": "1.2.1" + }, + "transitive_closure": { + "http2-wrapper": [ + "1.0.3" ], - "uri-js": [ - "4.4.1" + "quick-lru": [ + "5.1.1" ], - "util-deprecate": [ - "1.0.2" + "resolve-alpn": [ + "1.2.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__boolean__3.2.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__boolean__3.2.0__links", + "package": "boolean", + "version": "3.2.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "boolean": [ + "3.2.0" + ] + }, + "lifecycle_build_target": true, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [ + "no-sandbox" + ], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__history__4.10.1__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__history__4.10.1__links", + "package": "history", + "version": "4.10.1", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "@babel/runtime": "7.23.9", + "loose-envify": "1.4.0", + "resolve-pathname": "3.0.0", + "tiny-invariant": "1.3.2", + "tiny-warning": "1.0.3", + "value-equal": "1.0.1" + }, + "transitive_closure": { + "@babel/runtime": [ + "7.23.9" ], - "utils-merge": [ - "1.0.1" + "history": [ + "4.10.1" ], - "uuid": [ - "8.3.2" + "js-tokens": [ + "4.0.0" ], - "vary": [ - "1.1.2" + "loose-envify": [ + "1.4.0" ], - "watchpack": [ - "2.4.0" + "regenerator-runtime": [ + "0.14.1" ], - "wbuf": [ - "1.7.3" + "resolve-pathname": [ + "3.0.0" ], - "webpack": [ - "5.90.3_webpack-cli_5.1.4" + "tiny-invariant": [ + "1.3.2" ], - "webpack-cli": [ - "5.1.4_-975075900" + "tiny-warning": [ + "1.0.3" ], - "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "value-equal": [ + "1.0.1" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, + "npm__vscode-test__0.4.3__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__vscode-test__0.4.3__links", + "package": "vscode-test", + "version": "0.4.3", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "http-proxy-agent": "2.1.0", + "https-proxy-agent": "2.2.4" + }, + "transitive_closure": { + "agent-base": [ + "4.3.0" ], - "webpack-dev-server": [ - "5.0.2_-359619668" + "debug": [ + "3.1.0_supports-color_5.4.0", + "3.2.7" ], - "webpack-merge": [ - "5.10.0" + "es6-promise": [ + "4.2.8" ], - "webpack-sources": [ - "3.2.3" + "es6-promisify": [ + "5.0.0" ], - "websocket-driver": [ - "0.7.4" + "has-flag": [ + "3.0.0" ], - "websocket-extensions": [ - "0.1.4" + "http-proxy-agent": [ + "2.1.0" ], - "which": [ - "2.0.2" + "https-proxy-agent": [ + "2.2.4" ], - "wildcard": [ - "2.0.1" + "ms": [ + "2.0.0", + "2.1.3" ], - "wrap-ansi": [ - "7.0.0", - "8.1.0" + "supports-color": [ + "5.4.0" ], - "ws": [ - "8.16.0" + "vscode-test": [ + "0.4.3" ] }, "lifecycle_build_target": false, @@ -35127,38 +35127,105 @@ ] } }, - "npm__postcss-modules-values__4.0.0__postcss_8.4.35__links": { + "npm__debug__4.3.4__supports-color_8.1.1": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__debug__4.3.4__supports-color_8.1.1", + "package": "debug", + "version": "4.3.4_supports-color_8.1.1", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "url": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__node-releases__2.0.14": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__node-releases__2.0.14", + "package": "node-releases", + "version": "2.0.14", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "url": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__at_babel_generator__7.23.6__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__postcss-modules-values__4.0.0__postcss_8.4.35__links", - "package": "postcss-modules-values", - "version": "4.0.0_postcss_8.4.35", + "name": "aspect_rules_js~1.35.0~npm~npm__at_babel_generator__7.23.6__links", + "package": "@babel/generator", + "version": "7.23.6", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "icss-utils": "5.1.0_postcss_8.4.35", - "postcss": "8.4.35" + "@babel/types": "7.23.9", + "@jridgewell/gen-mapping": "0.3.3", + "@jridgewell/trace-mapping": "0.3.22", + "jsesc": "2.5.2" }, "transitive_closure": { - "icss-utils": [ - "5.1.0_postcss_8.4.35" + "@babel/generator": [ + "7.23.6" ], - "nanoid": [ - "3.3.7" + "@babel/helper-string-parser": [ + "7.23.4" ], - "picocolors": [ - "1.0.0" + "@babel/helper-validator-identifier": [ + "7.22.20" ], - "postcss": [ - "8.4.35" + "@babel/types": [ + "7.23.9" ], - "postcss-modules-values": [ - "4.0.0_postcss_8.4.35" + "@jridgewell/gen-mapping": [ + "0.3.3" ], - "source-map-js": [ - "1.0.2" + "@jridgewell/resolve-uri": [ + "3.1.2" + ], + "@jridgewell/set-array": [ + "1.1.2" + ], + "@jridgewell/sourcemap-codec": [ + "1.4.15" + ], + "@jridgewell/trace-mapping": [ + "0.3.22" + ], + "jsesc": [ + "2.5.2" + ], + "to-fast-properties": [ + "2.0.0" ] }, "lifecycle_build_target": false, @@ -35171,22 +35238,47 @@ ] } }, - "npm__webpack-dev-middleware__7.0.0__webpack_5.90.3__links": { + "npm__obuf__1.1.2": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__obuf__1.1.2", + "package": "obuf", + "version": "1.1.2", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "url": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, + "npm__terser-webpack-plugin__5.3.10__webpack_5.90.3__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__webpack-dev-middleware__7.0.0__webpack_5.90.3__links", - "package": "webpack-dev-middleware", - "version": "7.0.0_webpack_5.90.3", + "name": "aspect_rules_js~1.35.0~npm~npm__terser-webpack-plugin__5.3.10__webpack_5.90.3__links", + "package": "terser-webpack-plugin", + "version": "5.3.10_webpack_5.90.3", "dev": false, "root_package": "", "link_packages": {}, "deps": { - "colorette": "2.0.20", - "memfs": "4.7.7", - "mime-types": "2.1.35", - "range-parser": "1.2.1", - "schema-utils": "4.2.0", + "@jridgewell/trace-mapping": "0.3.22", + "jest-worker": "27.5.1", + "schema-utils": "3.3.0", + "serialize-javascript": "6.0.2", + "terser": "5.28.1", "webpack": "5.90.3_webpack-cli_5.1.4" }, "transitive_closure": { @@ -35397,7 +35489,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -35465,7 +35557,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -35568,7 +35660,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -35595,7 +35687,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -35910,7 +36002,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -36102,7 +36194,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -36143,6 +36235,50 @@ ] } }, + "npm__postcss-modules-values__4.0.0__postcss_8.4.35__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__postcss-modules-values__4.0.0__postcss_8.4.35__links", + "package": "postcss-modules-values", + "version": "4.0.0_postcss_8.4.35", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "icss-utils": "5.1.0_postcss_8.4.35", + "postcss": "8.4.35" + }, + "transitive_closure": { + "icss-utils": [ + "5.1.0_postcss_8.4.35" + ], + "nanoid": [ + "3.3.7" + ], + "picocolors": [ + "1.0.0" + ], + "postcss": [ + "8.4.35" + ], + "postcss-modules-values": [ + "4.0.0_postcss_8.4.35" + ], + "source-map-js": [ + "1.0.2" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__clean-css__5.3.3__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -37145,6 +37281,153 @@ "generate_bzl_library_targets": false } }, + "npm__body-parser__1.20.2__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__body-parser__1.20.2__links", + "package": "body-parser", + "version": "1.20.2", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "bytes": "3.1.2", + "content-type": "1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "1.6.18", + "unpipe": "1.0.0" + }, + "transitive_closure": { + "body-parser": [ + "1.20.2" + ], + "bytes": [ + "3.1.2" + ], + "call-bind": [ + "1.0.7" + ], + "content-type": [ + "1.0.5" + ], + "debug": [ + "2.6.9" + ], + "define-data-property": [ + "1.1.4" + ], + "depd": [ + "2.0.0" + ], + "destroy": [ + "1.2.0" + ], + "ee-first": [ + "1.1.1" + ], + "es-define-property": [ + "1.0.0" + ], + "es-errors": [ + "1.3.0" + ], + "function-bind": [ + "1.1.2" + ], + "get-intrinsic": [ + "1.2.4" + ], + "gopd": [ + "1.0.1" + ], + "has-property-descriptors": [ + "1.0.2" + ], + "has-proto": [ + "1.0.3" + ], + "has-symbols": [ + "1.0.3" + ], + "hasown": [ + "2.0.1" + ], + "http-errors": [ + "2.0.0" + ], + "iconv-lite": [ + "0.4.24" + ], + "inherits": [ + "2.0.4" + ], + "media-typer": [ + "0.3.0" + ], + "mime-db": [ + "1.52.0" + ], + "mime-types": [ + "2.1.35" + ], + "ms": [ + "2.0.0" + ], + "object-inspect": [ + "1.13.1" + ], + "on-finished": [ + "2.4.1" + ], + "qs": [ + "6.11.0" + ], + "raw-body": [ + "2.5.2" + ], + "safer-buffer": [ + "2.1.2" + ], + "set-function-length": [ + "1.2.1" + ], + "setprototypeof": [ + "1.2.0" + ], + "side-channel": [ + "1.0.5" + ], + "statuses": [ + "2.0.1" + ], + "toidentifier": [ + "1.0.1" + ], + "type-is": [ + "1.6.18" + ], + "unpipe": [ + "1.0.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__braces__3.0.2__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -37460,251 +37743,6 @@ "generate_bzl_library_targets": false } }, - "npm__express__4.18.2__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__express__4.18.2__links", - "package": "express", - "version": "4.18.2", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "accepts": "1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "1.0.5", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.4.1", - "parseurl": "1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.7", - "qs": "6.11.0", - "range-parser": "1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "1.6.18", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "transitive_closure": { - "accepts": [ - "1.3.8" - ], - "array-flatten": [ - "1.1.1" - ], - "body-parser": [ - "1.20.1" - ], - "bytes": [ - "3.1.2" - ], - "call-bind": [ - "1.0.7" - ], - "content-disposition": [ - "0.5.4" - ], - "content-type": [ - "1.0.5" - ], - "cookie": [ - "0.5.0" - ], - "cookie-signature": [ - "1.0.6" - ], - "debug": [ - "2.6.9" - ], - "define-data-property": [ - "1.1.4" - ], - "depd": [ - "2.0.0" - ], - "destroy": [ - "1.2.0" - ], - "ee-first": [ - "1.1.1" - ], - "encodeurl": [ - "1.0.2" - ], - "es-define-property": [ - "1.0.0" - ], - "es-errors": [ - "1.3.0" - ], - "escape-html": [ - "1.0.3" - ], - "etag": [ - "1.8.1" - ], - "express": [ - "4.18.2" - ], - "finalhandler": [ - "1.2.0" - ], - "forwarded": [ - "0.2.0" - ], - "fresh": [ - "0.5.2" - ], - "function-bind": [ - "1.1.2" - ], - "get-intrinsic": [ - "1.2.4" - ], - "gopd": [ - "1.0.1" - ], - "has-property-descriptors": [ - "1.0.2" - ], - "has-proto": [ - "1.0.3" - ], - "has-symbols": [ - "1.0.3" - ], - "hasown": [ - "2.0.1" - ], - "http-errors": [ - "2.0.0" - ], - "iconv-lite": [ - "0.4.24" - ], - "inherits": [ - "2.0.4" - ], - "ipaddr.js": [ - "1.9.1" - ], - "media-typer": [ - "0.3.0" - ], - "merge-descriptors": [ - "1.0.1" - ], - "methods": [ - "1.1.2" - ], - "mime": [ - "1.6.0" - ], - "mime-db": [ - "1.52.0" - ], - "mime-types": [ - "2.1.35" - ], - "ms": [ - "2.0.0", - "2.1.3" - ], - "negotiator": [ - "0.6.3" - ], - "object-inspect": [ - "1.13.1" - ], - "on-finished": [ - "2.4.1" - ], - "parseurl": [ - "1.3.3" - ], - "path-to-regexp": [ - "0.1.7" - ], - "proxy-addr": [ - "2.0.7" - ], - "qs": [ - "6.11.0" - ], - "range-parser": [ - "1.2.1" - ], - "raw-body": [ - "2.5.1" - ], - "safe-buffer": [ - "5.2.1" - ], - "safer-buffer": [ - "2.1.2" - ], - "send": [ - "0.18.0" - ], - "serve-static": [ - "1.15.0" - ], - "set-function-length": [ - "1.2.1" - ], - "setprototypeof": [ - "1.2.0" - ], - "side-channel": [ - "1.0.5" - ], - "statuses": [ - "2.0.1" - ], - "toidentifier": [ - "1.0.1" - ], - "type-is": [ - "1.6.18" - ], - "unpipe": [ - "1.0.0" - ], - "utils-merge": [ - "1.0.1" - ], - "vary": [ - "1.1.2" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__compression__1.7.4": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -40513,6 +40551,31 @@ ] } }, + "npm__cookie__0.6.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__cookie__0.6.0", + "package": "cookie", + "version": "0.6.0", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "url": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__semver__5.7.2": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -42757,7 +42820,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -42825,7 +42888,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -42928,7 +42991,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -42955,7 +43018,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -43270,7 +43333,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -43465,7 +43528,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -45652,32 +45715,6 @@ "generate_bzl_library_targets": false } }, - "npm__follow-redirects__1.15.5__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__follow-redirects__1.15.5__links", - "package": "follow-redirects", - "version": "1.15.5", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": { - "follow-redirects": [ - "1.15.5" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__json-buffer__3.0.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -55755,7 +55792,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -55823,7 +55860,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -55932,7 +55969,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -55959,7 +55996,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -56302,7 +56339,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -56500,7 +56537,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -58098,7 +58135,7 @@ "7.0.1" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "http-proxy": [ "1.18.1" @@ -58562,7 +58599,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -58630,7 +58667,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -58733,7 +58770,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -58760,7 +58797,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -59075,7 +59112,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -59267,7 +59304,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -60029,7 +60066,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -60097,7 +60134,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -60200,7 +60237,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -60227,7 +60264,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -60542,7 +60579,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -60734,7 +60771,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -61243,6 +61280,31 @@ ] } }, + "npm__webpack-dev-middleware__7.1.1__webpack_5.90.3": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__webpack-dev-middleware__7.1.1__webpack_5.90.3", + "package": "webpack-dev-middleware", + "version": "7.1.1_webpack_5.90.3", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-NmRVq4AvRQs66dFWyDR4GsFDJggtSi2Yn38MXLk0nffgF9n/AIP4TFBg2TQKYaRAN4sHuKOTiz9BnNCENDLEVA==", + "url": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.1.1.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__color-name__1.1.3__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -64366,153 +64428,6 @@ "generate_bzl_library_targets": false } }, - "npm__body-parser__1.20.1__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__body-parser__1.20.1__links", - "package": "body-parser", - "version": "1.20.1", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "bytes": "3.1.2", - "content-type": "1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "1.6.18", - "unpipe": "1.0.0" - }, - "transitive_closure": { - "body-parser": [ - "1.20.1" - ], - "bytes": [ - "3.1.2" - ], - "call-bind": [ - "1.0.7" - ], - "content-type": [ - "1.0.5" - ], - "debug": [ - "2.6.9" - ], - "define-data-property": [ - "1.1.4" - ], - "depd": [ - "2.0.0" - ], - "destroy": [ - "1.2.0" - ], - "ee-first": [ - "1.1.1" - ], - "es-define-property": [ - "1.0.0" - ], - "es-errors": [ - "1.3.0" - ], - "function-bind": [ - "1.1.2" - ], - "get-intrinsic": [ - "1.2.4" - ], - "gopd": [ - "1.0.1" - ], - "has-property-descriptors": [ - "1.0.2" - ], - "has-proto": [ - "1.0.3" - ], - "has-symbols": [ - "1.0.3" - ], - "hasown": [ - "2.0.1" - ], - "http-errors": [ - "2.0.0" - ], - "iconv-lite": [ - "0.4.24" - ], - "inherits": [ - "2.0.4" - ], - "media-typer": [ - "0.3.0" - ], - "mime-db": [ - "1.52.0" - ], - "mime-types": [ - "2.1.35" - ], - "ms": [ - "2.0.0" - ], - "object-inspect": [ - "1.13.1" - ], - "on-finished": [ - "2.4.1" - ], - "qs": [ - "6.11.0" - ], - "raw-body": [ - "2.5.1" - ], - "safer-buffer": [ - "2.1.2" - ], - "set-function-length": [ - "1.2.1" - ], - "setprototypeof": [ - "1.2.0" - ], - "side-channel": [ - "1.0.5" - ], - "statuses": [ - "2.0.1" - ], - "toidentifier": [ - "1.0.1" - ], - "type-is": [ - "1.6.18" - ], - "unpipe": [ - "1.0.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__http-cache-semantics__4.1.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -65864,7 +65779,7 @@ "compression": "1.7.4", "connect-history-api-fallback": "2.0.0", "default-gateway": "6.0.3", - "express": "4.18.2", + "express": "4.19.2", "graceful-fs": "4.2.11", "html-entities": "2.4.0", "http-proxy-middleware": "2.0.6_at_types_express_4.17.21", @@ -65880,7 +65795,7 @@ "spdy": "4.0.2", "webpack": "5.90.3_webpack-cli_5.1.4", "webpack-cli": "5.1.4_-975075900", - "webpack-dev-middleware": "7.0.0_webpack_5.90.3", + "webpack-dev-middleware": "7.1.1_webpack_5.90.3", "ws": "8.16.0" }, "transitive_closure": { @@ -66091,7 +66006,7 @@ "2.2.0" ], "body-parser": [ - "1.20.1" + "1.20.2" ], "bonjour-service": [ "1.2.1" @@ -66159,7 +66074,7 @@ "1.0.5" ], "cookie": [ - "0.5.0" + "0.6.0" ], "cookie-signature": [ "1.0.6" @@ -66262,7 +66177,7 @@ "5.1.1" ], "express": [ - "4.18.2" + "4.19.2" ], "fast-deep-equal": [ "3.1.3" @@ -66289,7 +66204,7 @@ "5.0.2" ], "follow-redirects": [ - "1.15.5" + "1.15.6" ], "foreground-child": [ "3.1.1" @@ -66604,7 +66519,7 @@ "1.2.1" ], "raw-body": [ - "2.5.1" + "2.5.2" ], "readable-stream": [ "2.3.8", @@ -66796,7 +66711,7 @@ "5.1.4_-975075900" ], "webpack-dev-middleware": [ - "7.0.0_webpack_5.90.3" + "7.1.1_webpack_5.90.3" ], "webpack-dev-server": [ "5.0.2_-359619668" @@ -66837,6 +66752,31 @@ ] } }, + "npm__express__4.19.2": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__express__4.19.2", + "package": "express", + "version": "4.19.2", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "url": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__run-applescript__7.0.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -71076,18 +71016,18 @@ "generate_bzl_library_targets": false } }, - "npm__raw-body__2.5.1": { + "npm__raw-body__2.5.2": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__raw-body__2.5.1", + "name": "aspect_rules_js~1.35.0~npm~npm__raw-body__2.5.2", "package": "raw-body", - "version": "2.5.1", + "version": "2.5.2", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "url": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "url": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "commit": "", "patch_args": [], "patches": [], @@ -74007,6 +73947,67 @@ "generate_bzl_library_targets": false } }, + "npm__raw-body__2.5.2__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__raw-body__2.5.2__links", + "package": "raw-body", + "version": "2.5.2", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "transitive_closure": { + "bytes": [ + "3.1.2" + ], + "depd": [ + "2.0.0" + ], + "http-errors": [ + "2.0.0" + ], + "iconv-lite": [ + "0.4.24" + ], + "inherits": [ + "2.0.4" + ], + "raw-body": [ + "2.5.2" + ], + "safer-buffer": [ + "2.1.2" + ], + "setprototypeof": [ + "1.2.0" + ], + "statuses": [ + "2.0.1" + ], + "toidentifier": [ + "1.0.1" + ], + "unpipe": [ + "1.0.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__at_webassemblyjs_helper-wasm-section__1.11.6": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", diff --git a/client/characters.ts b/client/characters.ts index e69de29..81dc110 100644 --- a/client/characters.ts +++ b/client/characters.ts @@ -0,0 +1,279 @@ +import { UNICODE } from "#asciiflow/client/constants"; +import { Direction } from "#asciiflow/client/direction"; + +export const BOX_DRAWING_VALUES = new Set([ + "┌", + "┐", + "┘", + "└", + "─", + "│", + "┬", + "┴", + "┤", + "├", + "┼", + "◄", + "►", + "▲", + "▼", +]); + +interface IBoxDrawingCharacterInfo { + connections: Set; + connectables: Set; +} + +const BOX_DRAWING_INFO: { [key: string]: IBoxDrawingCharacterInfo } = { + "┌": { + connections: new Set([Direction.DOWN, Direction.RIGHT]), + connectables: new Set(Direction.ALL), + }, + "┐": { + connections: new Set([Direction.DOWN, Direction.LEFT]), + connectables: new Set(Direction.ALL), + }, + "┘": { + connections: new Set([Direction.UP, Direction.LEFT]), + connectables: new Set(Direction.ALL), + }, + "└": { + connections: new Set([Direction.UP, Direction.RIGHT]), + connectables: new Set(Direction.ALL), + }, + "─": { + connections: new Set([Direction.LEFT, Direction.RIGHT]), + connectables: new Set(Direction.ALL), + }, + "│": { + connections: new Set([Direction.UP, Direction.DOWN]), + connectables: new Set(Direction.ALL), + }, + "┬": { + connections: new Set([Direction.DOWN, Direction.LEFT, Direction.RIGHT]), + connectables: new Set(Direction.ALL), + }, + "┴": { + connections: new Set([Direction.UP, Direction.LEFT, Direction.RIGHT]), + connectables: new Set(Direction.ALL), + }, + "┤": { + connections: new Set([Direction.UP, Direction.DOWN, Direction.LEFT]), + connectables: new Set(Direction.ALL), + }, + "├": { + connections: new Set([Direction.UP, Direction.DOWN, Direction.RIGHT]), + connectables: new Set(Direction.ALL), + }, + "┼": { + connections: new Set([ + Direction.UP, + Direction.DOWN, + Direction.LEFT, + Direction.RIGHT, + ]), + connectables: new Set(Direction.ALL), + }, + "◄": { + connections: new Set([Direction.RIGHT]), + connectables: new Set([Direction.RIGHT]), + }, + "►": { + connections: new Set([Direction.LEFT]), + connectables: new Set([Direction.LEFT]), + }, + "▲": { + connections: new Set([Direction.DOWN]), + connectables: new Set([Direction.DOWN]), + }, + "▼": { + connections: new Set([Direction.UP]), + connectables: new Set([Direction.UP]), + }, +}; + +export function connectsDown(value: string): boolean { + return BOX_DRAWING_INFO[value]?.connections.has(Direction.DOWN); +} + +export function connectsUp(value: string): boolean { + return BOX_DRAWING_INFO[value]?.connections.has(Direction.UP); +} + +export function connectsLeft(value: string): boolean { + return BOX_DRAWING_INFO[value]?.connections.has(Direction.LEFT); +} + +export function connectsRight(value: string): boolean { + return BOX_DRAWING_INFO[value]?.connections.has(Direction.RIGHT); +} + +export function isBoxDrawing(value: string): boolean { + return BOX_DRAWING_VALUES.has(value); +} + +export function isArrow(value: string): boolean { + return ( + value === UNICODE.arrowLeft || + value === UNICODE.arrowRight || + value === UNICODE.arrowUp || + value === UNICODE.arrowDown + ); +} + +export function connects(value: string, direction: Direction): boolean { + return BOX_DRAWING_INFO[value]?.connections.has(direction); +} + +export function connectable(value: string, direction: Direction): boolean { + return BOX_DRAWING_INFO[value]?.connectables.has(direction); +} + +export function connections(value: string): Set { + return BOX_DRAWING_INFO[value]?.connections ?? new Set(); +} + +export function connect( + value: string, + direction: Direction | Direction[] +): string { + if (Array.isArray(direction)) { + return direction.reduce( + (value, direction) => connect(value, direction), + value + ); + } + if (connects(value, direction)) { + return value; + } + if (direction === Direction.UP) { + if (value === UNICODE.lineHorizontal) { + return UNICODE.junctionUp; + } + if (value === UNICODE.cornerTopLeft) { + return UNICODE.junctionRight; + } + if (value === UNICODE.cornerTopRight) { + return UNICODE.junctionLeft; + } + if (value === UNICODE.junctionDown) { + return UNICODE.junctionAll; + } + } + if (direction === Direction.DOWN) { + if (value === UNICODE.lineHorizontal) { + return UNICODE.junctionDown; + } + if (value === UNICODE.cornerBottomLeft) { + return UNICODE.junctionRight; + } + if (value === UNICODE.cornerBottomRight) { + return UNICODE.junctionLeft; + } + if (value === UNICODE.junctionUp) { + return UNICODE.junctionAll; + } + } + if (direction === Direction.LEFT) { + if (value === UNICODE.lineVertical) { + return UNICODE.junctionLeft; + } + if (value === UNICODE.cornerTopLeft) { + return UNICODE.junctionDown; + } + if (value === UNICODE.cornerBottomLeft) { + return UNICODE.junctionUp; + } + if (value === UNICODE.junctionRight) { + return UNICODE.junctionAll; + } + } + if (direction === Direction.RIGHT) { + if (value === UNICODE.lineVertical) { + return UNICODE.junctionRight; + } + if (value === UNICODE.cornerTopRight) { + return UNICODE.junctionDown; + } + if (value === UNICODE.cornerBottomRight) { + return UNICODE.junctionUp; + } + if (value === UNICODE.junctionLeft) { + return UNICODE.junctionAll; + } + } + throw new Error(`Can't connect ${value} in direction ${direction}`); +} + +export function disconnect( + value: string, + direction: Direction | Direction[] +): string { + if (Array.isArray(direction)) { + return direction.reduce( + (value, direction) => disconnect(value, direction), + value + ); + } + if (!connects(value, direction)) { + return value; + } + if (direction === Direction.UP) { + if (value === UNICODE.junctionUp) { + return UNICODE.lineHorizontal; + } + if (value === UNICODE.junctionRight) { + return UNICODE.cornerTopLeft; + } + if (value === UNICODE.junctionLeft) { + return UNICODE.cornerTopRight; + } + if (value === UNICODE.junctionAll) { + return UNICODE.junctionDown; + } + } + if (direction === Direction.DOWN) { + if (value === UNICODE.junctionDown) { + return UNICODE.lineHorizontal; + } + if (value === UNICODE.junctionRight) { + return UNICODE.cornerBottomLeft; + } + if (value === UNICODE.junctionLeft) { + return UNICODE.cornerBottomRight; + } + if (value === UNICODE.junctionUp) { + return UNICODE.junctionDown; + } + } + if (direction === Direction.LEFT) { + if (value === UNICODE.junctionLeft) { + return UNICODE.lineVertical; + } + if (value === UNICODE.junctionDown) { + return UNICODE.cornerTopLeft; + } + if (value === UNICODE.junctionUp) { + return UNICODE.cornerBottomLeft; + } + if (value === UNICODE.junctionRight) { + return UNICODE.junctionLeft; + } + } + if (direction === Direction.RIGHT) { + if (value === UNICODE.junctionRight) { + return UNICODE.lineVertical; + } + if (value === UNICODE.junctionDown) { + return UNICODE.cornerTopRight; + } + if (value === UNICODE.junctionUp) { + return UNICODE.cornerBottomRight; + } + if (value === UNICODE.junctionLeft) { + return UNICODE.junctionRight; + } + } + // There are a few cases where we just can't do this, and that has to be OK. + return value; +} diff --git a/client/common.ts b/client/common.ts index ff395c0..8d6ddb3 100644 --- a/client/common.ts +++ b/client/common.ts @@ -7,6 +7,22 @@ import { Vector } from "#asciiflow/client/vector"; export class Box { constructor(public readonly start: Vector, public readonly end: Vector) {} + left() { + return Math.min(this.start.x, this.end.x); + } + + right() { + return Math.max(this.start.x, this.end.x); + } + + top() { + return Math.min(this.start.y, this.end.y); + } + + bottom() { + return Math.max(this.start.y, this.end.y); + } + topLeft() { return new Vector( Math.min(this.start.x, this.end.x), @@ -14,6 +30,13 @@ export class Box { ); } + topRight() { + return new Vector( + Math.max(this.start.x, this.end.x), + Math.min(this.start.y, this.end.y) + ); + } + bottomRight() { return new Vector( Math.max(this.start.x, this.end.x), @@ -21,6 +44,13 @@ export class Box { ); } + bottomLeft() { + return new Vector( + Math.min(this.start.x, this.end.x), + Math.max(this.start.y, this.end.y) + ); + } + contains(position: Vector) { const topLeft = this.topLeft(); const bottomRight = this.bottomRight(); @@ -33,28 +63,6 @@ export class Box { } } -/** - * An individual cell within the diagram and it's current value. - */ -export class Cell { - constructor(public value?: string, public scratchValue?: string) {} - - getRawValue() { - return this.scratchValue != null ? this.scratchValue : this.value; - } - - isSpecial() { - return ALL_SPECIAL_VALUES.includes(this.getRawValue()); - } - - isEmpty() { - return this.value == null && this.scratchValue == null; - } - - hasScratch() { - return this.scratchValue != null; - } -} export class CellContext { constructor( @@ -71,19 +79,4 @@ export class CellContext { sum() { return +this.left + +this.right + +this.up + +this.down; } - /** - * Returns the total number of surrounding special cells. - */ - extendedSum() { - return ( - +this.left + - +this.right + - +this.up + - +this.down + - +this.leftup + - +this.leftdown + - +this.rightup + - +this.rightdown - ); - } } diff --git a/client/constants.ts b/client/constants.ts index 6cd3f1b..4e1f9f4 100644 --- a/client/constants.ts +++ b/client/constants.ts @@ -1,4 +1,3 @@ -import { Vector } from "#asciiflow/client/vector"; export const MAX_GRID_WIDTH = 2000; export const MAX_GRID_HEIGHT = 600; @@ -135,11 +134,4 @@ export const KEY_RIGHT = ""; // http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript export const TOUCH_ENABLED = () => - "ontouchstart" in window || "onmsgesturechange" in window; - -export const DIR_LEFT = new Vector(-1, 0); -export const DIR_RIGHT = new Vector(1, 0); -export const DIR_UP = new Vector(0, -1); -export const DIR_DOWN = new Vector(0, 1); - -export const DIRECTIONS = [DIR_LEFT, DIR_RIGHT, DIR_UP, DIR_DOWN]; + "ontouchstart" in window || "onmsgesturechange" in window; \ No newline at end of file diff --git a/client/direction.ts b/client/direction.ts new file mode 100644 index 0000000..ee022a2 --- /dev/null +++ b/client/direction.ts @@ -0,0 +1,30 @@ +import { Vector } from "#asciiflow/client/vector"; + +export class Direction extends Vector { + public static UP = new Direction(0, -1); + public static DOWN = new Direction(0, 1); + public static LEFT = new Direction(-1, 0); + public static RIGHT = new Direction(1, 0); + + public static ALL = [ + Direction.UP, + Direction.DOWN, + Direction.LEFT, + Direction.RIGHT, + ]; + + private constructor(x: number, y: number) { + super(x, y); + } + + public opposite(): Direction { + return Direction.OPPOSITE_MAP.get(this); + } + + private static readonly OPPOSITE_MAP = new Map([ + [Direction.UP, Direction.DOWN], + [Direction.DOWN, Direction.UP], + [Direction.LEFT, Direction.RIGHT], + [Direction.RIGHT, Direction.LEFT], + ]); +} diff --git a/client/draw/box.ts b/client/draw/box.ts index 6bb78f7..48e9a37 100644 --- a/client/draw/box.ts +++ b/client/draw/box.ts @@ -1,8 +1,9 @@ +import { Box } from "#asciiflow/client/common"; +import { UNICODE } from "#asciiflow/client/constants"; import { AbstractDrawFunction } from "#asciiflow/client/draw/function"; -import { drawLine } from "#asciiflow/client/draw/utils"; +import { Layer } from "#asciiflow/client/layer"; import { store } from "#asciiflow/client/store"; import { Vector } from "#asciiflow/client/vector"; -import { Layer } from "#asciiflow/client/layer"; export class DrawBox extends AbstractDrawFunction { private startPosition: Vector; @@ -13,8 +14,28 @@ export class DrawBox extends AbstractDrawFunction { move(position: Vector) { const layer = new Layer(); - drawLine(layer, this.startPosition, position, true); - drawLine(layer, this.startPosition, position, false); + const box = new Box(this.startPosition, position); + + if (box.right() != box.left()) { + for (let x = box.left(); x <= box.right(); x++) { + layer.set(new Vector(x, box.top()), UNICODE.lineHorizontal); + layer.set(new Vector(x, box.bottom()), UNICODE.lineHorizontal); + } + } + if (box.top() != box.bottom()) { + for (let y = box.top(); y <= box.bottom(); y++) { + layer.set(new Vector(box.left(), y), UNICODE.lineVertical); + layer.set(new Vector(box.right(), y), UNICODE.lineVertical); + } + } + + if (box.left() != box.right() && box.top() != box.bottom()) { + layer.set(box.topLeft(), UNICODE.cornerTopLeft); + layer.set(box.topRight(), UNICODE.cornerTopRight); + layer.set(box.bottomRight(), UNICODE.cornerBottomRight); + layer.set(box.bottomLeft(), UNICODE.cornerBottomLeft); + } + store.currentCanvas.setScratchLayer(layer); } diff --git a/client/draw/line.ts b/client/draw/line.ts index 349d7f8..05ec3c5 100644 --- a/client/draw/line.ts +++ b/client/draw/line.ts @@ -1,10 +1,18 @@ import { - IDrawFunction, - AbstractDrawFunction, + connect, + connectable, + connects, + disconnect, +} from "#asciiflow/client/characters"; +import { Direction } from "#asciiflow/client/direction"; +import { + AbstractDrawFunction } from "#asciiflow/client/draw/function"; -import { drawLine } from "#asciiflow/client/draw/utils"; -import { Layer } from "#asciiflow/client/layer"; -import { store, IModifierKeys } from "#asciiflow/client/store"; +import { line } from "#asciiflow/client/draw/utils"; +import { Layer, LayerView } from "#asciiflow/client/layer"; +import { cellContext } from "#asciiflow/client/render_layer"; +import { snap } from "#asciiflow/client/snap"; +import { IModifierKeys, store } from "#asciiflow/client/store"; import { Vector } from "#asciiflow/client/vector"; export class DrawLine extends AbstractDrawFunction { @@ -29,11 +37,15 @@ export class DrawLine extends AbstractDrawFunction { draw(modifierKeys: IModifierKeys) { const layer = new Layer(); // Try to infer line orientation. - // TODO: Split the line into two lines if we can't satisfy both ends. const characters = store.characters; - - const startContext = store.currentCanvas.committed.context(this.startPosition); - const endContext = store.currentCanvas.committed.context(this.endPosition); + const startContext = cellContext( + this.startPosition, + store.currentCanvas.committed + ); + const endContext = cellContext( + this.endPosition, + store.currentCanvas.committed + ); const horizontalStart = (startContext.up && startContext.down) || @@ -49,7 +61,7 @@ export class DrawLine extends AbstractDrawFunction { (horizontalStart || verticalEnd) !== (modifierKeys.ctrl || modifierKeys.shift); - drawLine(layer, this.startPosition, this.endPosition, horizontalFirst); + layer.setFrom(line(this.startPosition, this.endPosition, horizontalFirst)); if (this.isArrow) { layer.set( @@ -77,6 +89,33 @@ export class DrawLine extends AbstractDrawFunction { })() ); } + // Start or end characters may not just be lines, if adjacent cells have any incoming connections + // then we connect to them, and then remove any unnecessary connections (if possible). + const combined = new LayerView([store.currentCanvas.committed, layer]); + for (const position of this.isArrow + ? [this.startPosition] + : [this.startPosition, this.endPosition]) { + const incomingConnections = Direction.ALL.filter( + (direction) => + connects( + combined.get(position.add(direction)), + direction.opposite() + ) && connectable(layer.get(position), direction) + ); + layer.set(position, connect(layer.get(position), incomingConnections)); + layer.set( + position, + disconnect( + layer.get(position), + Direction.ALL.filter( + (direction) => !incomingConnections.includes(direction) + ) + ) + ); + } + + layer.setFrom(snap(layer, store.currentCanvas.committed)); + store.currentCanvas.setScratchLayer(layer); } diff --git a/client/draw/move.ts b/client/draw/move.ts index 7cda225..7a67264 100644 --- a/client/draw/move.ts +++ b/client/draw/move.ts @@ -1,113 +1,108 @@ +import { connects, isArrow } from "#asciiflow/client/characters"; import * as constants from "#asciiflow/client/constants"; import { isSpecial } from "#asciiflow/client/constants"; +import { Direction } from "#asciiflow/client/direction"; import { AbstractDrawFunction } from "#asciiflow/client/draw/function"; -import { drawLine } from "#asciiflow/client/draw/utils"; import { Layer } from "#asciiflow/client/layer"; import { store } from "#asciiflow/client/store"; import { Vector } from "#asciiflow/client/vector"; -interface IEnd { - position: Vector; - clockwise: boolean; - startIsAlt: boolean; - midPointIsAlt?: boolean; - endIsAlt: boolean; -} export class DrawMove extends AbstractDrawFunction { - private startPosition: Vector; - private ends: IEnd[] = []; + private trace: ILineTrace; start(position: Vector) { - this.startPosition = constants.TOUCH_ENABLED - ? this.snapToNearest(position) - : position; - this.ends = []; - - // If this isn't a special cell then quit, or things get weird. - if (!constants.isSpecial(store.currentCanvas.committed.get(position))) { + const value = store.currentCanvas.committed.get(position); + if ( + value !== constants.UNICODE.lineHorizontal && + value !== constants.UNICODE.lineVertical + ) { return; } - const ends: IEnd[] = []; - for (const i of constants.DIRECTIONS) { - const midPoints = this.followLine(this.startPosition, i); - for (const midPoint of midPoints) { - // Clockwise is a lie, it is true if we move vertically first. - const clockwise = i.x !== 0; - const startIsAlt = - constants.ALT_SPECIAL_VALUES.indexOf( - store.currentCanvas.committed.get(position) - ) !== -1; - const midPointIsAlt = - constants.ALT_SPECIAL_VALUES.indexOf( - store.currentCanvas.committed.get(midPoint) - ) !== -1; - - const midPointContext = store.currentCanvas.committed.context(midPoint); - // Special case, a straight line with no turns. - if (midPointContext.sum() === 1) { - ends.push({ - position: midPoint, - clockwise, - startIsAlt, - endIsAlt: midPointIsAlt, - }); - continue; - } - // Continue following lines from the midpoint. - for (const j of constants.DIRECTIONS) { - if (i.add(j).length() === 0 || i.add(j).length() === 2) { - // Don't go back on ourselves, or don't carry on in same direction. - continue; - } - const secondEnds = this.followLine(midPoint, j); - // Ignore any directions that didn't go anywhere. - if (secondEnds.length === 0) { - continue; - } - const secondEnd = secondEnds[0]; - const endIsAlt = - constants.ALT_SPECIAL_VALUES.indexOf( - store.currentCanvas.committed.get(secondEnd) - ) !== -1; - // On the second line we don't care about multiple - // junctions, just the last. - ends.push({ - position: secondEnd, - clockwise, - startIsAlt, - midPointIsAlt, - endIsAlt, - }); - } - } - } - this.ends = ends; - // Redraw the new lines after we have cleared the existing ones. - this.move(this.startPosition); + this.trace = traceLine(store.currentCanvas.committed, position); + this.move(position); } move(position: Vector) { + if (this.trace == null) { + return; + } const layer = new Layer(); - // Clear all the lines so we can draw them afresh. - for (const end of this.ends) { - drawLine(layer, this.startPosition, end.position, end.clockwise, ""); + // Find the min/max x/y that we can move to. + const minX = Math.max( + ...this.trace.attachments + .filter((a) => a.direction === Direction.LEFT) + .map((a) => a.end.x) + ); + const maxX = Math.min( + ...this.trace.attachments + .filter((a) => a.direction === Direction.RIGHT) + .map((a) => a.end.x) + ); + const minY = Math.max( + ...this.trace.attachments + .filter((a) => a.direction === Direction.UP) + .map((a) => a.end.y) + ); + const maxY = Math.min( + ...this.trace.attachments + .filter((a) => a.direction === Direction.DOWN) + .map((a) => a.end.y) + ); + console.log(minX, maxX, minY, maxY); + console.log(this.trace); + // Calculate the effective position after calculating bounds. + const effectivePosition = new Vector( + Math.min(Math.max(position.x, minX), maxX), + Math.min(Math.max(position.y, minY), maxY) + ); + // Work out which direction we're moving in. + const moveDirection = + this.trace.orientation === "vertical" + ? effectivePosition.x < this.trace.positions[0].x + ? Direction.LEFT + : Direction.RIGHT + : effectivePosition.y < this.trace.positions[0].y + ? Direction.UP + : Direction.DOWN; + // Work out how many units/cells we're moving. + const moveUnits = Math.abs( + moveDirection === Direction.LEFT || moveDirection === Direction.RIGHT + ? effectivePosition.x - this.trace.positions[0].x + : effectivePosition.y - this.trace.positions[0].y + ); + // Clear any attachments that are in the way. + for (const attachment of this.trace.attachments) { + if (attachment.direction === moveDirection) { + for (let i = 0; i < moveUnits; i++) { + layer.set(attachment.source.add(attachment.direction.scale(i)), ""); + } + } } - for (const end of this.ends) { - drawLine(layer, position, end.position, end.clockwise); + // Clear the line. + for (const position of this.trace.positions) { + layer.set(position, ""); } - for (const end of this.ends) { - // If the ends or midpoint of the line was a alt character (arrow), need to preserve that. - if (end.startIsAlt) { - layer.set(position, constants.ALT_SPECIAL_VALUE); - } - if (end.endIsAlt) { - layer.set(end.position, constants.ALT_SPECIAL_VALUE); - } - if (end.midPointIsAlt) { - const midX = end.clockwise ? end.position.x : position.x; - const midY = end.clockwise ? position.y : end.position.y; - layer.set(new Vector(midX, midY), constants.ALT_SPECIAL_VALUE); + // Move the line. + for (const position of this.trace.positions) { + layer.set( + position.add(moveDirection.scale(moveUnits)), + store.currentCanvas.committed.get(position) + ); + } + // Extend any attachments that need to be extended. + for (const attachment of this.trace.attachments) { + if (attachment.direction === moveDirection.opposite()) { + for (let i = 1; i <= moveUnits; i++) { + // TODO: Deal with arrows. + layer.set( + attachment.source.add(attachment.direction.scale(-i)), + attachment.direction === Direction.LEFT || + attachment.direction === Direction.RIGHT + ? constants.UNICODE.lineHorizontal + : constants.UNICODE.lineVertical + ); + } } } store.currentCanvas.setScratchLayer(layer); @@ -117,82 +112,137 @@ export class DrawMove extends AbstractDrawFunction { store.currentCanvas.commitScratch(); } - /** - * Follows a line in a given direction from the startPosition. - * Returns a list of positions that were line 'junctions'. This is a bit of a - * loose definition, but basically means a point around which we resize things. - */ - followLine(startPosition: Vector, direction: Vector) { - let endPosition = startPosition.clone(); - const junctions = []; - while (true) { - const nextEnd = endPosition.add(direction); - const nextEndValue = store.currentCanvas.committed.get(nextEnd); - if (!isSpecial(nextEndValue)) { - // Junctions: Right angles and end T-Junctions. - if (!startPosition.equals(endPosition)) { - junctions.push(endPosition); - } - return junctions; - } - - endPosition = nextEnd; - const context = store.currentCanvas.committed.context(endPosition); - // Junctions: Side T-Junctions. - if (context.sum() === 3) { - junctions.push(endPosition); - } - // Fully connected junctions. - if (context.sum() === 4) { - junctions.push(endPosition); - } + getCursor(position: Vector) { + const value = store.currentCanvas.committed.get(position); + if (value === constants.UNICODE.lineHorizontal) { + return "ns-resize"; + } + if (value === constants.UNICODE.lineVertical) { + return "ew-resize"; } - } - - /** - * For a given position, finds the nearest cell that is of any interest to the - * move tool, e.g. a corner or a line. Will look up to 1 cell in each direction - * including diagonally. - */ - snapToNearest(position: Vector) { if (isSpecial(store.currentCanvas.committed.get(position))) { - return position; + return "move"; + } else { + return "default"; } - const allDirections = constants.DIRECTIONS.concat([ - constants.DIR_LEFT.add(constants.DIR_UP), - constants.DIR_LEFT.add(constants.DIR_DOWN), - constants.DIR_RIGHT.add(constants.DIR_UP), - constants.DIR_RIGHT.add(constants.DIR_DOWN), - ]); + } + + handleKey(value: string) {} +} + +interface ILineAttachmentTrace { + source: Vector; + end: Vector; + sourceValue: string; + direction: Direction; +} +interface ILineTrace { + orientation: "horizontal" | "vertical"; + positions: Vector[]; + attachments: ILineAttachmentTrace[]; +} - let bestDirection = null; - let bestContextSum = 0; - for (const direction of allDirections) { - // Find the most connected cell, essentially. - const newPos = position.add(direction); - const contextSum = store.currentCanvas.committed.context(newPos).sum(); +function traceLine(layer: Layer, position: Vector): ILineTrace { + const value = layer.get(position); + if ( + value !== constants.UNICODE.lineHorizontal && + value !== constants.UNICODE.lineVertical + ) { + throw new Error(`Expected line, got ${value}`); + } + const directions = + value === constants.UNICODE.lineHorizontal + ? [Direction.LEFT, Direction.RIGHT] + : [Direction.UP, Direction.DOWN]; + const attachmentDirections = + value === constants.UNICODE.lineHorizontal + ? [Direction.UP, Direction.DOWN] + : [Direction.LEFT, Direction.RIGHT]; + + const positions: Vector[] = [position]; + const attachments: ILineAttachmentTrace[] = []; + for (const direction of directions) { + let currentPosition = position; + while (true) { + const nextPosition = currentPosition.add(direction); if ( - isSpecial(store.currentCanvas.committed.get(newPos)) && - contextSum > bestContextSum + !connects(layer.get(currentPosition), direction) || + !connects(layer.get(nextPosition), direction.opposite()) ) { - bestDirection = direction; - bestContextSum = contextSum; + break; } + currentPosition = nextPosition; + positions.push(currentPosition); } - if (bestDirection == null) { - // Didn't find anything, so just return the current cell. - return position; - } - return position.add(bestDirection); } - getCursor(position: Vector) { - if (isSpecial(store.currentCanvas.committed.get(position))) { - return "move"; - } else { - return "default"; + for (const currentPosition of positions) { + // Find any attachments. + for (const attachmentDirection of attachmentDirections) { + if ( + connects(layer.get(currentPosition), attachmentDirection) && + connects( + layer.get(currentPosition.add(attachmentDirection)), + attachmentDirection.opposite() + ) + ) { + attachments.push( + traceAttachment( + layer, + currentPosition.add(attachmentDirection), + attachmentDirection + ) + ); + } + if ( + isArrow(layer.get(currentPosition.add(attachmentDirection))) && + connects( + layer.get(currentPosition.add(attachmentDirection.scale(2))), + attachmentDirection.opposite() + ) + ) { + positions.push(currentPosition.add(attachmentDirection)); + attachments.push( + traceAttachment( + layer, + currentPosition.add(attachmentDirection.scale(2)), + attachmentDirection + ) + ); + } } } - handleKey(value: string) {} + return { + orientation: + value === constants.UNICODE.lineHorizontal ? "horizontal" : "vertical", + positions, + attachments, + }; +} + +function traceAttachment( + layer: Layer, + position: Vector, + direction: Direction +): ILineAttachmentTrace { + const traceValue = + direction === Direction.LEFT || direction === Direction.RIGHT + ? constants.UNICODE.lineHorizontal + : constants.UNICODE.lineVertical; + const sourceValue = layer.get(position); + let tracePosition = position; + while (true) { + const nextPosition = tracePosition.add(direction); + if (layer.get(nextPosition) !== traceValue) { + break; + } + tracePosition = nextPosition; + } + return { + source: position, + end: tracePosition, + sourceValue, + direction, + }; } diff --git a/client/draw/select.ts b/client/draw/select.ts index 05dbfaa..f1e82e2 100644 --- a/client/draw/select.ts +++ b/client/draw/select.ts @@ -10,6 +10,7 @@ import { import { AbstractDrawFunction } from "#asciiflow/client/draw/function"; import { DrawMove } from "#asciiflow/client/draw/move"; import { Layer } from "#asciiflow/client/layer"; +import { snap } from "#asciiflow/client/snap"; import { IModifierKeys, store } from "#asciiflow/client/store"; import { layerToText, textToLayer } from "#asciiflow/client/text_utils"; import { Vector } from "#asciiflow/client/vector"; @@ -107,6 +108,8 @@ export class DrawSelect extends AbstractDrawFunction { } }); + layer.setFrom(snap(layer, store.currentCanvas.committed)); + store.currentCanvas.setScratchLayer(layer); } @@ -141,7 +144,7 @@ export class DrawSelect extends AbstractDrawFunction { // Use the native keyboard for copy pasting. if (value === KEY_COPY || value === KEY_CUT) { const copiedText = layerToText( - store.currentCanvas.rendered, + store.currentCanvas.committed, this.selectBox ); navigator.clipboard.writeText(copiedText); @@ -153,6 +156,9 @@ export class DrawSelect extends AbstractDrawFunction { layer.set(key, ""); } }); + + layer.setFrom(snap(layer, store.currentCanvas.committed)); + store.currentCanvas.setScratchLayer(layer); store.currentCanvas.commitScratch(); } @@ -164,6 +170,9 @@ export class DrawSelect extends AbstractDrawFunction { layer.set(key, ""); } }); + + layer.setFrom(snap(layer, store.currentCanvas.committed)); + store.currentCanvas.setScratchLayer(layer); store.currentCanvas.commitScratch(); } diff --git a/client/draw/utils.ts b/client/draw/utils.ts index 71fe2ac..e0377df 100644 --- a/client/draw/utils.ts +++ b/client/draw/utils.ts @@ -1,39 +1,78 @@ -import { Box } from "#asciiflow/client/common"; -import { SPECIAL_VALUE } from "#asciiflow/client/constants"; +import { UNICODE } from "#asciiflow/client/constants"; import { Layer } from "#asciiflow/client/layer"; import { Vector } from "#asciiflow/client/vector"; +export function line( + startPosition: Vector, + endPosition: Vector, + horizontalFirst?: boolean +) { + if (startPosition.x === endPosition.x || startPosition.y === endPosition.y) { + return straightLine(startPosition, endPosition); + } else { + return cornerLine(startPosition, endPosition, horizontalFirst); + } +} + /** * Draws a line on the diagram state. */ -export function drawLine( - layer: Layer, +export function cornerLine( startPosition: Vector, endPosition: Vector, - clockwise: boolean, - value = SPECIAL_VALUE + horizontalFirst?: boolean ) { - const box = new Box(startPosition, endPosition); - let startX = box.topLeft().x; - let startY = box.topLeft().y; - const endX = box.bottomRight().x; - const endY = box.bottomRight().y; + const cornerPosition = horizontalFirst + ? new Vector(endPosition.x, startPosition.y) + : new Vector(startPosition.x, endPosition.y); - const midX = clockwise ? endPosition.x : startPosition.x; - const midY = clockwise ? startPosition.y : endPosition.y; + let layer = new Layer(); + layer = layer.apply(straightLine(startPosition, cornerPosition))[0]; + layer = layer.apply(straightLine(cornerPosition, endPosition))[0]; - while (startX++ < endX) { - const position = new Vector(startX, midY); - layer.set(position, value); + layer.set( + cornerPosition, + horizontalFirst + ? startPosition.x < endPosition.x + ? startPosition.y < endPosition.y + ? UNICODE.cornerTopRight + : UNICODE.cornerBottomRight + : startPosition.y < endPosition.y + ? UNICODE.cornerTopLeft + : UNICODE.cornerBottomLeft + : startPosition.y < endPosition.y + ? startPosition.x < endPosition.x + ? UNICODE.cornerBottomLeft + : UNICODE.cornerBottomRight + : startPosition.x < endPosition.x + ? UNICODE.cornerTopLeft + : UNICODE.cornerTopRight + ); + return layer; +} + +function straightLine(startPosition: Vector, endPosition: Vector) { + const layer = new Layer(); + if (startPosition.x !== endPosition.x && startPosition.y !== endPosition.y) { + throw new Error( + `Can't draw a straight line between points ${startPosition} and ${endPosition}` + ); + } + if (startPosition.x === endPosition.x) { + const top = Math.min(startPosition.y, endPosition.y); + const bottom = Math.max(startPosition.y, endPosition.y); + for (let y = top; y <= bottom; y++) { + layer.set(new Vector(startPosition.x, y), UNICODE.lineVertical); + } } - while (startY++ < endY) { - const position = new Vector(midX, startY); - layer.set(position, value); + if (startPosition.y === endPosition.y) { + const left = Math.min(startPosition.x, endPosition.x); + const right = Math.max(startPosition.x, endPosition.x); + for (let x = left; x <= right; x++) { + layer.set(new Vector(x, startPosition.y), UNICODE.lineHorizontal); + } } - - layer.set(startPosition, value); - layer.set(endPosition, value); - layer.set(new Vector(midX, midY), value); + return layer; } /** diff --git a/client/drawer.tsx b/client/drawer.tsx index 4f9a693..ebeb79c 100644 --- a/client/drawer.tsx +++ b/client/drawer.tsx @@ -1,39 +1,33 @@ -import * as React from "react"; -import MaterialDrawer from "@material-ui/core/Drawer"; +import { ControlledDialog } from "#asciiflow/client/components/controlled_dialog"; +import { ControlledMenu } from "#asciiflow/client/components/controlled_menu"; +import { ASCII, UNICODE } from "#asciiflow/client/constants"; import styles from "#asciiflow/client/drawer.module.css"; +import { ExportDialog } from "#asciiflow/client/export"; +import { DrawingId, store, ToolMode } from "#asciiflow/client/store"; +import { DrawingStringifier } from "#asciiflow/client/store/drawing_stringifier"; import { + Button, + Chip, + DialogContent, + DialogTitle, + Fab, + IconButton, List, ListItem, ListItemIcon, - ListItemText, - IconButton, - Collapse, - Paper, ListItemSecondaryAction, - ListSubheader, - Chip, + ListItemText, MenuItem, - MenuList, - DialogTitle, - DialogContent, - DialogActions, - Button, - TextField, - Snackbar, - Fab, + Paper, Popover, + Snackbar, + TextField } from "@material-ui/core"; import * as Icons from "@material-ui/icons"; import { useObserver } from "mobx-react"; -import { DrawingId, store, ToolMode } from "#asciiflow/client/store"; -import { ControlledMenu } from "#asciiflow/client/components/controlled_menu"; -import { IRouteProps } from "#asciiflow/client/app"; -import { ControlledDialog } from "#asciiflow/client/components/controlled_dialog"; -import { useHistory } from "react-router"; -import { DrawingStringifier } from "#asciiflow/client/store/drawing_stringifier"; -import { ExportDialog } from "#asciiflow/client/export"; +import * as React from "react"; import { useState } from "react"; -import { ASCII, UNICODE } from "#asciiflow/client/constants"; +import { useHistory } from "react-router"; export function Drawer() { const history = useHistory(); diff --git a/client/export.tsx b/client/export.tsx index c2122b1..4e76726 100644 --- a/client/export.tsx +++ b/client/export.tsx @@ -37,7 +37,7 @@ export function ExportDialog({ const exportConfig = store.exportConfig.get(); // Only compute the text if the dialog is open. const drawingText = open - ? applyConfig(layerToText(store.canvas(drawingId).rendered), exportConfig) + ? applyConfig(layerToText(store.canvas(drawingId).committed), exportConfig) : ""; return ( <> diff --git a/client/layer.ts b/client/layer.ts index a1a815e..9eda0fc 100644 --- a/client/layer.ts +++ b/client/layer.ts @@ -1,68 +1,24 @@ -import { Vector } from "#asciiflow/client/vector"; -import { CellContext } from "#asciiflow/client/common"; -import * as constants from "#asciiflow/client/constants"; +import { LegacyRenderLayer } from "#asciiflow/client/render_layer"; import { layerToText, textToLayer } from "#asciiflow/client/text_utils"; +import { Vector } from "#asciiflow/client/vector"; export interface ILayerView { get(position: Vector): string; - context(position: Vector): CellContext; keys(): Vector[]; entries(): [Vector, string][]; } -export abstract class AbstractLayer implements ILayerView { - abstract get(position: Vector): string; - abstract keys(): Vector[]; - - context(position: Vector): CellContext { - const left = constants.ALL_SPECIAL_VALUES.includes( - this.get(position.left()) - ); - const right = constants.ALL_SPECIAL_VALUES.includes( - this.get(position.right()) - ); - const up = constants.ALL_SPECIAL_VALUES.includes(this.get(position.up())); - const down = constants.ALL_SPECIAL_VALUES.includes( - this.get(position.down()) - ); - const leftup = constants.ALL_SPECIAL_VALUES.includes( - this.get(position.left().up()) - ); - const leftdown = constants.ALL_SPECIAL_VALUES.includes( - this.get(position.left().down()) - ); - const rightup = constants.ALL_SPECIAL_VALUES.includes( - this.get(position.right().up()) - ); - const rightdown = constants.ALL_SPECIAL_VALUES.includes( - this.get(position.right().down()) - ); - return new CellContext( - left, - right, - up, - down, - leftup, - leftdown, - rightup, - rightdown - ); - } - - public entries() { - return this.keys().map((key) => [key, this.get(key)] as [Vector, string]); - } -} - interface ILayerJSON { + version: number; x: number; y: number; text: string; } -export class Layer extends AbstractLayer { - public static serialize = (value: Layer) => { +export class Layer implements ILayerView { + public static serialize(value: Layer) { // Most efficient format seems to be to just store the drawing as plain text with an offset. return JSON.stringify({ + version: 2, x: value .entries() .reduce((acc, [key]) => Math.min(acc, key.x), Number.MAX_SAFE_INTEGER), @@ -71,13 +27,25 @@ export class Layer extends AbstractLayer { .reduce((acc, [key]) => Math.min(acc, key.y), Number.MAX_SAFE_INTEGER), text: layerToText(value), } as ILayerJSON); - }; + } - public static deserialize = (value: string) => { + public static deserialize(value: string) { const object = JSON.parse(value) as ILayerJSON; + // Version 1 is the original format. + if (!!object.version) { + const fixedLayer = new Layer(); + const legacyRenderedLayer = new LegacyRenderLayer( + textToLayer(object.text, new Vector(object.x, object.y)) + ); + fixedLayer.setFrom(legacyRenderedLayer); + return fixedLayer; + } return textToLayer(object.text, new Vector(object.x, object.y)); - }; + } + public entries() { + return this.keys().map((key) => [key, this.get(key)] as [Vector, string]); + } public map = new Map(); public delete(position?: Vector) { @@ -92,6 +60,12 @@ export class Layer extends AbstractLayer { this.map.set(position.toString(), value); } + public setFrom(layer: ILayerView) { + for (const [key, value] of layer.entries()) { + this.set(key, value); + } + } + public get(position: Vector) { const key = position.toString(); return this.map.has(key) ? this.map.get(position.toString()) : null; @@ -132,10 +106,8 @@ export class Layer extends AbstractLayer { } } -export class LayerView extends AbstractLayer { - public constructor(private layers: Layer[]) { - super(); - } +export class LayerView implements ILayerView { + public constructor(private layers: Layer[]) {} keys(): Vector[] { const keys = new Set(); @@ -157,4 +129,8 @@ export class LayerView extends AbstractLayer { } return null; } + + public entries() { + return this.keys().map((key) => [key, this.get(key)] as [Vector, string]); + } } diff --git a/client/render_layer.ts b/client/render_layer.ts index 9a561f2..8e5b0c9 100644 --- a/client/render_layer.ts +++ b/client/render_layer.ts @@ -1,24 +1,20 @@ import { CellContext } from "#asciiflow/client/common"; import { Characters } from "#asciiflow/client/constants"; -import { AbstractLayer, ILayerView } from "#asciiflow/client/layer"; -import { store } from "#asciiflow/client/store"; +import { ILayerView } from "#asciiflow/client/layer"; import { Vector } from "#asciiflow/client/vector"; import * as constants from "#asciiflow/client/constants"; -/** - * This is where the "magic" happens. Rules are applied to the underlying drawing to determine what the rendered character should be. - * This mostly handles logic such as junctions and arrows so things render correctly and all the lines match up etc. - */ -export class RenderLayer extends AbstractLayer { - constructor(private baseLayer: ILayerView) { - super(); - } +export class LegacyRenderLayer implements ILayerView { + constructor(private baseLayer: ILayerView) {} keys(): Vector[] { return this.baseLayer.keys(); } + public entries() { + return this.keys().map((key) => [key, this.get(key)] as [Vector, string]); + } get(position: Vector): string { - const characterSet = store.characters; + const characterSet = constants.UNICODE; const combined = this.baseLayer; const value = combined.get(position); @@ -27,7 +23,7 @@ export class RenderLayer extends AbstractLayer { if (isArrow) { // In some situations, we can be certain about arrow orientation. - const context = combined.context(position); + const context = cellContext(position, combined); if (context.sum() === 1) { if (context.up) { @@ -91,7 +87,7 @@ export class RenderLayer extends AbstractLayer { } if (isLine) { - const context = combined.context(position); + const context = cellContext(position, combined); // Terminating character in a line. if (context.sum() === 1) { @@ -258,7 +254,39 @@ export class RenderLayer extends AbstractLayer { return value; } - context(position: Vector): CellContext { - return this.baseLayer.context(position); - } +} + +export function cellContext(position: Vector, layer: ILayerView): CellContext { + const left = constants.ALL_SPECIAL_VALUES.includes( + layer.get(position.left()) + ); + const right = constants.ALL_SPECIAL_VALUES.includes( + layer.get(position.right()) + ); + const up = constants.ALL_SPECIAL_VALUES.includes(layer.get(position.up())); + const down = constants.ALL_SPECIAL_VALUES.includes( + layer.get(position.down()) + ); + const leftup = constants.ALL_SPECIAL_VALUES.includes( + layer.get(position.left().up()) + ); + const leftdown = constants.ALL_SPECIAL_VALUES.includes( + layer.get(position.left().down()) + ); + const rightup = constants.ALL_SPECIAL_VALUES.includes( + layer.get(position.right().up()) + ); + const rightdown = constants.ALL_SPECIAL_VALUES.includes( + layer.get(position.right().down()) + ); + return new CellContext( + left, + right, + up, + down, + leftup, + leftdown, + rightup, + rightdown + ); } diff --git a/client/snap.ts b/client/snap.ts new file mode 100644 index 0000000..26b4f1c --- /dev/null +++ b/client/snap.ts @@ -0,0 +1,78 @@ +import { + connect, + connectable, + connects, + disconnect, + isBoxDrawing, +} from "#asciiflow/client/characters"; +import { Direction } from "#asciiflow/client/direction"; +import { Layer, LayerView } from "#asciiflow/client/layer"; + +export function snap(scratch: Layer, committed: Layer) { + const layer = new Layer(); + const modifiedScratch = new LayerView([scratch, layer]); + for (const position of scratch.keys()) { + const value = scratch.get(position); + if (!isBoxDrawing(value)) { + continue; + } + for (const direction of Direction.ALL) { + const adjacentPosition = position.add(direction); + // Don't snap to other scratch box drawing characters. + if (scratch.has(adjacentPosition)) { + continue; + } + const adjacentValue = committed.get(adjacentPosition); + // Only snap to box drawing characters. + if (!isBoxDrawing(adjacentValue)) { + continue; + } + // Connect to adjacent box drawing characters. + if ( + connects(adjacentValue, direction.opposite()) && + !connects(value, direction) && + connectable(value, direction) + ) { + layer.set( + position, + connect(modifiedScratch.get(position), [direction]) + ); + } + // Connect adjacent box drawing characters to this character. + if ( + connects(value, direction) && + !connects(adjacentValue, direction.opposite()) && + connectable(adjacentValue, direction.opposite()) + ) { + layer.set( + adjacentPosition, + connect(adjacentValue, [direction.opposite()]) + ); + } + } + } + // Unsnap from any characters that have been deleted. + for (const position of scratch.keys()) { + const value = scratch.get(position); + if (value !== "" && value !== " ") { + continue; + } + for (const direction of Direction.ALL) { + const adjacentPosition = position.add(direction); + if (scratch.has(adjacentPosition)) { + continue; + } + const adjacentValue = committed.get(adjacentPosition); + if (!isBoxDrawing(adjacentValue)) { + continue; + } + if (connects(adjacentValue, direction.opposite())) { + layer.set( + adjacentPosition, + disconnect(adjacentValue, direction.opposite()) + ); + } + } + } + return layer; +} diff --git a/client/store/canvas.ts b/client/store/canvas.ts index 850dd86..e50c131 100644 --- a/client/store/canvas.ts +++ b/client/store/canvas.ts @@ -1,14 +1,13 @@ -import { Box, CellContext } from "#asciiflow/client/common"; +import { Box } from "#asciiflow/client/common"; import * as constants from "#asciiflow/client/constants"; import { Layer, LayerView } from "#asciiflow/client/layer"; -import { DrawingId, store } from "#asciiflow/client/store"; +import { DrawingId } from "#asciiflow/client/store"; +import { DrawingStringifier } from "#asciiflow/client/store/drawing_stringifier"; import { Persistent } from "#asciiflow/client/store/persistent"; import { ArrayStringifier } from "#asciiflow/client/store/stringifiers"; import { IVector, Vector } from "#asciiflow/client/vector"; -import { action, makeAutoObservable, observable } from "mobx"; -import { Characters } from "#asciiflow/client/constants"; -import { DrawingStringifier } from "#asciiflow/client/store/drawing_stringifier"; -import { RenderLayer } from "#asciiflow/client/render_layer"; +import { action, observable } from "mobx"; + /** * Holds the entire state of the diagram as a 2D array of cells @@ -121,14 +120,6 @@ export class CanvasStore { this.scratch = new Layer(); } - /** - * Returns the draw value of a cell at the given position. - */ - - get rendered() { - return new RenderLayer(this.combined); - } - /** * Ends the current draw, commiting anything currently drawn on the scratch layer. */ diff --git a/client/store/index.ts b/client/store/index.ts index 3a478f4..9b39b74 100644 --- a/client/store/index.ts +++ b/client/store/index.ts @@ -153,7 +153,7 @@ export class Store { @observable accessor altPressed = false; - public currentCursor: string = "default"; + @observable accessor currentCursor: string = "default"; public readonly darkMode = Persistent.json( "darkMode", @@ -182,7 +182,7 @@ export class Store { return this.panning ? "move" : this.currentCursor; } - public setCurrentCursor(value: string) { + @action.bound public setCurrentCursor(value: string) { this.currentCursor = value; } @@ -304,7 +304,7 @@ export class Store { function generateId() { const hex = uuid.v4().replace(/\-/g, ""); - return hex.substr(0, 16); + return hex.substring(0, 16); } export const store = new Store(); diff --git a/client/vector.ts b/client/vector.ts index af47b08..5806054 100644 --- a/client/vector.ts +++ b/client/vector.ts @@ -6,7 +6,15 @@ export interface IVector { x: number; y: number; } + export class Vector implements IVector { + public static serialize(value: Vector) { + return value.toString(); + } + public static deserialize(value: string) { + return Vector.fromString(value); + } + constructor(public x: number, public y: number) {} // TODO: These shouldn't be here. @@ -40,10 +48,6 @@ export class Vector implements IVector { return new Vector(this.x + other.x, this.y + other.y); } - clone() { - return new Vector(this.x, this.y); - } - length() { return Math.sqrt(this.x * this.x + this.y * this.y); } diff --git a/client/view.tsx b/client/view.tsx index 51aa11a..bfe1a25 100644 --- a/client/view.tsx +++ b/client/view.tsx @@ -83,7 +83,6 @@ function render(canvas: HTMLCanvasElement) { const committed = store.currentCanvas.committed; const scratch = store.currentCanvas.scratch; const selection = store.currentCanvas.selection; - const rendered = store.currentCanvas.rendered; const context = canvas.getContext("2d"); context.setTransform(1, 0, 0, 1, 0, 0); @@ -173,12 +172,12 @@ function render(canvas: HTMLCanvasElement) { if (constants.ALL_SPECIAL_VALUES.includes(value)) { // highlight(position, colors.highlight); } - const cellValue = rendered.get(position); + const cellValue = committed.get(position); text(position, cellValue); } for (const [position] of scratch.entries()) { highlight(position, colors.highlight); - const cellValue = rendered.get(position); + const cellValue = committed.get(position); text(position, cellValue); } From 394b3cd2ef8b85eb50352deda3c3778df838f9d1 Mon Sep 17 00:00:00 2001 From: Lewis Hemens Date: Thu, 30 May 2024 22:24:26 +0100 Subject: [PATCH 05/10] Fix scratch layer rendering --- client/view.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/client/view.tsx b/client/view.tsx index bfe1a25..23dbd4e 100644 --- a/client/view.tsx +++ b/client/view.tsx @@ -169,15 +169,12 @@ function render(canvas: HTMLCanvasElement) { } } for (const [position, value] of committed.entries()) { - if (constants.ALL_SPECIAL_VALUES.includes(value)) { - // highlight(position, colors.highlight); - } const cellValue = committed.get(position); text(position, cellValue); } for (const [position] of scratch.entries()) { highlight(position, colors.highlight); - const cellValue = committed.get(position); + const cellValue = scratch.get(position); text(position, cellValue); } From 5f37c61e5708d6ed832031ac0dc94cea793c7cd3 Mon Sep 17 00:00:00 2001 From: Ivan Akulov Date: Wed, 12 Jun 2024 22:32:45 +0200 Subject: [PATCH 06/10] `preventDefault()` on Cmd+Z/Cmd+Shift+Z/Cmd+Y (#301) This commit calls `preventDefault()` for a few keyboard shortcuts. Partially addresses https://github.com/lewish/asciiflow/issues/189 --- client/controller.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/controller.ts b/client/controller.ts index 1fb0275..edb6837 100644 --- a/client/controller.ts +++ b/client/controller.ts @@ -103,9 +103,13 @@ export class Controller { } else { store.currentCanvas.undo(); } + // Disable browser-specific behavior on Cmd/Ctrl+Z: https://github.com/lewish/asciiflow/issues/189 + event.preventDefault(); } if (event.keyCode === 89) { store.currentCanvas.redo(); + // Disable browser-specific behavior on Cmd/Ctrl+Y: https://github.com/lewish/asciiflow/issues/189 + event.preventDefault(); } if (event.keyCode === 88) { specialKeyCode = constants.KEY_CUT; From ed4d8cb668cbf6916880863130e4da6a79e2c230 Mon Sep 17 00:00:00 2001 From: Lewis Hemens Date: Mon, 8 Jul 2024 16:09:52 +0100 Subject: [PATCH 07/10] Remove mobx and legacy version (#309) * Remove legacy version * Remove mobx so we can write some tests --- MODULE.bazel.lock | 1150 +++++++++++++++++++---------- client/BUILD | 4 +- client/app.tsx | 7 +- client/controller.ts | 19 +- client/draw/freeform.ts | 6 +- client/draw/line.ts | 10 +- client/draw/move.ts | 2 - client/draw/select.ts | 7 +- client/draw/text.ts | 3 + client/drawer.tsx | 37 +- client/export.tsx | 4 +- client/menu/files.scss | 0 client/menu/files.tsx | 8 - client/store/canvas.ts | 117 +-- client/store/index.ts | 126 ++-- client/store/persistent.ts | 16 +- client/view.tsx | 18 +- common/BUILD | 32 + common/watchable.spec.ts | 93 +++ common/watchable.ts | 154 ++++ legacy/BUILD | 6 - legacy/addtohomescreen.css | 234 ------ legacy/addtohomescreen.min.js | 2 - legacy/css/pygment_trac.css | 70 -- legacy/css/style.css | 97 --- legacy/images/arrow-icon.gif | Bin 2876 -> 0 bytes legacy/images/bg_hr.png | Bin 943 -> 0 bytes legacy/images/blacktocat.png | Bin 1428 -> 0 bytes legacy/images/box-icon.gif | Bin 6096 -> 0 bytes legacy/images/box-icon.png | Bin 2964 -> 0 bytes legacy/images/clear-icon.gif | Bin 9851 -> 0 bytes legacy/images/diagram.png | Bin 3813 -> 0 bytes legacy/images/drive-icon.gif | Bin 9819 -> 0 bytes legacy/images/drive-icon.png | Bin 36647 -> 0 bytes legacy/images/erase-icon.gif | Bin 8456 -> 0 bytes legacy/images/erase-icon.png | Bin 7882 -> 0 bytes legacy/images/export-icon.gif | Bin 5917 -> 0 bytes legacy/images/favicon.png | Bin 4726 -> 0 bytes legacy/images/freeform-icon.gif | Bin 8287 -> 0 bytes legacy/images/freeform-icon.png | Bin 6699 -> 0 bytes legacy/images/icon_download.png | Bin 1162 -> 0 bytes legacy/images/import-icon.gif | Bin 5968 -> 0 bytes legacy/images/info-icon.gif | Bin 7058 -> 0 bytes legacy/images/info-icon.png | Bin 6992 -> 0 bytes legacy/images/line-icon.gif | Bin 3061 -> 0 bytes legacy/images/line-icon.png | Bin 2712 -> 0 bytes legacy/images/logo-bar.gif | Bin 3977 -> 0 bytes legacy/images/logo-full.gif | Bin 9145 -> 0 bytes legacy/images/logo-full.png | Bin 14285 -> 0 bytes legacy/images/logo-options.gif | Bin 4949 -> 0 bytes legacy/images/move-icon.gif | Bin 8020 -> 0 bytes legacy/images/move-icon.png | Bin 7014 -> 0 bytes legacy/images/redo-icon.gif | Bin 8372 -> 0 bytes legacy/images/select-icon.gif | Bin 8575 -> 0 bytes legacy/images/sprite_download.png | Bin 16799 -> 0 bytes legacy/images/text-icon.gif | Bin 9020 -> 0 bytes legacy/images/text-icon.png | Bin 7509 -> 0 bytes legacy/images/undo-icon.gif | Bin 8353 -> 0 bytes legacy/index.html | 627 ---------------- legacy/jquery-3.1.1.min.js | 4 - legacy/js-compiled.js | 992 ------------------------- package.json | 5 +- pnpm-lock.yaml | 150 ++-- site/BUILD | 5 - tsconfig.json | 2 +- 65 files changed, 1325 insertions(+), 2682 deletions(-) delete mode 100644 client/menu/files.scss delete mode 100644 client/menu/files.tsx create mode 100644 common/BUILD create mode 100644 common/watchable.spec.ts create mode 100644 common/watchable.ts delete mode 100644 legacy/BUILD delete mode 100644 legacy/addtohomescreen.css delete mode 100644 legacy/addtohomescreen.min.js delete mode 100644 legacy/css/pygment_trac.css delete mode 100644 legacy/css/style.css delete mode 100644 legacy/images/arrow-icon.gif delete mode 100644 legacy/images/bg_hr.png delete mode 100644 legacy/images/blacktocat.png delete mode 100644 legacy/images/box-icon.gif delete mode 100644 legacy/images/box-icon.png delete mode 100644 legacy/images/clear-icon.gif delete mode 100644 legacy/images/diagram.png delete mode 100644 legacy/images/drive-icon.gif delete mode 100644 legacy/images/drive-icon.png delete mode 100644 legacy/images/erase-icon.gif delete mode 100644 legacy/images/erase-icon.png delete mode 100644 legacy/images/export-icon.gif delete mode 100755 legacy/images/favicon.png delete mode 100644 legacy/images/freeform-icon.gif delete mode 100644 legacy/images/freeform-icon.png delete mode 100644 legacy/images/icon_download.png delete mode 100644 legacy/images/import-icon.gif delete mode 100644 legacy/images/info-icon.gif delete mode 100644 legacy/images/info-icon.png delete mode 100644 legacy/images/line-icon.gif delete mode 100644 legacy/images/line-icon.png delete mode 100644 legacy/images/logo-bar.gif delete mode 100644 legacy/images/logo-full.gif delete mode 100644 legacy/images/logo-full.png delete mode 100644 legacy/images/logo-options.gif delete mode 100644 legacy/images/move-icon.gif delete mode 100644 legacy/images/move-icon.png delete mode 100644 legacy/images/redo-icon.gif delete mode 100644 legacy/images/select-icon.gif delete mode 100644 legacy/images/sprite_download.png delete mode 100644 legacy/images/text-icon.gif delete mode 100644 legacy/images/text-icon.png delete mode 100644 legacy/images/undo-icon.gif delete mode 100755 legacy/index.html delete mode 100644 legacy/jquery-3.1.1.min.js delete mode 100644 legacy/js-compiled.js diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index b23e73e..764cd18 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1924,7 +1924,7 @@ "general": { "bzlTransitiveDigest": "1AgLnqJKLQ3oVnMjCFAnZu9xkVBlccfPNkYRAnC0R10=", "accumulatedFileDigests": { - "@@//:pnpm-lock.yaml": "2a671c3fe710ca9773224102fe1f414af7e8ac030f73569cb12ecee281e8d5ae" + "@@//:pnpm-lock.yaml": "6aba6df0ea3b6c452d7afaf56acd5f6cee8b3961b12a115d72483ea540ff43af" }, "envVariables": {}, "generatedRepoSpecs": { @@ -5774,6 +5774,31 @@ ] } }, + "npm__at_sinonjs_commons__3.0.1": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_commons__3.0.1", + "package": "@sinonjs/commons", + "version": "3.0.1", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "url": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__ws__8.16.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -8179,6 +8204,40 @@ ] } }, + "npm__at_sinonjs_fake-timers__11.2.2__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_fake-timers__11.2.2__links", + "package": "@sinonjs/fake-timers", + "version": "11.2.2", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "@sinonjs/commons": "3.0.1" + }, + "transitive_closure": { + "@sinonjs/commons": [ + "3.0.1" + ], + "@sinonjs/fake-timers": [ + "11.2.2" + ], + "type-detect": [ + "4.0.8" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__array-flatten__1.1.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -10865,6 +10924,31 @@ "generate_bzl_library_targets": false } }, + "npm__path-to-regexp__6.2.2": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__path-to-regexp__6.2.2", + "package": "path-to-regexp", + "version": "6.2.2", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", + "url": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__resolve-alpn__1.2.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -11152,6 +11236,45 @@ "generate_bzl_library_targets": false } }, + "npm__at_sinonjs_samsam__8.0.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_samsam__8.0.0__links", + "package": "@sinonjs/samsam", + "version": "8.0.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "@sinonjs/commons": "2.0.0", + "lodash.get": "4.4.2", + "type-detect": "4.0.8" + }, + "transitive_closure": { + "@sinonjs/commons": [ + "2.0.0" + ], + "@sinonjs/samsam": [ + "8.0.0" + ], + "lodash.get": [ + "4.4.2" + ], + "type-detect": [ + "4.0.8" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__at_babel_highlight__7.23.4": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -12120,6 +12243,32 @@ ] } }, + "npm__lodash.get__4.4.2__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__lodash.get__4.4.2__links", + "package": "lodash.get", + "version": "4.4.2", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "lodash.get": [ + "4.4.2" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__deep-eql__4.1.3": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -12303,6 +12452,31 @@ ] } }, + "npm__at_types_sinonjs__fake-timers__8.1.5": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_sinonjs__fake-timers__8.1.5", + "package": "@types/sinonjs__fake-timers", + "version": "8.1.5", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "url": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__es-module-lexer__1.4.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -13683,6 +13857,31 @@ "generate_bzl_library_targets": false } }, + "npm__diff__5.2.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__diff__5.2.0", + "package": "diff", + "version": "5.2.0", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "url": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__at_babel_plugin-transform-optional-chaining__7.23.4__at_babel_core_7.23.9": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -16236,6 +16435,37 @@ "generate_bzl_library_targets": false } }, + "npm__at_sinonjs_commons__3.0.1__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_commons__3.0.1__links", + "package": "@sinonjs/commons", + "version": "3.0.1", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "type-detect": "4.0.8" + }, + "transitive_closure": { + "@sinonjs/commons": [ + "3.0.1" + ], + "type-detect": [ + "4.0.8" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__http-errors__2.0.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -17129,6 +17359,31 @@ ] } }, + "npm__at_sinonjs_commons__2.0.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_commons__2.0.0", + "package": "@sinonjs/commons", + "version": "2.0.0", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "url": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__react-dom__16.14.0__react_16.14.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -19921,29 +20176,30 @@ ] } }, - "npm__use-sync-external-store__1.2.0__react_16.14.0": { + "npm__at_types_sinonjs__fake-timers__8.1.5__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", + "ruleClassName": "npm_import_links", "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__use-sync-external-store__1.2.0__react_16.14.0", - "package": "use-sync-external-store", - "version": "1.2.0_react_16.14.0", + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_sinonjs__fake-timers__8.1.5__links", + "package": "@types/sinonjs__fake-timers", + "version": "8.1.5", + "dev": false, "root_package": "", - "link_workspace": "", "link_packages": {}, - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "url": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false + "deps": {}, + "transitive_closure": { + "@types/sinonjs__fake-timers": [ + "8.1.5" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] } }, "npm__entities__2.2.0": { @@ -20643,6 +20899,32 @@ "generate_bzl_library_targets": false } }, + "npm__diff__5.2.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__diff__5.2.0__links", + "package": "diff", + "version": "5.2.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "diff": [ + "5.2.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__ms__2.0.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -21432,6 +21714,31 @@ ] } }, + "npm__at_sinonjs_samsam__8.0.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_samsam__8.0.0", + "package": "@sinonjs/samsam", + "version": "8.0.0", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", + "url": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__brace-expansion__2.0.1__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -23436,35 +23743,6 @@ "generate_bzl_library_targets": false } }, - "npm__mobx__6.12.0": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__mobx__6.12.0", - "package": "mobx", - "version": "6.12.0", - "root_package": "", - "link_workspace": "", - "link_packages": { - "": [ - "mobx" - ] - }, - "integrity": "sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==", - "url": "https://registry.npmjs.org/mobx/-/mobx-6.12.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, "npm__at_babel_plugin-syntax-import-assertions__7.23.3__at_babel_core_7.23.9__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -24602,31 +24880,6 @@ ] } }, - "npm__mobx-react-lite__4.0.5__-901741053": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__mobx-react-lite__4.0.5__-901741053", - "package": "mobx-react-lite", - "version": "4.0.5_-901741053", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-StfB2wxE8imKj1f6T8WWPf4lVMx3cYH9Iy60bbKXEs21+HQ4tvvfIBZfSmMXgQAefi8xYEwQIz4GN9s0d2h7dg==", - "url": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.0.5.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, "npm__glob-to-regexp__0.4.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -34055,6 +34308,37 @@ ] } }, + "npm__at_sinonjs_commons__2.0.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_commons__2.0.0__links", + "package": "@sinonjs/commons", + "version": "2.0.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "type-detect": "4.0.8" + }, + "transitive_closure": { + "@sinonjs/commons": [ + "2.0.0" + ], + "type-detect": [ + "4.0.8" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__call-bind__1.0.7__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -36235,6 +36519,35 @@ ] } }, + "npm__sinon__18.0.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__sinon__18.0.0", + "package": "sinon", + "version": "18.0.0", + "root_package": "", + "link_workspace": "", + "link_packages": { + "": [ + "sinon" + ] + }, + "integrity": "sha512-+dXDXzD1sBO6HlmZDd7mXZCR/y5ECiEiGCBSGuFD/kZ0bDTofPYc6JaeGmPSF+1j1MejGUWkORbYOLDyvqCWpA==", + "url": "https://registry.npmjs.org/sinon/-/sinon-18.0.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__postcss-modules-values__4.0.0__postcss_8.4.35__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -37843,6 +38156,31 @@ "generate_bzl_library_targets": false } }, + "npm__at_sinonjs_fake-timers__11.2.2": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_fake-timers__11.2.2", + "package": "@sinonjs/fake-timers", + "version": "11.2.2", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", + "url": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__at_types_express__4.17.21": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -38423,6 +38761,31 @@ ] } }, + "npm__just-extend__6.2.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__just-extend__6.2.0", + "package": "just-extend", + "version": "6.2.0", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "url": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__flat__5.0.2": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -38869,35 +39232,6 @@ "generate_bzl_library_targets": false } }, - "npm__mobx-react__9.1.0__-901741053": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__mobx-react__9.1.0__-901741053", - "package": "mobx-react", - "version": "9.1.0_-901741053", - "root_package": "", - "link_workspace": "", - "link_packages": { - "": [ - "mobx-react" - ] - }, - "integrity": "sha512-DeDRTYw4AlgHw8xEXtiZdKKEnp+c5/jeUgTbTQXEqnAzfkrgYRWP3p3Nv3Whc2CEcM/mDycbDWGjxKokQdlffg==", - "url": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.1.0.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, "npm__punycode__2.3.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -39302,36 +39636,6 @@ ] } }, - "npm__mobx__6.12.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__mobx__6.12.0__links", - "package": "mobx", - "version": "6.12.0", - "dev": false, - "root_package": "", - "link_packages": { - "": [ - "mobx" - ] - }, - "deps": {}, - "transitive_closure": { - "mobx": [ - "6.12.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__find-up__4.1.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -39477,6 +39781,41 @@ ] } }, + "npm__at_types_sinon__17.0.3__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_sinon__17.0.3__links", + "package": "@types/sinon", + "version": "17.0.3", + "dev": false, + "root_package": "", + "link_packages": { + "": [ + "@types/sinon" + ] + }, + "deps": { + "@types/sinonjs__fake-timers": "8.1.5" + }, + "transitive_closure": { + "@types/sinon": [ + "17.0.3" + ], + "@types/sinonjs__fake-timers": [ + "8.1.5" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__popper.js__1.16.1-lts": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -41860,6 +42199,32 @@ "generate_bzl_library_targets": false } }, + "npm__at_sinonjs_text-encoding__0.7.2__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_text-encoding__0.7.2__links", + "package": "@sinonjs/text-encoding", + "version": "0.7.2", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "@sinonjs/text-encoding": [ + "0.7.2" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__fast-json-stable-stringify__2.1.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -46678,41 +47043,6 @@ ] } }, - "npm__at_types_js-base64__3.3.1__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_js-base64__3.3.1__links", - "package": "@types/js-base64", - "version": "3.3.1", - "dev": false, - "root_package": "", - "link_packages": { - "": [ - "@types/js-base64" - ] - }, - "deps": { - "js-base64": "3.7.7" - }, - "transitive_closure": { - "@types/js-base64": [ - "3.3.1" - ], - "js-base64": [ - "3.7.7" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__at_babel_helper-member-expression-to-functions__7.23.0__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -46859,74 +47189,6 @@ "generate_bzl_library_targets": false } }, - "npm__mobx-react__9.1.0__-901741053__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__mobx-react__9.1.0__-901741053__links", - "package": "mobx-react", - "version": "9.1.0_-901741053", - "dev": false, - "root_package": "", - "link_packages": { - "": [ - "mobx-react" - ] - }, - "deps": { - "mobx": "6.12.0", - "mobx-react-lite": "4.0.5_-901741053", - "react": "16.14.0", - "react-dom": "16.14.0_react_16.14.0" - }, - "transitive_closure": { - "js-tokens": [ - "4.0.0" - ], - "loose-envify": [ - "1.4.0" - ], - "mobx": [ - "6.12.0" - ], - "mobx-react": [ - "9.1.0_-901741053" - ], - "mobx-react-lite": [ - "4.0.5_-901741053" - ], - "object-assign": [ - "4.1.1" - ], - "prop-types": [ - "15.8.1" - ], - "react": [ - "16.14.0" - ], - "react-dom": [ - "16.14.0_react_16.14.0" - ], - "react-is": [ - "16.13.1" - ], - "scheduler": [ - "0.19.1" - ], - "use-sync-external-store": [ - "1.2.0_react_16.14.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__core-util-is__1.0.3": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -51040,6 +51302,35 @@ "generate_bzl_library_targets": false } }, + "npm__at_types_sinon__17.0.3": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_types_sinon__17.0.3", + "package": "@types/sinon", + "version": "17.0.3", + "root_package": "", + "link_workspace": "", + "link_packages": { + "": [ + "@types/sinon" + ] + }, + "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", + "url": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__at_babel_plugin-transform-property-literals__7.23.3__at_babel_core_7.23.9__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -60863,6 +61154,32 @@ "generate_bzl_library_targets": false } }, + "npm__just-extend__6.2.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__just-extend__6.2.0__links", + "package": "just-extend", + "version": "6.2.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "just-extend": [ + "6.2.0" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__qs__6.11.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -64572,6 +64889,31 @@ ] } }, + "npm__nise__6.0.0": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__nise__6.0.0", + "package": "nise", + "version": "6.0.0", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-K8ePqo9BFvN31HXwEtTNGzgrPpmvgciDsFz8aztFjt4LqKO/JeFD8tBOeuDiCMXrIl/m1YvfH8auSpxfaD09wg==", + "url": "https://registry.npmjs.org/nise/-/nise-6.0.0.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__websocket-extensions__0.1.4": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -65256,6 +65598,32 @@ ] } }, + "npm__path-to-regexp__6.2.2__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__path-to-regexp__6.2.2__links", + "package": "path-to-regexp", + "version": "6.2.2", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": { + "path-to-regexp": [ + "6.2.2" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__regjsparser__0.9.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -65750,6 +66118,31 @@ "generate_bzl_library_targets": false } }, + "npm__at_sinonjs_text-encoding__0.7.2": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__at_sinonjs_text-encoding__0.7.2", + "package": "@sinonjs/text-encoding", + "version": "0.7.2", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "url": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__webpack-dev-server__5.0.2__-359619668__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", @@ -68135,6 +68528,31 @@ ] } }, + "npm__lodash.get__4.4.2": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_rule", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__lodash.get__4.4.2", + "package": "lodash.get", + "version": "4.4.2", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "url": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "commit": "", + "patch_args": [], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "", + "generate_bzl_library_targets": false + } + }, "npm__yauzl__2.10.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -68391,52 +68809,6 @@ ] } }, - "npm__use-sync-external-store__1.2.0__react_16.14.0__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__use-sync-external-store__1.2.0__react_16.14.0__links", - "package": "use-sync-external-store", - "version": "1.2.0_react_16.14.0", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "react": "16.14.0" - }, - "transitive_closure": { - "js-tokens": [ - "4.0.0" - ], - "loose-envify": [ - "1.4.0" - ], - "object-assign": [ - "4.1.1" - ], - "prop-types": [ - "15.8.1" - ], - "react": [ - "16.14.0" - ], - "react-is": [ - "16.13.1" - ], - "use-sync-external-store": [ - "1.2.0_react_16.14.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__shebang-regex__3.0.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -68928,6 +69300,56 @@ "generate_bzl_library_targets": false } }, + "npm__nise__6.0.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__nise__6.0.0__links", + "package": "nise", + "version": "6.0.0", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": { + "@sinonjs/commons": "3.0.1", + "@sinonjs/fake-timers": "11.2.2", + "@sinonjs/text-encoding": "0.7.2", + "just-extend": "6.2.0", + "path-to-regexp": "6.2.2" + }, + "transitive_closure": { + "@sinonjs/commons": [ + "3.0.1" + ], + "@sinonjs/fake-timers": [ + "11.2.2" + ], + "@sinonjs/text-encoding": [ + "0.7.2" + ], + "just-extend": [ + "6.2.0" + ], + "nise": [ + "6.0.0" + ], + "path-to-regexp": [ + "6.2.2" + ], + "type-detect": [ + "4.0.8" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__unicode-match-property-ecmascript__2.0.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -72143,6 +72565,80 @@ "generate_bzl_library_targets": false } }, + "npm__sinon__18.0.0__links": { + "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", + "ruleClassName": "npm_import_links", + "attributes": { + "name": "aspect_rules_js~1.35.0~npm~npm__sinon__18.0.0__links", + "package": "sinon", + "version": "18.0.0", + "dev": false, + "root_package": "", + "link_packages": { + "": [ + "sinon" + ] + }, + "deps": { + "@sinonjs/commons": "3.0.1", + "@sinonjs/fake-timers": "11.2.2", + "@sinonjs/samsam": "8.0.0", + "diff": "5.2.0", + "nise": "6.0.0", + "supports-color": "7.2.0" + }, + "transitive_closure": { + "@sinonjs/commons": [ + "2.0.0", + "3.0.1" + ], + "@sinonjs/fake-timers": [ + "11.2.2" + ], + "@sinonjs/samsam": [ + "8.0.0" + ], + "@sinonjs/text-encoding": [ + "0.7.2" + ], + "diff": [ + "5.2.0" + ], + "has-flag": [ + "4.0.0" + ], + "just-extend": [ + "6.2.0" + ], + "lodash.get": [ + "4.4.2" + ], + "nise": [ + "6.0.0" + ], + "path-to-regexp": [ + "6.2.2" + ], + "sinon": [ + "18.0.0" + ], + "supports-color": [ + "7.2.0" + ], + "type-detect": [ + "4.0.8" + ] + }, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [], + "bins": {}, + "npm_translate_lock_repo": "npm", + "package_visibility": [ + "//visibility:public" + ] + } + }, "npm__loose-envify__1.4.0": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -72514,67 +73010,6 @@ ] } }, - "npm__mobx-react-lite__4.0.5__-901741053__links": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_links", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__mobx-react-lite__4.0.5__-901741053__links", - "package": "mobx-react-lite", - "version": "4.0.5_-901741053", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": { - "mobx": "6.12.0", - "react": "16.14.0", - "react-dom": "16.14.0_react_16.14.0", - "use-sync-external-store": "1.2.0_react_16.14.0" - }, - "transitive_closure": { - "js-tokens": [ - "4.0.0" - ], - "loose-envify": [ - "1.4.0" - ], - "mobx": [ - "6.12.0" - ], - "mobx-react-lite": [ - "4.0.5_-901741053" - ], - "object-assign": [ - "4.1.1" - ], - "prop-types": [ - "15.8.1" - ], - "react": [ - "16.14.0" - ], - "react-dom": [ - "16.14.0_react_16.14.0" - ], - "react-is": [ - "16.13.1" - ], - "scheduler": [ - "0.19.1" - ], - "use-sync-external-store": [ - "1.2.0_react_16.14.0" - ] - }, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [], - "bins": {}, - "npm_translate_lock_repo": "npm", - "package_visibility": [ - "//visibility:public" - ] - } - }, "npm__es6-error__4.1.1": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_rule", @@ -72679,35 +73114,6 @@ "generate_bzl_library_targets": false } }, - "npm__at_types_js-base64__3.3.1": { - "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", - "ruleClassName": "npm_import_rule", - "attributes": { - "name": "aspect_rules_js~1.35.0~npm~npm__at_types_js-base64__3.3.1", - "package": "@types/js-base64", - "version": "3.3.1", - "root_package": "", - "link_workspace": "", - "link_packages": { - "": [ - "@types/js-base64" - ] - }, - "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==", - "url": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", - "commit": "", - "patch_args": [], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "", - "generate_bzl_library_targets": false - } - }, "npm__at_bazel_ibazel__0.12.4__links": { "bzlFile": "@@aspect_rules_js~1.35.0//npm/private:npm_import.bzl", "ruleClassName": "npm_import_links", diff --git a/client/BUILD b/client/BUILD index 0dfae6b..eab8d82 100644 --- a/client/BUILD +++ b/client/BUILD @@ -20,7 +20,6 @@ ts_library( deps = [ "//:node_modules/@material-ui/core", "//:node_modules/@material-ui/icons", - "//:node_modules/@types/js-base64", "//:node_modules/@types/pako", "//:node_modules/@types/react", "//:node_modules/@types/react-dom", @@ -28,14 +27,13 @@ ts_library( "//:node_modules/@types/react-router-dom", "//:node_modules/@types/uuid", "//:node_modules/js-base64", - "//:node_modules/mobx", - "//:node_modules/mobx-react", "//:node_modules/pako", "//:node_modules/react", "//:node_modules/react-dom", "//:node_modules/react-router", "//:node_modules/react-router-dom", "//:node_modules/uuid", + "//common", ], ) diff --git a/client/app.tsx b/client/app.tsx index b730d71..9540186 100644 --- a/client/app.tsx +++ b/client/app.tsx @@ -9,11 +9,12 @@ import { import { Drawer } from "#asciiflow/client/drawer"; import { DrawingId, store, ToolMode } from "#asciiflow/client/store"; import { screenToCell, View } from "#asciiflow/client/view"; -import { useObserver } from "mobx-react"; + import { HashRouter, Route, useParams } from "react-router-dom"; import * as ReactDOM from "react-dom"; import { Vector } from "#asciiflow/client/vector"; import { textToLayer } from "#asciiflow/client/text_utils"; +import { useWatchable } from "#asciiflow/common/watchable"; const controller = new Controller(); const touchController = new TouchController(controller); @@ -25,7 +26,7 @@ export interface IRouteProps { } export const App = () => { - return useObserver(() => { + return useWatchable(() => { const routeProps = useParams(); store.setRoute( routeProps.share @@ -86,7 +87,7 @@ document.addEventListener("paste", (e) => { if (store.selectTool.selectBox) { position = store.selectTool.selectBox.topLeft(); } - if (store.toolMode === ToolMode.TEXT && store.textTool.currentPosition) { + if (store.toolMode.get() === ToolMode.TEXT && store.textTool.currentPosition) { position = store.textTool.currentPosition; } const pastedLayer = textToLayer(clipboardText, position); diff --git a/client/controller.ts b/client/controller.ts index edb6837..5d381f6 100644 --- a/client/controller.ts +++ b/client/controller.ts @@ -1,7 +1,7 @@ import * as constants from "#asciiflow/client/constants"; import { store, IModifierKeys, ToolMode } from "#asciiflow/client/store"; import { Vector } from "#asciiflow/client/vector"; -import { screenToCell } from "#asciiflow/client/view"; +import { screenToCell, setCanvasCursor } from "#asciiflow/client/view"; import { HTMLAttributes } from "react"; import * as React from "react"; @@ -69,7 +69,7 @@ export class Controller { let specialKeyCode = null; if (event.altKey) { - store.altPressed = true; + store.altPressed.set(true); if (event.keyCode === "1".charCodeAt(0)) { store.setToolMode(ToolMode.BOX); event.preventDefault(); @@ -140,7 +140,7 @@ export class Controller { specialKeyCode = constants.KEY_RIGHT; } if (event.keyCode === 32) { - store.panning = true; + store.panning.set(true); } if (specialKeyCode != null) { @@ -150,10 +150,10 @@ export class Controller { handleKeyUp(event: KeyboardEvent) { if (event.keyCode === 32) { - store.panning = false; + store.panning.set(false); } if (!event.altKey) { - store.altPressed = false; + store.altPressed.set(false); } } @@ -167,10 +167,9 @@ export class Controller { // Update the cursor pointer, depending on the draw function. if (!moveCell.equals(this.lastMoveCell)) { - store.setCurrentCursor(store.currentTool.getCursor( - moveCell, - getModifierKeys(e) - )); + setCanvasCursor( + store.currentTool.getCursor(moveCell, getModifierKeys(e)) + ); } // In drawing mode, so pass the mouse move on, but remove duplicates. @@ -214,7 +213,7 @@ export class DesktopController { handleMouseDown = (e: React.MouseEvent) => { // Can drag by holding either the control or meta (Apple) key. - if (store.panning) { + if (store.panning.get()) { this.controller.startDrag(Vector.fromMouseEvent(e)); } else { this.controller.startDraw(Vector.fromMouseEvent(e), e); diff --git a/client/draw/freeform.ts b/client/draw/freeform.ts index ab1d7c9..72aa59c 100644 --- a/client/draw/freeform.ts +++ b/client/draw/freeform.ts @@ -8,13 +8,13 @@ export class DrawFreeform extends AbstractDrawFunction { start(position: Vector) { this.currentLayer = new Layer(); - this.currentLayer.set(position, store.freeformCharacter); + this.currentLayer.set(position, store.freeformCharacter.get()); store.currentCanvas.setScratchLayer(this.currentLayer); } move(position: Vector) { [this.currentLayer] = new Layer().apply(this.currentLayer); - this.currentLayer.set(position, store.freeformCharacter); + this.currentLayer.set(position, store.freeformCharacter.get()); store.currentCanvas.setScratchLayer(this.currentLayer); } @@ -29,7 +29,7 @@ export class DrawFreeform extends AbstractDrawFunction { handleKey(value: string) { if (value && value.length === 1) { // The value is not a special character, so lets use it. - store.freeformCharacter = value; + store.freeformCharacter.set(value); } } } diff --git a/client/draw/line.ts b/client/draw/line.ts index 05ec3c5..cdc98b2 100644 --- a/client/draw/line.ts +++ b/client/draw/line.ts @@ -4,10 +4,9 @@ import { connects, disconnect, } from "#asciiflow/client/characters"; +import { UNICODE } from "#asciiflow/client/constants"; import { Direction } from "#asciiflow/client/direction"; -import { - AbstractDrawFunction -} from "#asciiflow/client/draw/function"; +import { AbstractDrawFunction } from "#asciiflow/client/draw/function"; import { line } from "#asciiflow/client/draw/utils"; import { Layer, LayerView } from "#asciiflow/client/layer"; import { cellContext } from "#asciiflow/client/render_layer"; @@ -35,9 +34,12 @@ export class DrawLine extends AbstractDrawFunction { } draw(modifierKeys: IModifierKeys) { + if (!this.startPosition || !this.endPosition) { + return; + } const layer = new Layer(); // Try to infer line orientation. - const characters = store.characters; + const characters = UNICODE; const startContext = cellContext( this.startPosition, store.currentCanvas.committed diff --git a/client/draw/move.ts b/client/draw/move.ts index 7a67264..dba4ad1 100644 --- a/client/draw/move.ts +++ b/client/draw/move.ts @@ -49,8 +49,6 @@ export class DrawMove extends AbstractDrawFunction { .filter((a) => a.direction === Direction.DOWN) .map((a) => a.end.y) ); - console.log(minX, maxX, minY, maxY); - console.log(this.trace); // Calculate the effective position after calculating bounds. const effectivePosition = new Vector( Math.min(Math.max(position.x, minX), maxX), diff --git a/client/draw/select.ts b/client/draw/select.ts index f1e82e2..307714b 100644 --- a/client/draw/select.ts +++ b/client/draw/select.ts @@ -11,7 +11,7 @@ import { AbstractDrawFunction } from "#asciiflow/client/draw/function"; import { DrawMove } from "#asciiflow/client/draw/move"; import { Layer } from "#asciiflow/client/layer"; import { snap } from "#asciiflow/client/snap"; -import { IModifierKeys, store } from "#asciiflow/client/store"; +import { IModifierKeys, store, ToolMode } from "#asciiflow/client/store"; import { layerToText, textToLayer } from "#asciiflow/client/text_utils"; import { Vector } from "#asciiflow/client/vector"; @@ -139,7 +139,7 @@ export class DrawSelect extends AbstractDrawFunction { return "default"; } - handleKey(value: string) { + handleKey(value: string, modifierKeys: IModifierKeys) { if (this.selectBox != null) { // Use the native keyboard for copy pasting. if (value === KEY_COPY || value === KEY_CUT) { @@ -176,5 +176,8 @@ export class DrawSelect extends AbstractDrawFunction { store.currentCanvas.setScratchLayer(layer); store.currentCanvas.commitScratch(); } + + // store.setToolMode(ToolMode.TEXT); + // store.currentTool.handleKey(value, modifierKeys); } } diff --git a/client/draw/text.ts b/client/draw/text.ts index 6db35ae..135eacf 100644 --- a/client/draw/text.ts +++ b/client/draw/text.ts @@ -24,6 +24,9 @@ export class DrawText extends AbstractDrawFunction { } handleKey(value: string, modifierKeys: IModifierKeys) { + if (!this.currentPosition) { + return; + } let newLayer = new Layer(); if (!!this.textLayer) { [newLayer] = newLayer.apply(this.textLayer); diff --git a/client/drawer.tsx b/client/drawer.tsx index ebeb79c..7532c31 100644 --- a/client/drawer.tsx +++ b/client/drawer.tsx @@ -5,6 +5,7 @@ import styles from "#asciiflow/client/drawer.module.css"; import { ExportDialog } from "#asciiflow/client/export"; import { DrawingId, store, ToolMode } from "#asciiflow/client/store"; import { DrawingStringifier } from "#asciiflow/client/store/drawing_stringifier"; +import { useWatchable } from "#asciiflow/common/watchable"; import { Button, Chip, @@ -21,17 +22,16 @@ import { Paper, Popover, Snackbar, - TextField + TextField, } from "@material-ui/core"; import * as Icons from "@material-ui/icons"; -import { useObserver } from "mobx-react"; import * as React from "react"; import { useState } from "react"; import { useHistory } from "react-router"; export function Drawer() { const history = useHistory(); - return useObserver(() => { + return useWatchable(() => { if (!store.controlsOpen.get()) { return ( } - drawingId={store.route} + drawingId={store.route.get()} /> @@ -218,14 +218,15 @@ export function Drawer() { - {!store.editControlsOpen.get() ? null : store.route.shareSpec ? ( + {!store.editControlsOpen.get() ? null : store.route.get() + .shareSpec ? ( <>
This is a shared drawing. To make edits fork it so it can be saved locally.
- +
) : ( @@ -375,7 +376,7 @@ export function Drawer() { to move around. {" "} Pan around the canvas by holding - {store.route.shareSpec ? ( + {store.route.get().shareSpec ? ( "." ) : ( <> @@ -386,9 +387,7 @@ export function Drawer() { redo. )}{" "} - View shortcuts by pressing . You - can return to the previous version of ASCIIFlow{" "} - here. + View shortcuts by pressing . )} @@ -412,8 +411,8 @@ function ShortcutChip({ label: string; hideUntilAlt?: boolean; }) { - return useObserver(() => { - if (hideUntilAlt && !store.altPressed) return null; + return useWatchable(() => { + if (hideUntilAlt && !store.altPressed.get()) return null; return ( } @@ -433,10 +432,10 @@ function ToolControl( icon: React.ReactNode; }> ) { - return useObserver(() => { + return useWatchable(() => { return ( store.setToolMode(props.tool)} > @@ -458,7 +457,7 @@ const shortcutKeys = [ ]; function FreeFormCharacterSelect() { const [anchorEl, setAnchorEl] = useState(null); - return useObserver(() => { + return useWatchable(() => { return ( <> { setAnchorEl(null); store.setToolMode(ToolMode.FREEFORM); - store.freeformCharacter = key; + store.freeformCharacter.set(key); }} className={styles.freeformCharacterButton} key={i} @@ -503,8 +502,8 @@ function ToolHelp( tool: ToolMode; }> ) { - return useObserver(() => { - return store.toolMode === props.tool ? <>{props.children} : null; + return useWatchable(() => { + return store.toolMode.get() === props.tool ? <>{props.children} : null; }); } diff --git a/client/export.tsx b/client/export.tsx index 4e76726..28eb315 100644 --- a/client/export.tsx +++ b/client/export.tsx @@ -16,8 +16,8 @@ import { ASCII, UNICODE } from "#asciiflow/client/constants"; import styles from "#asciiflow/client/export.module.css"; import { DrawingId, store } from "#asciiflow/client/store"; import { layerToText } from "#asciiflow/client/text_utils"; -import { useObserver } from "mobx-react"; import * as React from "react"; +import { useWatchable } from "#asciiflow/common/watchable"; export interface IExportConfig { wrapper?: "star" | "star-filled" | "triple-quotes" | "hash" | "slash" | "three-slashes" | "dash" | "apostrophe" | "semicolon" | "backticks" | "four-spaces"; @@ -32,7 +32,7 @@ export function ExportDialog({ button: React.ReactNode; drawingId: DrawingId; }) { - return useObserver(() => { + return useWatchable(() => { const [open, setOpen] = React.useState(false); const exportConfig = store.exportConfig.get(); // Only compute the text if the dialog is open. diff --git a/client/menu/files.scss b/client/menu/files.scss deleted file mode 100644 index e69de29..0000000 diff --git a/client/menu/files.tsx b/client/menu/files.tsx deleted file mode 100644 index d3d8034..0000000 --- a/client/menu/files.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { useObserver } from "mobx-react"; -import * as React from "react"; - -export function Files() { - return useObserver(() => { - return
; - }); -} diff --git a/client/store/canvas.ts b/client/store/canvas.ts index e50c131..c21590e 100644 --- a/client/store/canvas.ts +++ b/client/store/canvas.ts @@ -6,43 +6,56 @@ import { DrawingStringifier } from "#asciiflow/client/store/drawing_stringifier" import { Persistent } from "#asciiflow/client/store/persistent"; import { ArrayStringifier } from "#asciiflow/client/store/stringifiers"; import { IVector, Vector } from "#asciiflow/client/vector"; -import { action, observable } from "mobx"; - +import { + WatchableAdapter, + watchableAdapter, + watchableValue, +} from "#asciiflow/common/watchable"; /** * Holds the entire state of the diagram as a 2D array of cells * and provides methods to modify the current state. */ export class CanvasStore { - public readonly persistentCommitted: Persistent; - public readonly undoLayers: Persistent; - public readonly redoLayers: Persistent; - private _zoom: Persistent; - private _offset: Persistent; + public readonly persistentCommitted: WatchableAdapter; + public readonly undoLayers: WatchableAdapter; + public readonly redoLayers: WatchableAdapter; + private _zoom: WatchableAdapter; + private _offset: WatchableAdapter; constructor(public readonly drawingId: DrawingId) { - this.persistentCommitted = Persistent.custom( - this.persistentKey("committed-layer"), - this.drawingId.shareSpec - ? new DrawingStringifier().deserialize(this.drawingId.shareSpec).layer - : new Layer(), - Layer + this.persistentCommitted = watchableAdapter( + Persistent.custom( + this.persistentKey("committed-layer"), + this.drawingId.shareSpec + ? new DrawingStringifier().deserialize(this.drawingId.shareSpec).layer + : new Layer(), + Layer + ) + ); + this.undoLayers = watchableAdapter( + Persistent.custom( + this.persistentKey("undo-layers"), + [], + new ArrayStringifier(Layer) + ) + ); + this.redoLayers = watchableAdapter( + Persistent.custom( + this.persistentKey("redo-layers"), + [], + new ArrayStringifier(Layer) + ) ); - this.undoLayers = Persistent.custom( - this.persistentKey("undo-layers"), - [], - new ArrayStringifier(Layer) + this._zoom = watchableAdapter( + Persistent.json(this.persistentKey("zoom"), 1) ); - this.redoLayers = Persistent.custom( - this.persistentKey("redo-layers"), - [], - new ArrayStringifier(Layer) + this._offset = watchableAdapter( + Persistent.json(this.persistentKey("offset"), { + x: (constants.MAX_GRID_WIDTH * constants.CHAR_PIXELS_H) / 2, + y: (constants.MAX_GRID_HEIGHT * constants.CHAR_PIXELS_V) / 2, + }) ); - this._zoom = Persistent.json(this.persistentKey("zoom"), 1); - this._offset = Persistent.json(this.persistentKey("offset"), { - x: (constants.MAX_GRID_WIDTH * constants.CHAR_PIXELS_H) / 2, - y: (constants.MAX_GRID_HEIGHT * constants.CHAR_PIXELS_V) / 2, - }) } public persistentKey(...values: string[]) { @@ -53,7 +66,7 @@ export class CanvasStore { return this._zoom.get(); } - @action.bound public setZoom(value: number) { + public setZoom(value: number) { this._zoom.set(value); } @@ -61,16 +74,16 @@ export class CanvasStore { return new Vector(this._offset.get().x, this._offset.get().y); } - @action.bound public setOffset(value: Vector) { + public setOffset(value: Vector) { this._offset.set({ x: value.x, y: value.y, }); } - @observable accessor scratch = new Layer(); + public readonly scratch = watchableValue(new Layer()); - @observable accessor selection: Box; + public readonly selection = watchableValue(undefined); get committed() { return this.persistentCommitted.get(); @@ -81,7 +94,7 @@ export class CanvasStore { } get combined() { - return new LayerView([this.committed, this.scratch]); + return new LayerView([this.committed, this.scratch.get()]); } get shareSpec() { @@ -91,24 +104,23 @@ export class CanvasStore { }); } - @action.bound setSelection(box: Box) { - this.selection = box; + setSelection(box: Box) { + this.selection.set(box); } clearSelection() { this.setSelection(null); } - @action.bound setScratchLayer(layer: Layer) { - this.scratch = layer; + setScratchLayer(layer: Layer) { + this.scratch.set(layer); } /** * This clears the entire state, but is undoable. */ - @action.bound clear() { - this.undoLayers.get().push(this.committed); - this.undoLayers.sync(); + clear() { + this.undoLayers.set([...this.undoLayers.get(), this.committed]); this.persistentCommitted.set(new Layer()); this.redoLayers.set([]); } @@ -117,54 +129,51 @@ export class CanvasStore { * Clears the current drawing scratchpad. */ clearScratch() { - this.scratch = new Layer(); + this.scratch.set(new Layer()); } /** * Ends the current draw, commiting anything currently drawn on the scratch layer. */ - @action.bound commitScratch() { - const [newLayer, undoLayer] = this.committed.apply(this.scratch); + commitScratch() { + const [newLayer, undoLayer] = this.committed.apply(this.scratch.get()); this.committed = newLayer; if (undoLayer.size() > 0) { // Don't push a no-op to the undo stack. - this.undoLayers.get().push(undoLayer); - this.undoLayers.sync(); + this.undoLayers.set([...this.undoLayers.get(), undoLayer]); } // If you commit something new, delete the redo stack. this.redoLayers.set([]); - this.scratch = new Layer(); + this.scratch.set(new Layer()); } /** * Undoes the last committed state. */ - @action.bound undo() { + undo() { if (this.undoLayers.get().length === 0) { return; } const [newLayer, redoLayer] = this.committed.apply( - this.undoLayers.get().pop() + this.undoLayers.get().at(-1) ); this.committed = newLayer; - this.redoLayers.get().push(redoLayer); - this.undoLayers.sync(); - this.redoLayers.sync(); + this.redoLayers.set([...this.redoLayers.get(), redoLayer]); + this.undoLayers.set(this.undoLayers.get().slice(0, -1)); } /** * Redoes the last undone. */ - @action.bound redo() { + redo() { if (this.redoLayers.get().length === 0) { return; } const [newLayer, undoLayer] = this.committed.apply( - this.redoLayers.get().pop() + this.redoLayers.get().at(-1) ); this.committed = newLayer; - this.undoLayers.get().push(undoLayer); - this.undoLayers.sync(); - this.redoLayers.sync(); + this.undoLayers.set([...this.undoLayers.get(), undoLayer]); + this.redoLayers.set(this.redoLayers.get().slice(0, -1)); } } diff --git a/client/store/index.ts b/client/store/index.ts index 9b39b74..72a77d4 100644 --- a/client/store/index.ts +++ b/client/store/index.ts @@ -17,8 +17,8 @@ import { JSONStringifier, } from "#asciiflow/client/store/stringifiers"; import { Persistent } from "#asciiflow/client/store/persistent"; -import { action, computed, makeAutoObservable, observable } from "mobx"; import * as uuid from "uuid"; +import { watchableAdapter, watchableValue } from "#asciiflow/common/watchable"; export enum ToolMode { BOX = 1, @@ -101,106 +101,95 @@ export class Store { public readonly textTool = new DrawText(); public readonly nullTool = new DrawNull(); - @observable accessor _route: DrawingId = DrawingId.local(null); + private readonly _route = watchableValue(DrawingId.local(null)); public get route() { return this._route; } - @action.bound public setRoute(value: DrawingId) { - if (JSON.stringify(value) !== JSON.stringify(store.route)) { - this._route = value; - } + public setRoute(value: DrawingId) { + + this._route.set(value); + } - @observable accessor freeformCharacter = "x"; + public readonly freeformCharacter = watchableValue("x"); - @observable accessor selectedToolMode = ToolMode.BOX; + public readonly selectedToolMode = watchableValue(ToolMode.BOX); public get toolMode() { - if (this.route.shareSpec) { + if (this.route.get().shareSpec) { return null; } return this.selectedToolMode; } - @observable accessor unicode = Persistent.json("unicode", true); - @observable accessor controlsOpen = Persistent.json("controlsOpen", true); - @observable accessor fileControlsOpen = Persistent.json( - "fileControlsOpen", - true + public readonly unicode = watchableAdapter(Persistent.json("unicode", true)); + public readonly controlsOpen = watchableAdapter( + Persistent.json("controlsOpen", true) + ); + public readonly fileControlsOpen = watchableAdapter( + Persistent.json("fileControlsOpen", true) ); - @observable accessor editControlsOpen = Persistent.json( - "editControlsOpen", - true + public readonly editControlsOpen = watchableAdapter( + Persistent.json("editControlsOpen", true) ); - @observable accessor helpControlsOpen = Persistent.json( - "editControlsOpen", - true + public readonly helpControlsOpen = watchableAdapter( + Persistent.json("editControlsOpen", true) ); - @observable accessor exportConfig = Persistent.json( - "exportConfig", - {} as IExportConfig + public readonly exportConfig = watchableAdapter( + Persistent.json("exportConfig", {} as IExportConfig) ); - @observable accessor localDrawingIds = Persistent.custom( - "localDrawingIds", - [], - new ArrayStringifier(DrawingId.STRINGIFIER) + public readonly localDrawingIds = watchableAdapter( + Persistent.custom( + "localDrawingIds", + [], + new ArrayStringifier(DrawingId.STRINGIFIER) + ) ); - @observable accessor panning = false; + public readonly panning = watchableValue(false); - @observable accessor altPressed = false; + public readonly altPressed = watchableValue(false); - @observable accessor currentCursor: string = "default"; + public readonly currentCursor = watchableValue("default"); - public readonly darkMode = Persistent.json( - "darkMode", - window.matchMedia && - window.matchMedia("(prefers-color-scheme: dark)").matches + public readonly darkMode = watchableAdapter( + Persistent.json( + "darkMode", + window.matchMedia && + window.matchMedia("(prefers-color-scheme: dark)").matches + ) ); get currentTool(): IDrawFunction { - return this.toolMode === ToolMode.BOX + return this.toolMode.get() === ToolMode.BOX ? this.boxTool - : this.toolMode === ToolMode.LINES + : this.toolMode.get() === ToolMode.LINES ? this.lineTool - : this.toolMode === ToolMode.ARROWS + : this.toolMode.get() === ToolMode.ARROWS ? this.arrowTool - : this.toolMode === ToolMode.FREEFORM + : this.toolMode.get() === ToolMode.FREEFORM ? this.freeformTool - : this.toolMode === ToolMode.TEXT + : this.toolMode.get() === ToolMode.TEXT ? this.textTool - : this.toolMode === ToolMode.SELECT + : this.toolMode.get() === ToolMode.SELECT ? this.selectTool : this.nullTool; } - @computed - get computedCurrentCursor() { - return this.panning ? "move" : this.currentCursor; - } - - @action.bound public setCurrentCursor(value: string) { - this.currentCursor = value; - } - - @observable accessor modifierKeys: IModifierKeys = {}; - - get characters() { - return this.unicode.get() ? constants.UNICODE : constants.ASCII; - } + public readonly modifierKeys = watchableValue({}); private canvases = new Map(); get currentCanvas() { - return this.canvas(this._route); + return this.canvas(this._route.get()); } - get drawings() { - if (this.route.shareSpec) { - return [this.route, ...this.localDrawingIds.get()]; + get drawings(): DrawingId[] { + if (this.route.get().shareSpec) { + return [this.route.get(), ...this.localDrawingIds.get()]; } const localDrawingIds = this.localDrawingIds.get(); @@ -235,22 +224,18 @@ export class Store { return canvas; } - @action.bound public setFreeformCharacter(value: string) { - this.freeformCharacter = value; - } - - @action.bound public setUnicode(value: boolean) { + public setUnicode(value: boolean) { this.unicode.set(value); } - @action.bound public setToolMode(toolMode: ToolMode) { - if (this.selectedToolMode !== toolMode) { + public setToolMode(toolMode: ToolMode) { + if (this.selectedToolMode.get() !== toolMode) { this.currentTool.cleanup(); - this.selectedToolMode = toolMode; + this.selectedToolMode.set(toolMode); } } - @action.bound public deleteDrawing(drawingId: DrawingId) { + public deleteDrawing(drawingId: DrawingId) { this.localDrawingIds.set( this.localDrawingIds .get() @@ -264,10 +249,7 @@ export class Store { .forEach((key) => localStorage.removeItem(key)); } - @action.bound public renameDrawing( - originalLocalId: string, - newLocalId: string - ) { + public renameDrawing(originalLocalId: string, newLocalId: string) { const originalId = DrawingId.local(originalLocalId); const newId = DrawingId.local(newLocalId); this.localDrawingIds.set( @@ -293,7 +275,7 @@ export class Store { this.canvases.delete(newId.toString()); } - @action.bound public saveDrawing(shareDrawingId: DrawingId, name: string) { + public saveDrawing(shareDrawingId: DrawingId, name: string) { const sharedDrawing = this.canvas(shareDrawingId); const localDrawing = this.canvas(DrawingId.local(name)); localDrawing.persistentCommitted.set( diff --git a/client/store/persistent.ts b/client/store/persistent.ts index e396f6b..956916b 100644 --- a/client/store/persistent.ts +++ b/client/store/persistent.ts @@ -1,11 +1,4 @@ import { IStringifier, JSONStringifier } from "#asciiflow/client/store/stringifiers"; -import { - action, - computed, - makeAutoObservable, - makeObservable, - observable, -} from "mobx"; export class Persistent { @@ -25,7 +18,7 @@ export class Persistent { return new Persistent(stringifier, key, defaultValue); } - @observable accessor value: T; + private value: T; private constructor( private stringifier: IStringifier, @@ -55,11 +48,4 @@ export class Persistent { this.value = value; localStorage.setItem(this.key, this.stringifier.serialize(value)); } - - /** - * Call after mutations to the object itself to synchronize value to storage. - */ - sync() { - this.set(this.get()); - } } diff --git a/client/view.tsx b/client/view.tsx index 23dbd4e..4d3a927 100644 --- a/client/view.tsx +++ b/client/view.tsx @@ -1,8 +1,7 @@ import * as constants from "#asciiflow/client/constants"; import { store } from "#asciiflow/client/store"; import { Vector } from "#asciiflow/client/vector"; -import { autorun } from "mobx"; -import { useObserver } from "mobx-react"; +import { autorun, useWatchable } from "#asciiflow/common/watchable"; import * as React from "react"; import { useEffect } from "react"; @@ -28,8 +27,16 @@ function getColors() { selection: "#DEF", }; } + +export function setCanvasCursor(cursor: string) { + const element = document.getElementById("ascii-canvas"); + if (element) { + element.style.cursor = cursor; + } +} + export const View = ({ ...rest }: React.HTMLAttributes) => - useObserver(() => { + useWatchable(() => { const colors = getColors(); useEffect(() => { const canvas = document.getElementById( @@ -62,7 +69,6 @@ export const View = ({ ...rest }: React.HTMLAttributes) => tabIndex={0} style={{ backgroundColor: colors.background, - cursor: store.computedCurrentCursor, touchAction: "none", position: "fixed", left: 0, @@ -81,8 +87,8 @@ export const View = ({ ...rest }: React.HTMLAttributes) => */ function render(canvas: HTMLCanvasElement) { const committed = store.currentCanvas.committed; - const scratch = store.currentCanvas.scratch; - const selection = store.currentCanvas.selection; + const scratch = store.currentCanvas.scratch.get(); + const selection = store.currentCanvas.selection.get(); const context = canvas.getContext("2d"); context.setTransform(1, 0, 0, 1, 0, 0); diff --git a/common/BUILD b/common/BUILD new file mode 100644 index 0000000..3716585 --- /dev/null +++ b/common/BUILD @@ -0,0 +1,32 @@ +load("//:ts_library.bzl", "ts_library", "ts_mocha_test_suite") + +package(default_visibility = ["//visibility:public"]) + +ts_library( + name = "common", + srcs = glob( + [ + "**/*.ts", + "**/*.tsx", + ], + exclude = ["**/*.spec.ts"], + ), + deps = [ + "//:node_modules/@types/react", + "//:node_modules/react", + ], +) + +ts_mocha_test_suite( + srcs = glob(["**/*.spec.ts"]), + deps = [ + ":common", + "//:node_modules/@types/chai", + "//:node_modules/@types/mocha", + "//:node_modules/@types/node", + "//:node_modules/@types/sinon", + "//:node_modules/chai", + "//:node_modules/mocha", + "//:node_modules/sinon", + ], +) diff --git a/common/watchable.spec.ts b/common/watchable.spec.ts new file mode 100644 index 0000000..95fdeb1 --- /dev/null +++ b/common/watchable.spec.ts @@ -0,0 +1,93 @@ +import { assert } from "chai"; +import sinon from "sinon"; +import { watchableValue, watchableView } from "#asciiflow/common/watchable"; + +const flush: () => Promise = () => new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 0); +}); + +describe("watchableValue", () => { + it("should emit the initial value", () => { + const watcher = sinon.spy(); + const watchable = watchableValue(42); + watchable.watch(watcher); + assert(watcher.calledOnceWith(42)); + }); + + it("should emit the latest value", () => { + const watcher = sinon.spy(); + const watchable = watchableValue(42); + watchable.watch(watcher); + watchable.set(43); + assert(watcher.calledTwice); + assert(watcher.calledWith(43)); + }); + + it("should not emit the latest value after unwatch", () => { + const watcher = sinon.spy(); + const watchable = watchableValue(42); + watchable.watch(watcher); + watchable.unwatch(watcher); + watchable.set(43); + assert(watcher.calledOnceWith(42)); + }); +}); + +describe("watchableView", () => { + it("should emit the initial value", () => { + const watcher = sinon.spy(); + const sourceWatchable = watchableValue(42); + const watchable = watchableView(() => sourceWatchable.get() + 1); + watchable.watch(watcher); + + assert(watcher.calledOnceWith(43)); + }); + + it("should emit the initial values", () => { + const watcher = sinon.spy(); + const watchableA = watchableValue(42); + const watchableB = watchableValue(43); + const watchable = watchableView(() => watchableA.get() + watchableB.get()); + watchable.watch(watcher); + assert(watcher.calledOnceWith(85)); + }); + + it("should emit the latest value", () => { + const watcher = sinon.spy(); + const subWatchable = watchableValue(42); + const watchable = watchableView(() => subWatchable.get() + 1); + watchable.watch(watcher); + subWatchable.set(43); + assert(watcher.calledTwice); + assert(watcher.calledWith(43)); + assert(watcher.calledWith(44)); + }); + + it("should emit the latest values", () => { + const watcher = sinon.spy(); + const subWatchable1 = watchableValue(42); + const subWatchable2 = watchableValue(43); + const watchable = watchableView( + () => subWatchable1.get() + subWatchable2.get() + ); + watchable.watch(watcher); + subWatchable1.set(44); + subWatchable2.set(45); + assert(watcher.calledThrice); + assert(watcher.calledWith(85)); + assert(watcher.calledWith(87)); + assert(watcher.calledWith(89)); + }); + + it("should not emit the latest value after unwatch", () => { + const watcher = sinon.spy(); + const subWatchable = watchableValue(42); + const watchable = watchableView(() => subWatchable.get() + 1); + watchable.watch(watcher); + watchable.unwatch(watcher); + subWatchable.set(44); + assert(watcher.calledOnceWith(43)); + }); +}); diff --git a/common/watchable.ts b/common/watchable.ts new file mode 100644 index 0000000..5229298 --- /dev/null +++ b/common/watchable.ts @@ -0,0 +1,154 @@ +import { useEffect, useState } from "react"; + +type Watcher = (value: T | undefined) => any; + +let usedWatchables: Set> | undefined = undefined; + +export interface IWatchable { + get(): T; + watch(watcher: Watcher): void; + unwatch(watcher: Watcher): void; +} + +export class WatchableAdapter implements IWatchable { + private watchers: Set> = new Set(); + + constructor(private getter: () => T, private setter: (value: T) => any) {} + + get() { + usedWatchables?.add(this); + return this.getter(); + } + + watch(watcher: Watcher) { + this.watchers.add(watcher); + watcher(this.getter()); + } + + unwatch(watcher: Watcher) { + if (!this.watchers.has(watcher)) { + throw new Error("Cannot unwatch a watcher that is not watching."); + } + this.watchers.delete(watcher); + } + + set(value: T) { + this.setter(value); + const fn = () => this.watchers.forEach((watcher) => watcher(value)); + if (usedWatchables) { + setTimeout(fn, 0); + } else { + fn(); + } + } +} + +export class Reference { + constructor(public value: T) {} +} + +export function watchableAdapter(obj: { + get: () => T; + set: (value: T) => any; +}): WatchableAdapter { + return new WatchableAdapter(obj.get.bind(obj), obj.set.bind(obj)); +} + +export function watchableValue(initialValue: T) { + const reference = new Reference(initialValue); + return new WatchableAdapter( + () => reference.value, + (value) => { + reference.value = value; + } + ); +} + +export class WatchableView implements IWatchable { + private watchers: Set> = new Set(); + private dependencies: Array>; + private dependencyWatchers: Array> = []; + private latestValue: T; + + constructor(private fn: () => T) { + const [latestValue, dependencies] = trackUsedWatchables(this.fn); + this.latestValue = latestValue; + this.dependencies = [...dependencies]; + } + + get(): T { + return this.latestValue; + } + + watch(watcher: Watcher): void { + // Listen to dependencies if there is at least one watcher. + if (this.watchers.size === 0) { + this.dependencyWatchers = [...this.dependencies].map( + () => () => this.react() + ); + this.dependencies.forEach((dependency, index) => + dependency.watch(this.dependencyWatchers[index]) + ); + } + this.watchers.add(watcher); + watcher(this.get()); + } + + unwatch(watcher: Watcher): void { + this.watchers.delete(watcher); + // Stop listening to dependencies if there are no watchers. + if (this.watchers.size === 0) { + this.dependencies.forEach((dependency, index) => + dependency.unwatch(this.dependencyWatchers[index]) + ); + } + } + + private react() { + this.latestValue = this.fn(); + this.watchers.forEach((watcher) => watcher(this.latestValue)); + } +} + +export function watchableView(fn: () => T): IWatchable { + return new WatchableView(fn); +} + +function trackUsedWatchables(fn: () => T): [T, Set>] { + try { + usedWatchables = new Set(); + return [fn(), usedWatchables]; + } finally { + usedWatchables = undefined; + } +} + +export function useWatchable(fn: () => T): T { + const [_, setCounter] = useState(0); + const [value, watchables] = trackUsedWatchables(fn); + useEffect(() => { + const incrementCounter = () => setCounter((counter) => counter + 1); + watchables.forEach((watchable) => { + watchable.watch(incrementCounter); + }); + return () => { + watchables.forEach((watchable) => { + watchable.unwatch(incrementCounter); + }); + }; + }, []); + return value; +} + +export function autorun(fn: () => void): () => void { + const [_, watchables] = trackUsedWatchables(fn); + const wrapperFn = () => fn(); + watchables.forEach((watchable) => { + watchable.watch(wrapperFn); + }); + return () => { + watchables.forEach((watchable) => { + watchable.unwatch(wrapperFn); + }); + }; +} diff --git a/legacy/BUILD b/legacy/BUILD deleted file mode 100644 index ce27dbc..0000000 --- a/legacy/BUILD +++ /dev/null @@ -1,6 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -filegroup( - name = "legacy", - srcs = glob(["**/*.*"]), -) diff --git a/legacy/addtohomescreen.css b/legacy/addtohomescreen.css deleted file mode 100644 index 8d49c89..0000000 --- a/legacy/addtohomescreen.css +++ /dev/null @@ -1,234 +0,0 @@ -.ath-viewport * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.ath-viewport { - position: relative; - z-index: 2147483641; - pointer-events: none; - - -webkit-tap-highlight-color: rgba(0,0,0,0); - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-size-adjust: none; - -moz-text-size-adjust: none; - -ms-text-size-adjust: none; - -o-text-size-adjust: none; - text-size-adjust: none; -} - -.ath-modal { - pointer-events: auto !important; - background: rgba(0,0,0,0.6); -} - -.ath-mandatory { - background: #000; -} - -.ath-container { - pointer-events: auto !important; - position: absolute; - z-index: 2147483641; - padding: 0.7em 0.6em; - width: 18em; - - background: #eee; - background-size: 100% auto; - - box-shadow: 0 0.2em 0 #d1d1d1; - - font-family: sans-serif; - font-size: 15px; - line-height: 1.5em; - text-align: center; -} - -.ath-ios.ath-phone { - bottom: 1.8em; - left: 50%; - margin-left: -9em; -} - -.ath-ios7.ath-tablet { - left: 0.7em; - top: 1.8em; -} - -.ath-ios6.ath-tablet { - left: 5em; - top: 1.8em; -} - -.ath-android { - right: 1.5em; - top: 1.8em; -} - -/* close icon */ -.ath-container:before { - content: ''; - position: relative; - display: block; - float: right; - margin: -0.7em -0.6em 0 0.5em; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAMAAABmmnOVAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAeHAAAHhwFd+hRDAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAHVQTFRFAAAAOTk5MzMzOzs7Nzc3QUFBQEBAPz8/Pj4+QUFBQEBAPz8/Pj4+QUFBQEBAPz8/QUFBPj4+Pz8/Pz8/Pj4+Pz8/Pz8/Pz8/Pj4+Pz8/Pj4+Pz8/Pz8/Pz8/Pz8/Pz8/Pj4+Pz8/Pz8/Pz8/Pz8/QEBAPz8/n3QmjwAAACZ0Uk5TAAkKDQ4zODk6OzxBQkNERUusrbG0tba7vL3Excbu8fL19fb3+PgucqJgAAACqklEQVR42sXc23LCIBAGYKy2pgft0WpP2vTA+z9i0+goCZAs7O7P3oWZTL5ZYAh7sca0MXmYG3jM7yfu4/TV1jdow01tX6cdg4UrGoN1FNM3a+GK1nBSzPYGrOJgsPZt1hrerYUrjoa9wjHgFI7B2veZWVk3tpCdWm07H30y8+4AIhedPFj7cW7wioABrggawIqIAaroGbYXzlGCUvQNnc0IUgwaQIoRA0QxagAoCAZ1BcmgrCAaVBVkg6IiwaCmSDIoKRINKopkg4IiwyCuyDIIKzINoopsg6CCYRBTsAxCCqZBRLGo2RcrtkLAwFaIGJgKIQNLIWZgKAQN2QpRg1dKoCmEDVkKcUOGQsGQrFAxJCqUDEkKNUOCQtFAVqgaiAplg69YFDAQFADDqAJiGFGADI1iF1XADAOKvqHSLApHFFBDRAE2BBVwQ0BRwOApfn8LGDxFEcOQAmeIK5CGmAJrCCvQBq8A8r9Zrw08qp6irvAGs/zpIr4XBQxf3nQsyhvwipABrQgbsIqYAamIG3CKnqH+LKDoGXbVwD84zDB4E4AZ4IqgAayIGKCKqMGYS5RiwOArlgUMnuJrWcAAUYwaAAqCQV1BMigriAZVBdmgqEgwqCmSDEqKRIOKItmgoMgwiCv6hkvaa6KKTIOoItsgqGAYxBQsg5CCaRBRsA0CCgEDWyFiYCqEDCyFmIGhEDRkK0QNmQphQ5ZC3JChUDAkK1QMiQolQ5JCzZCguNUzkBV3P4oGokLZQFKoGwgKgGFUATGMKECGQQXMYMxVTAE0RBVQQ0QBNgQVcENI8QwoBo8cUiszWYPz4OVi3bQ9cBQoQ0exblsvTDZwg6PYHNo/tE0XmvVwa4BxWBentgtnL+A8HHPxcnYaaBRoQ6twDY3iEW5oFI8Hwx/QxSE448b+MwAAAABJRU5ErkJggg==); - background-color: rgba(255,255,255,0.8); - background-size: 50%; - background-repeat: no-repeat; - background-position: 50%; - width: 2.7em; - height: 2.7em; - text-align: center; - overflow: hidden; - color: #a33; - z-index: 2147483642; -} - -.ath-container.ath-icon:before { - position: absolute; - top: 0; - right: 0; - margin: 0; - float: none; -} - -.ath-mandatory .ath-container:before { - display: none; -} - -.ath-container.ath-android:before { - float: left; - margin: -0.7em 0.5em 0 -0.6em; -} - -.ath-container.ath-android.ath-icon:before { - position: absolute; - right: auto; - left: 0; - margin: 0; - float: none; -} - - -/* applied only if the application icon is shown */ -.ath-container.ath-icon { - -} - -.ath-action-icon { - display: inline-block; - vertical-align: middle; - background-position: 50%; - background-repeat: no-repeat; - text-indent: -9999em; - overflow: hidden; -} - -.ath-android .ath-action-icon { - width: 1.2em; - height: 1.8em; - background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADUAAADcBAMAAAAig/QJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAFtDAABbQwH5xg68AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAB5QTFRFAAAA////cXFxaWlp////ZmZmnJycoaGhpqam////1D9b6wAAAAV0Uk5TAAgJERExZxYzAAAAYklEQVRYw+3WoQ2AUBAE0SsBOiBUQEIDCArA4FFoHBaJxNItFYz/x5+xz282VmwJTdM0rRzbsS1e7Pm9zdgUVn491rkFmqZpSezEjqo/Sos1HoAEjdjgFmiapiWxG7tq/igfnYteFlnOWZEAAAAASUVORK5CYII=); - background-size: auto 100%; -} - -.ath-ios7 .ath-action-icon { - width: 1.6em; - height: 1.6em; - background-image:url(data:image/png;base64,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); - margin-top: -0.3em; - background-size: auto 100%; -} - -.ath-ios6 .ath-action-icon { - width: 1.8em; - height: 1.8em; - background-image:url(data:image/png;base64,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); - margin-bottom: 0.4em; - background-size: 100% auto; -} - -.ath-container p { - margin: 0; - padding: 0; - position: relative; - z-index: 2147483642; - text-shadow: 0 0.1em 0 #fff; - font-size: 1.1em; -} - -.ath-ios.ath-phone:after { - content: ''; - background: #eee; - position: absolute; - width: 2em; - height: 2em; - bottom: -0.9em; - left: 50%; - margin-left: -1em; - -webkit-transform: scaleX(0.9) rotate(45deg); - transform: scaleX(0.9) rotate(45deg); - box-shadow: 0.2em 0.2em 0 #d1d1d1; -} - -.ath-ios.ath-tablet:after { - content: ''; - background: #eee; - position: absolute; - width: 2em; - height: 2em; - top: -0.9em; - left: 50%; - margin-left: -1em; - -webkit-transform: scaleX(0.9) rotate(45deg); - transform: scaleX(0.9) rotate(45deg); - z-index: 2147483641; -} - -.ath-android:after { - content: ''; - background: #eee; - background: -webkit-linear-gradient(-45deg, rgba(238,238,238,0) 0%,rgba(238,238,238,0) 50%,rgba(238,238,238,1) 50%,rgba(238,238,238,1) 100%); - position: absolute; - width: 2em; - height: 2em; - top: -1.5em; - right: 0; -} - -.ath-application-icon { - position: relative; - padding: 0; - border: 0; - margin: 0 auto 0.2em auto; - height: 6em; - width: 6em; - z-index: 2147483642; -} - -/* OS specific classes */ -.ath-container.ath-ios .ath-application-icon { - border-radius: 1em; - box-shadow: 0 0.2em 0.4em rgba(0,0,0,0.3), - inset 0 0.07em 0 rgba(255,255,255,0.5); - margin: 0 auto 0.4em auto; -} - -@media only screen and (orientation: landscape) { - .ath-container.ath-phone { - width: 24em; - } - - .ath-ios.ath-phone { - margin-left: -12em; - } - - .ath-ios6:after { - left: 39%; - } -} diff --git a/legacy/addtohomescreen.min.js b/legacy/addtohomescreen.min.js deleted file mode 100644 index 3cc8d51..0000000 --- a/legacy/addtohomescreen.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Add to Homescreen v3.0.6 ~ (c) 2014 Matteo Spinelli ~ @license: http://cubiq.org/license */ -(function(window,document){var _DOMReady=false;if(document.readyState==="complete"){_DOMReady=true}else{window.addEventListener("load",loaded,false)}function loaded(){window.removeEventListener("load",loaded,false);_DOMReady=true}var _reSmartURL=/\/ath(\/)?$/;var _reQueryString=/([\?&]ath=[^&]*$|&ath=[^&]*(&))/;var _instance;function ath(options){_instance=_instance||new ath.Class(options);return _instance}ath.intl={de_de:{message:"Um diese Web-App zum Home-Bildschirm hinzuzufügen, tippen Sie auf %icon und dann %action.",action:{ios:"Zum Home-Bildschirm",android:"Zum Startbildschirm hinzufügen",windows:"Auf Startseite"}},en_us:{message:"To add this web app to the home screen: tap %icon and then %action.",action:{ios:"Add to Home Screen",android:"Add to homescreen",windows:"pin to start"}},es_es:{message:"Para añadir esta aplicación web a la pantalla de inicio: pulsa %icon y selecciona %action.",action:{ios:"Añadir a pantalla de inicio",android:"Añadir a pantalla de inicio",windows:"Añadir a inicio"}},it_it:{message:"Per Aggiungere questa web app alla schermata iniziale: premi %icon e poi %action.",action:{ios:"Aggiungi a Home",android:"Aggiungi alla homescreen",windows:"aggiungi a start"}},nl_nl:{message:"Om deze webapp op je telefoon te installeren, klik op %icon en dan %action.",action:{ios:"Voeg toe aan beginscherm",android:"Toevoegen aan startscherm",windows:"Aan startscherm vastmaken"}},zh_cn:{message:"如要把应用程式加至主屏幕,请点击%icon, 然后%action",action:{ios:"加至主屏幕",android:"加至主屏幕",windows:"按住启动"}},zh_tw:{message:"如要把應用程式加至主屏幕, 請點擊%icon, 然後%action.",action:{ios:"加至主屏幕",android:"加至主屏幕",windows:"按住啟動"}}};ath.defaults={appID:"org.cubiq.addtohome",fontSize:15,debug:false,modal:false,mandatory:false,autostart:true,skipFirstVisit:false,startDelay:1,lifespan:15,displayPace:1440,maxDisplayCount:0,icon:true,message:"",validLocation:[],onInit:null,onShow:null,onRemove:null,onAdd:null,onPrivate:null,detectHomescreen:false};var _ua=window.navigator.userAgent;var _nav=window.navigator;_extend(ath,{hasToken:document.location.hash=="#ath"||_reSmartURL.test(document.location.href)||_reQueryString.test(document.location.search),isRetina:window.devicePixelRatio&&window.devicePixelRatio>1,isIDevice:/iphone|ipod|ipad/i.test(_ua),isMobileChrome:_ua.indexOf("Android")>-1&&/Chrome\/[.0-9]*/.test(_ua),isMobileIE:_ua.indexOf("Windows Phone")>-1,language:_nav.language&&_nav.language.toLowerCase().replace("-","_")||""});if(ath.language.length==2){ath.language+="_"+ath.language}ath.language=ath.language&&ath.language in ath.intl?ath.language:"en_us";ath.isMobileSafari=ath.isIDevice&&_ua.indexOf("Safari")>-1&&_ua.indexOf("CriOS")<0;ath.OS=ath.isIDevice?"ios":ath.isMobileChrome?"android":ath.isMobileIE?"windows":"unsupported";ath.OSVersion=_ua.match(/(OS|Android) (\d+[_\.]\d+)/);ath.OSVersion=ath.OSVersion&&ath.OSVersion[2]?+ath.OSVersion[2].replace("_","."):0;ath.isStandalone=window.navigator.standalone||ath.isMobileChrome&&screen.height-document.documentElement.clientHeight<40;ath.isTablet=ath.isMobileSafari&&_ua.indexOf("iPad")>-1||ath.isMobileChrome&&_ua.indexOf("Mobile")<0;ath.isCompatible=ath.isMobileSafari&&ath.OSVersion>=6||ath.isMobileChrome;var _defaultSession={lastDisplayTime:0,returningVisitor:false,displayCount:0,optedout:false,added:false};ath.removeSession=function(appID){try{localStorage.removeItem(appID||ath.defaults.appID)}catch(e){}};ath.Class=function(options){this.options=_extend({},ath.defaults);_extend(this.options,options);this.options.mandatory=this.options.mandatory&&("standalone"in window.navigator||this.options.debug);this.options.modal=this.options.modal||this.options.mandatory;if(this.options.mandatory){this.options.startDelay=-.5}this.options.detectHomescreen=this.options.detectHomescreen===true?"hash":this.options.detectHomescreen;if(this.options.debug){ath.isCompatible=true;ath.OS=typeof this.options.debug=="string"?this.options.debug:ath.OS=="unsupported"?"android":ath.OS;ath.OSVersion=ath.OS=="ios"?"7":"4"}this.container=document.documentElement;this.session=JSON.parse(localStorage.getItem(this.options.appID));if(ath.hasToken&&(!ath.isCompatible||!this.session)){ath.hasToken=false;_removeToken()}if(!ath.isCompatible){return}this.session=this.session||_defaultSession;try{localStorage.setItem(this.options.appID,JSON.stringify(this.session));ath.hasLocalStorage=true}catch(e){ath.hasLocalStorage=false;if(this.options.onPrivate){this.options.onPrivate.call(this)}}var isValidLocation=!this.options.validLocation.length;for(var i=this.options.validLocation.length;i--;){if(this.options.validLocation[i].test(document.location.href)){isValidLocation=true;break}}if(localStorage.getItem("addToHome")){this.optOut()}if(this.session.optedout||this.session.added||!isValidLocation){return}if(ath.isStandalone){if(!this.session.added){this.session.added=true;this.updateSession();if(this.options.onAdd&&ath.hasLocalStorage){this.options.onAdd.call(this)}}return}if(this.options.detectHomescreen){if(ath.hasToken){_removeToken();if(!this.session.added){this.session.added=true;this.updateSession();if(this.options.onAdd&&ath.hasLocalStorage){this.options.onAdd.call(this)}}return}if(this.options.detectHomescreen=="hash"){history.replaceState("",window.document.title,document.location.href+"#ath")}else if(this.options.detectHomescreen=="smartURL"){history.replaceState("",window.document.title,document.location.href.replace(/(\/)?$/,"/ath$1"))}else{history.replaceState("",window.document.title,document.location.href+(document.location.search?"&":"?")+"ath=")}}if(!this.session.returningVisitor){this.session.returningVisitor=true;this.updateSession();if(this.options.skipFirstVisit){return}}if(!ath.hasLocalStorage){return}this.ready=true;if(this.options.onInit){this.options.onInit.call(this)}if(this.options.autostart){this.show()}};ath.Class.prototype={events:{load:"_delayedShow",error:"_delayedShow",orientationchange:"resize",resize:"resize",scroll:"resize",click:"remove",touchmove:"_preventDefault",transitionend:"_removeElements",webkitTransitionEnd:"_removeElements",MSTransitionEnd:"_removeElements"},handleEvent:function(e){var type=this.events[e.type];if(type){this[type](e)}},show:function(force){if(this.options.autostart&&!_DOMReady){setTimeout(this.show.bind(this),50);return}if(this.shown){return}var now=Date.now();var lastDisplayTime=this.session.lastDisplayTime;if(force!==true){if(!this.ready){return}if(now-lastDisplayTime=this.options.maxDisplayCount){return}}this.shown=true;this.session.lastDisplayTime=now;this.session.displayCount++;this.updateSession();if(!this.applicationIcon){if(ath.OS=="ios"){this.applicationIcon=document.querySelector('head link[rel^=apple-touch-icon][sizes="152x152"],head link[rel^=apple-touch-icon][sizes="144x144"],head link[rel^=apple-touch-icon][sizes="120x120"],head link[rel^=apple-touch-icon][sizes="114x114"],head link[rel^=apple-touch-icon]')}else{this.applicationIcon=document.querySelector('head link[rel^="shortcut icon"][sizes="196x196"],head link[rel^=apple-touch-icon]')}}var message="";if(this.options.message in ath.intl){message=ath.intl[this.options.message].message.replace("%action",ath.intl[this.options.message].action[ath.OS])}else if(this.options.message!==""){message=this.options.message}else{message=ath.intl[ath.language].message.replace("%action",ath.intl[ath.language].action[ath.OS])}message="

"+message.replace("%icon",'icon')+"

";this.viewport=document.createElement("div");this.viewport.className="ath-viewport";if(this.options.modal){this.viewport.className+=" ath-modal"}if(this.options.mandatory){this.viewport.className+=" ath-mandatory"}this.viewport.style.position="absolute";this.element=document.createElement("div");this.element.className="ath-container ath-"+ath.OS+" ath-"+ath.OS+(ath.OSVersion+"").substr(0,1)+" ath-"+(ath.isTablet?"tablet":"phone");this.element.style.cssText="-webkit-transition-property:-webkit-transform,opacity;-webkit-transition-duration:0;-webkit-transform:translate3d(0,0,0);transition-property:transform,opacity;transition-duration:0;transform:translate3d(0,0,0);-webkit-transition-timing-function:ease-out";this.element.style.webkitTransform="translate3d(0,-"+window.innerHeight+"px,0)";this.element.style.webkitTransitionDuration="0s";if(this.options.icon&&this.applicationIcon){this.element.className+=" ath-icon";this.img=document.createElement("img");this.img.className="ath-application-icon";this.img.addEventListener("load",this,false);this.img.addEventListener("error",this,false);this.img.src=this.applicationIcon.href;this.element.appendChild(this.img)}this.element.innerHTML+=message;this.viewport.style.left="-99999em";this.viewport.appendChild(this.element);this.container.appendChild(this.viewport);if(!this.img){this._delayedShow()}},_delayedShow:function(e){setTimeout(this._show.bind(this),this.options.startDelay*1e3+500)},_show:function(){var that=this;this.updateViewport();window.addEventListener("resize",this,false);window.addEventListener("scroll",this,false);window.addEventListener("orientationchange",this,false);if(this.options.modal){document.addEventListener("touchmove",this,true)}if(!this.options.mandatory){setTimeout(function(){that.element.addEventListener("click",that,true)},1e3)}setTimeout(function(){that.element.style.webkitTransform="translate3d(0,0,0)";that.element.style.webkitTransitionDuration="1.2s"},0);if(this.options.lifespan){this.removeTimer=setTimeout(this.remove.bind(this),this.options.lifespan*1e3)}if(this.options.onShow){this.options.onShow.call(this)}},remove:function(){clearTimeout(this.removeTimer);if(this.img){this.img.removeEventListener("load",this,false);this.img.removeEventListener("error",this,false)}window.removeEventListener("resize",this,false);window.removeEventListener("scroll",this,false);window.removeEventListener("orientationchange",this,false);document.removeEventListener("touchmove",this,true);this.element.removeEventListener("click",this,true);this.element.addEventListener("transitionend",this,false);this.element.addEventListener("webkitTransitionEnd",this,false);this.element.addEventListener("MSTransitionEnd",this,false);this.element.style.webkitTransitionDuration="0.3s";this.element.style.opacity="0"},_removeElements:function(){this.element.removeEventListener("transitionend",this,false);this.element.removeEventListener("webkitTransitionEnd",this,false);this.element.removeEventListener("MSTransitionEnd",this,false);this.container.removeChild(this.viewport);this.shown=false;if(this.options.onRemove){this.options.onRemove.call(this)}},updateViewport:function(){if(!this.shown){return}this.viewport.style.width=window.innerWidth+"px";this.viewport.style.height=window.innerHeight+"px";this.viewport.style.left=window.scrollX+"px";this.viewport.style.top=window.scrollY+"px";var clientWidth=document.documentElement.clientWidth;this.orientation=clientWidth>document.documentElement.clientHeight?"landscape":"portrait";var screenWidth=ath.OS=="ios"?this.orientation=="portrait"?screen.width:screen.height:screen.width;this.scale=screen.width>clientWidth?1:screenWidth/window.innerWidth;this.element.style.fontSize=this.options.fontSize/this.scale+"px"},resize:function(){clearTimeout(this.resizeTimer);this.resizeTimer=setTimeout(this.updateViewport.bind(this),100)},updateSession:function(){if(ath.hasLocalStorage===false){return}localStorage.setItem(this.options.appID,JSON.stringify(this.session))},clearSession:function(){this.session=_defaultSession;this.updateSession()},optOut:function(){this.session.optedout=true;this.updateSession()},optIn:function(){this.session.optedout=false;this.updateSession()},clearDisplayCount:function(){this.session.displayCount=0;this.updateSession()},_preventDefault:function(e){e.preventDefault();e.stopPropagation()}};function _extend(target,obj){for(var i in obj){target[i]=obj[i]}return target}function _removeToken(){if(document.location.hash=="#ath"){history.replaceState("",window.document.title,document.location.href.split("#")[0])}if(_reSmartURL.test(document.location.href)){history.replaceState("",window.document.title,document.location.href.replace(_reSmartURL,"$1"))}if(_reQueryString.test(document.location.search)){history.replaceState("",window.document.title,document.location.href.replace(_reQueryString,"$2"))}}window.addToHomescreen=ath})(window,document); \ No newline at end of file diff --git a/legacy/css/pygment_trac.css b/legacy/css/pygment_trac.css deleted file mode 100644 index e65cedf..0000000 --- a/legacy/css/pygment_trac.css +++ /dev/null @@ -1,70 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f0f3f3; } -.highlight .c { color: #0099FF; font-style: italic } /* Comment */ -.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ -.highlight .k { color: #006699; font-weight: bold } /* Keyword */ -.highlight .o { color: #555555 } /* Operator */ -.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #009999 } /* Comment.Preproc */ -.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ -.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ -.highlight .go { color: #AAAAAA } /* Generic.Output */ -.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #99CC66 } /* Generic.Traceback */ -.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #006699 } /* Keyword.Pseudo */ -.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #FF6600 } /* Literal.Number */ -.highlight .s { color: #CC3300 } /* Literal.String */ -.highlight .na { color: #330099 } /* Name.Attribute */ -.highlight .nb { color: #336666 } /* Name.Builtin */ -.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ -.highlight .no { color: #336600 } /* Name.Constant */ -.highlight .nd { color: #9999FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #CC00FF } /* Name.Function */ -.highlight .nl { color: #9999FF } /* Name.Label */ -.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #003333 } /* Name.Variable */ -.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ -.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ -.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ -.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ -.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ -.highlight .sc { color: #CC3300 } /* Literal.String.Char */ -.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ -.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ -.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ -.highlight .sx { color: #CC3300 } /* Literal.String.Other */ -.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ -.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ -.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ -.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #003333 } /* Name.Variable.Class */ -.highlight .vg { color: #003333 } /* Name.Variable.Global */ -.highlight .vi { color: #003333 } /* Name.Variable.Instance */ -.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ - -.type-csharp .highlight .k { color: #0000FF } -.type-csharp .highlight .kt { color: #0000FF } -.type-csharp .highlight .nf { color: #000000; font-weight: normal } -.type-csharp .highlight .nc { color: #2B91AF } -.type-csharp .highlight .nn { color: #000000 } -.type-csharp .highlight .s { color: #A31515 } -.type-csharp .highlight .sc { color: #A31515 } diff --git a/legacy/css/style.css b/legacy/css/style.css deleted file mode 100644 index 93e781e..0000000 --- a/legacy/css/style.css +++ /dev/null @@ -1,97 +0,0 @@ -@import url(pygment_trac.css); - -ol, ul, li { - margin: 0px; - list-style: none; - list-style-type: none; -} - -body { - box-sizing: border-box; - font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; - font-smoothing: antialiased; - margin: 0px; -} - -h1 { -} - -h2 { -} - -p { - margin: 10px 0 15px 0; -} - -footer { - text-align: center; -} - -footer p { - color: #f2f2f2; -} - -a { - text-decoration: none; - color: #007edf; - text-shadow: none; - - transition: color 0.5s ease; - transition: text-shadow 0.5s ease; -} - -a:hover, a:focus { - text-decoration: underline; - color: #007e7f; -} - -.outer { - width: 100%; -} - -.inner { - position: relative; - max-width: 700px; - padding: 10px 10px; - margin: 0 auto; -} - -#header_wrap { - background: #212121; - background: linear-gradient(top, #373737, #212121); - text-align: center; -} - -#header_wrap .inner { - padding: 50px 10px 30px 10px; -} - -#project_title { - margin: 0; - color: #fff; - font-size: 42px; - font-weight: 700; - text-shadow: #111 0px 0px 10px; -} - -#project_tagline { - color: #fff; - font-size: 24px; - font-weight: 300; - background: none; - text-shadow: #111 0px 0px 10px; -} - -#main_content_wrap { - background: #f2f2f2; - border-top: 1px solid #111; - border-bottom: 1px solid #111; -} - -#main_content { - padding-top: 40px; -} - -#footer_wrap { - background: #212121; -} diff --git a/legacy/images/arrow-icon.gif b/legacy/images/arrow-icon.gif deleted file mode 100644 index bad037672258d82eef814724ddf9bde0c81f5cc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2876 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 T=d)j*_4El@X4^PFK7I8YBT*xD diff --git a/legacy/images/blacktocat.png b/legacy/images/blacktocat.png deleted file mode 100644 index 6e264fe57a2e35a2855405ac7d4102c3f6ddcdae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1428 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=eg`=5?o13Glvx}*rp{t>#shg3DvyriZv5}jZ ztD`wguSMv>2~2MaLa!4}y`ZF!TL84#CABECEH%ZgC_h&L>}9J=EN(GzcCm0X zaRr%YgxxI=y(w7S0@dq`Q?EYIG5Vm0MT%&c5HR(CnDAr^T6f1avxRvmvnsN+?-j}Z~1)Zr#rqzrt`edmo44*B<0=C4>mrxHF6$p zVws~UocMfeI`gB8pYMLYTzA87`NOI2w2B*JM5L`^AkN4AFQu&S+6ULTPjv;vzl4& z-eaK_F|D4~l3hzBSF~icNT@MID=v+_X`vpuvf=8+S(|^vlRdHe0<)v-^wiVR3w=TQ)uFA9F z>vmq+74Fo8XB6s4)lGl3*wS zqzkXEuKxV_^ZWPjVB`@PrGUk@{r!EADZ0D6`~LlVKqU1npiQK70W0Uw~o_kOl)elAu5p3@3p?Rj@VyC>+z%)1XWb ze4Yli=3wU&*xLqA1i|hX@OcJgh=2kV$P@zw%1cX2;H5XHy$;s;!M7FAa0`^`fb|jZ zZ51rEZf$LWoeeNm1XlaNWIh;71gZR>NFAi|fm#cYB?bm!!E8C`CxZrSK;Z_oC*Z>{ zXs`mc*T9D%Fq8!O|M7pn144l9x``=F+t$nW;C)^l=Voi?gztsQ+z#(#r(!RxegSqKhr&6#Ib*zRVL0deE}kfyny{_C z>m3a0VE$(rE)4q%;^m|!toi2y>`zQBR}TzKK?WghhfqYo6p=DWIe8@|rE@S@1QG#9 z$ik7b(nuwgoGc1~fc;5a&fu$zw=;h^xg2R1%ePw**WL!P&!jUQ} zDt|a+Wu*@g(w=@UUbZ-C7f+GD8MHB;b{<$aFRZHz><^>u9anEJHQ|Fy|FZ;Vw|~>R zc*^`$j*OkFGaP5@21m*u{*?4L(8T0_hdMj|8|~?3hWW32|3_j^b3Zo>+zjLC>g{2N zIe?4&3FU^;^1#@7xq6tpy59eL7fl^qy<9yVUEN?>Xa$&wtsU0okNp?k!~|vF;^}4U zVuvx%Ruev8kilZ@QQBG;wJu&%P|(zrlSLwR?Q8#EzKZ|o`$r1SZU>RIF&Xht26Acl2O=y&PDDY`Tpf=|IfL||D!Mb zAQ||d#{RcP|Gjjeo`Eqm7OX4-F3VQ~P>*y1QO=cD!tFd(qm`{Jg2L zp}wxRrn;)KqP(oMq`0WCAU`kn+0&fttjvt`v?r;LDUTjLNJ&mgOo)$*CC5ZZks>3) z!$L!dgy5jS0Drt6&ezA=%hSW%&DF*EzSBLd<6Q@gz1=~KgW!`hq=+p-QM@58`YQ1J;!Z-n4{L0zkNYqU^`{pQ1PyV#36O7zoGJd zcY=sfhH+!n5|tw7^rpWN%XWzS(qUecrkXWc0lN6sKvV7dM1>tSBX%zgdPtfaLEOG; z%F56d%69rvbHmpAo@A-pgUyZGE5nhGOsg0#@#aV{xlNf0T_k>K>CAxb>2U?KWk-ReRNBBP*<;W(p42Sn`$Co{KoLtFbP zc0pKMf;KmHF;QQva52ePacwc#R99jtMgJ6}{ghzCFqGTwO_d1Kq&SHct>%ywn-(HZ5E5ud zyuBdA^dN_#wY)T+X;B7tFVpTL%0yV`(}KLB4@HK{iq1n)nkYa!%W6t}8(w4(YC8hKN zrZDtTZ4zSh6)(d%`r|4+i=iE`NUM@#vI>xe2!qjyc2>Np0oS=+sGR=GosaSe{qRwB#6JZFq}*uy_cDvCN{YvAn{mKo=z)LC-OdS(dMbz~%`^Wyr-d zKfQY6?UQtlx*eu)a+$;%R~s<%676(h;F)nPP2{uHaeBc}hQ(SBVmvSUB0E6`#3BXG=5$b_cPgC0G9 zi_?#9j%LV5GYf7t_ebi`jJeQgh4d5=3G2~IJT!FV@38<)HJT|0+T1Ko4sCSR7_HVc zpl!m1ysAUHqLgHQ2BUzyxkS@aIWfW+_zhvJM!T+HHZGdZg~TqsMKAGOm1}v8a95yN z$(c<^N~GkTyt;nt*TjVEuUZ6Anr4GEn-rP*hVXk$vs4^g(3Dj@ZM^Zis;NIz-_s+C8~ZOOBRnh|2Jh`_g7J!gCK1jV&}6_Dsq|3~_^8#1z#aHI?|H{| zi|O;}N{F=wqj>4jH^*Bh;9Hmx+*z|*bhA8&-Pq9}snOfVf7Qe3ZjBJmn9VbQGwr69 z2pxXG9OmsaFC|mmv?T+sXNX-Zx3*4>+@W9KjN%m*T`n*}pEC>LAA7_ijYMBAncA?d zc#gEJyk%L^zFSq^imR%)jWE_c9mC#(IN@=N6p+KCF4{#(M@sXY!8DsrX_G&vd&^ zCw=a8Xl-aTaC=BfW6-$!eDbk2&ViIs+h_M0H5G0ebR~D)1IrO|jCEqmacunkpb5+>|(ksN!& z-l=~0qFRl~>)HIP>$$Iu@Cw>@N}Zo(@P`y;B-L-zyRb{DlKUMJtKZXaK=cKK#&k<- zU;lJ5?z)+^RQEx%vdHezHeX(lm_(Mlug`k&*jFXnb#qnNBp zR+ep=a%)_gYg7#uKoCnKNLwbBH_kU+P&VbbL<>)@duJci@L1%xdt-!PxJbNN?`IDW z(cD=fDGMCc-FQ<|m21XqqtPb#LPwSscGX8>FEQ>-!n28hHKI#XN9IxYazpDX^Uv9@ zGsC_$InL=@-6c&#-SgaA2pB?rmK(Ye=jh_Zx!nCw#TpHZ>Rt!IZO`$E5ci5?8-S5n^| z4F0uk9Nf6d#peAY^;R8LePKF%%%`b2JzRjJk@an5zlX3sJGlVa>LEpm(KXM7K%fV?-LhBNNUY8(_Avl~Nvgi^M z9Ec_1#KBzRi7ul4643`5!Xp+^rW?|X3HcNrB9s?m|0*P+)?Zu~uMiPL|Hwa~J5;TU z@CFkq6A|i_8~Si5#E2>MomgnUPU!FOFdZhM!E%^0Q}`!`FinT>t9fBzufpnb!{fTb z#m|O+)CoVz6k#J4k)jjPg^4JMh|tZC*nbsqayi16DYE8F!CfZ|=GELu{)UiJfD;pkgc;8)Y* zSBLX&5D(I7h*5J4Qpd%tG2;vM!ZMhmbHt)MbfXtB(XW(vy6dA;c<(+GcX!ovU(~l* zRwlbxkm=pXtcm2wdNO5#T)jiC<%ykFij7nXin0i*#RX0ChK&`(F!#nxuEwyjl4l!& z-ZVJP|8QF1b>7mq-Nq&MK1>{_OZ+~bDDpjV{CZdm#regmXM2ImSI2c*29g zRZth0G!dAx6Ijk01icY^%rBPpaqMVAY~y6C#BQtq1Qo?XSf?jWe=30U?Yod-sqPsz&0XESn zD$!)k|8kVi6$vl21kaiy`5LR!bv{bIMdERmq>1m3j`UF4lqeP!6nA&Z4u$f*j>55) z6!$nhq1RPd!u19=2@#Q`RhV?VHz||#L3U%*(?a)LR=1S3fQP+46jq*8gJfpgh^az5YgUBQOYf zzRTUx`&e@2u^(%y|1KqvFDc0{?41hXy+q*LRPfv0fbCtv3~TaEBVlVd{AVNa+v8wx zgSe{_%#a!a#S@rOA*}oaHhk!jJ>oI`(Br8@j?^%&=@1_Na6Wv906zSe#Dmk*;dK1b zBK#32n?gVHJ)U5tOifWXBvRpqsS^BgQhO27(_v>*BZMqNRi`7>EF;wMk(!p_T1_M! zRHU9I$zVFdC^hPgA>}eE>Pk~28WnBAPqNsHQYlKjiHft{Bi$~FyOBz=>r2Goqwhvj zu=pq^%Oq!fT*QqB?jPb@=;FOCGhEy={P3xPdwEaz^0&r#x1Xi;H#qEpG2Z>f2bb%_ z=Q?@kMbk9&E-i;$`oLJ2)g?Yq!#iYOc(q11l@bZY5Q_DdaxCDg|fL5%td=4H$HveneGHA#b%F^N_zd$O)}$gc#5Vkh$ zn>FS8)8)VS%73Sp-(oEFl_*DPmowUytIMl?wq)PBSMe~kf+4$t%^!8di2WE_Wu!Y(z-Gejd7~GHIs)eu62qbJFnNthSs^SYaU!|hr{aqq%{4h^^nE- zU?&ZtRKr)ThVWu_c{U}|O?978rJIO~7}X0$Dxe|TCvI++##2#;V2bw1j6;@yoo9bQ7J2Rs9ELtsFbo0)R(h;M*wmH22J*0cATdJ9_@}DkW&OEUkyo>*2_wFD;l;ghFiJC4YSe9>gUCWxqwFyS_t zFl}^x?4lRQ$ZJW=f~HKa1ZHOl=M)h#`|jkXdzWKc*S+Sh`z2jpD(P5kPG5WnC9$*M z=jn|hLipzHfZ6V#{qCTCMwu+;a8vqQ8l2JyhU`R50rG55+U|-J1URot%7=kH1v9GAPuVl8bY`?EUkXm(~T4P163!pZnQJb2n z&9l_jeQKLv|I73JomTx_0sTE`{e8{-{j>dp`~Aa$1Ec2$#;gX$0|qA32Bw<_W@iW9 a><`Qf4lbM@T(lZo4j5d$e}awS|nzLUGGk*Hsi$6dzCp4iW*i7K!EID@Zpe76n>JW+x!(=~9oUJO9i#_q&hZ zz4v$TY)el1qmTDYZvcQ#!n?v0045PfH{j(#ylVg2BqLrySllXXxh4b4Msz6POEqGY zl%PUnXbOr*bJjPYivV!XP^7NHR*9ByBpMY3ap_QuDlK6Rz#^Vei%2q2j3h>73N@Gf zxauOAq>ysSD;Xl1NGm|)ig!2Y(B&JFQY9NQC2T2~7eiWP=YH zemTV1C8m-|qbgV?mple)l_;4c(CAPSgF=gx(3mt56QV%yLKce^L88+j8kI(;Li9+8 z#ewM@8jbY)ArsMb(hN?DF#dTg;)_d`W0;mhrDkVmQ?g--Mkk{}Y&P5FgHDemG$Qpm zY78+(s`cUH9)ze~qEl!wg+@(sc|^pTER0JgkdCFG(uzbc9IN%u3q_QSYDBbDh(e>P zRIa>6we?sE`Vz*3+WOQSElN#6^_nc5gy=^`__#4qyVnPDDH3QnOLYpODTq?2kz}b* zHI^Xcl8GCNR3YWW3mHtIkjbX;=`>~(1hH9sM%=}<{+B24|5Y;IRs5D-uQISUL%TY`apB@{_=Ep+~Gd_jHUIC}qZ;A?5c%7WOHmZfQ_d)Dj+RW+7X|vxt z>6dtR^ZoaBenG2IhE*nft!_p-L|$!QoayF1X7>-*T&ko!+NbZ3{S*!Fm{D>~4#1I! z8N_OM3jh)^(ry5F0kD`j5wfWOn26KMtKI(K(w#o!;)5T}SD`BLhdXlS+kSg`)+}vw zMwl(vavExt935%Rr@`z-R+NG93z@Yb*xFYa?_$lx%VA8q^0{D)@0Jtq@GFP{tOPqQ>U@_Kdk4&6@mJ4Jh|Fg`hmq6 zWGaM)x$g3t&Wi142v9@LR&UeLjQWx%8O`ZWwg!OSe;Tw)tqp7KJiiKD@%!>TkFK_w zyGw^ASx-}YrIdlt4P|(id)G(iXOE)&ki1dNr|I~AJgSohLq0uGUV7{|3oCYIxu;tl zAAh-I@aaj@$A%MXpv<~hJa5g$pH?pxM5nR9$T!q^jb{&B2xw_ZI;!gg=?|v8NqZ;i z{M5M{hho|b&IIXMj+uKhvn*D#PfzQueEUT(&vFdXLkH{EW~qZpy2T$Bu>H!f^_Jnc z^4*emG(wN-)@t8ZEPlq@eGlrqoErl7?jg+b_da{D5vVVRoEnj8!wOFZt3PtoJ13hA z?c3Qw`i8dIyApdW?fM0F-oQFg(fz(fA=_z5DlOkSsS2R%Km4HCc2tP_8iRXuciVu@l*eK z=5LDQjj&CGVzoq#|1>0Vef__;eED5ZPo|qsue2Rhe!oeu?C8Mwq^~s) zlfL)Gq&HP{ChzX&=0z427aj=)yt?mn&Bb09>wgDdIN;bi%brg-2+-H%Z6&8x4e9Gz z%kh>ij${4+hT;6W{Zxs%YOv+-pFEqtDzwx(1^nTI2KsFon18c1#MYiKzd2G=c&y>} z=pLKm+GFdU*o2n2X0Uo$Z^yRL6*n&(zd^D2nEc#Y?_E_|M9q^<95$$5S(ur@^#zk+ z0`tA@J;&=?xur;P`ufqU{+NhZzm@pCk$O{7?KyTI zgD<~QTOld+KF1vPedjjb0Iln4g;t6?wy~%7ACh@A4y>{Cn3swJye}jX3Rb+qgL3L@ zbqTbt*8W)zBcnv-m1qdJZLhi8*?+#}bJzdlbH_nt-`#&rcE;Flm`f#wTKgw$A^m3A zWZxl4+0X~)Z$8Qm>`$~Tg-WJepbmt3cjDWw$?uM{LNS<*=&va`T PL3fZ4mn1wIo4)zKeD(xG diff --git a/legacy/images/clear-icon.gif b/legacy/images/clear-icon.gif deleted file mode 100644 index 8e9361a10231556fc3ffdae7b94e3ccf8c3b20b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9851 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 diff --git a/legacy/images/drive-icon.gif b/legacy/images/drive-icon.gif deleted file mode 100644 index 3afcf86bc4f1ed34c759486184a7e55f05236d91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9819 zcmbVvXE>Z)*Y;qvG0GSOK}PS)=rv|W?`IVy1KEk zvA4J9pM5$$KCbDz{HWeQGS@tJzLP%F@_cWwVd(t${On?*s-vSryFKyzQ_9(l+s2>< z4u?B?Yd-g54HYy4eQy7?P37wwgO_c(7Z(@))yAijMt2ADzIWe5#Mj;KOgsOY_qkd5 zXb5%rdv|1H_IlOUzF)pspIQ60JJPM))6?_$^XI|AL8Znh-fAD>pVO(GPshi{ac}D^ zOHJRuf3FfYynRf-9|@c6`GK|%PW~LsetWHYdU{GE z5*HU2wFAD+%*-q=FW2;4?Ck9Pp7R&03-avD$!j^k*lyl=Eh>_dzqGXU=V-Nu6t*xz`l^zEN2d87& zjAiy8aGK|%Xtr`U)rw$+$gYslvL7Fw;=avoPu$Z9`ZhT^X&Qa}sY$soKV9t}k$8Dw z5b;aX_tVKJnz__@XZqpqrI?d5qW?(o;qfIT%gP}9fbFpbUyjB7$rq;=zYU{~&lf_5 zwicnqj&)x~Pk+vx4oL3*J~nt2zd7OsEp;-CJU$&opW*Ll`K;^^F7?9*5#yCFJ`J-x zw*Jzh{O9MmTET6-&^;}`FBc~}gijUe6AkAVM8l}lb)5D2mrPBcWoU_0dDrjXgSh#h!dzw;w2>0^73@^@{-u|?&4w$Z4`L|Ep>)uSZMithL$@Yu6LY{p&Q?v zF;_U8j9l#=Rrj2?v~@){kFjOn`8E^Glxe9S`V(5}U=Vq17;(JcEshEys{1c$MSaE1 za#gyT|Gg~91N#>w*h`fM_4fwsZ%%c;Kv$To z1YF!1E(eFnAtVseGV=2BVlXK<0xk)cl0-;}BjlB&rIg@s*#8WkE4DxvHzhL-t^eV= zl2m!zgMn90JpJzweEba!|83YeNa9}sNjUrYNQOE3OCluTl0H6v$Mr9C zP_UWn|8e6#qJwUS`@2e-xd!>&3v_n9g7f~Pe3iTZo#=1il{ZSpfgV?f;^?j6=X}q{ z)i+pILzU-hN5aL!MM+CTR!&1hP7#ihg3Bo&5Q_3BSxp%QIZZ8ulpmM8cNmo__ zC4-WclSiSX6cGqbX$5&rc{EB+T~0w=T~S&N{*SJ%Z&0wKue0kvydGD)|D!ASzv?Qf z2f8{2`vu;_9Lm=;s6b zSALZ|{sTV>u7Qx1h0Dpv{=ee>Z(W!FpPWfvIV1UZar|G!^3T#$1^zw#cj;dV|85>v z->Z%ZylM@StA@Wg|9y6Pa(wjb@L-?t^T*!q&iC!D&2Jm)YhPDazI^_){Bdb<;lupg z``MXk{JXbPlM~}(qa(vZg9H72xZa-bt~Z^pJKEb?Tbi318|q)ZtgEegQC(G8QC?PB zQe0H{ydXdCS?<%E>?e=2GO-!ykJ3_8l9L`jNKA;2i^ar5-;aun2oDPlxfdK17~t>c z>*MX^>EV9Y&DF)($*?xfYiVkzqftn;o2n|x zN{R~daF_QBzS; zkORp`NdN%uGa%saA@;BD)tw8VA_D5EICL6{`{JpfBDSLqB?Au`c=ZZ&8cT;#S*1Of zM;psVGGOW{9J)>AV~>Sy)!2?TRZKjEJC7IWHdjvND+GOC9&4_8SA>iQaq6{HPnYRD z7P&Lt@?y5iq)hL*UTe)5A_ZMDV+Lkb&JjJvo&`n+FpKa_g@=-uHXLZ z)0?ov@1G{x>%a73$Y{6>IvQ37lAxk?lO2s~BUoPjLW9>$8xy(GUY{plH*dZxR!`+J z>}=Vdt-e)jHx(h6gKlu1C^UT2w)e3kXp;g{*NVHl&HjwtsH!ed-%#|hHFz)FJUkhhCeejpS5d9uuZ6f0ih4qesJArL9q^Fli z9Pr`M@FL|?$59JRR;|RnzBkRTh6)ZGc`R=&u}h(R3_&9R8hvdzfZmw*UyPwhGYj z7CvqZi@woO(cC-f3|tg!O&B5R0~7a(}8!+3I6si9$U!`5Dhe6AO+H>9pm#o%_H5&~mh* zUofIl^WEEWMVMVi(~=nBLQ2hw*H0|`=2>vfBz;)J$6P`WSyTJUIxW7Ow((KjwcBJv zB$2?Hot8=r8KuXlw`o3g)e?zQ;}BP4pZn<;yPNFtAdW=A%`AUMST?O~(8r&B4G9X0 z+YthkZ97O5ohx`HQ_OVkc*yW{bq@QevaY4J1J`T)a;zC3>}2#8kuI`xgAN)T1?;=R zf_rmJh;J2JOPP?MK;tk7J4OZ;;{XZ*?a0o8`*fNkK7`R;*tFuAeX^-aL zRrBoQchij;3zvSr@-~1}3pc9#m?_tHvHAnEb6n}m^8@vnQBkU9*O@_2<)y^6LZmFv zCPwwa>kD5tXp++hvYnUG);E(!9Qs`!z&ef^ompqpuZewaC_fvjCM&4{%S2(HbL`jO zgX(-DvfQSafFl`qq_d<=aJ1XgAd`b27)H*qcT5ZwKTvCSy35>1n^LX(WE!=H-b!=h zCs;*R=Yfdg<%MHFW930I`<=9X@#_*>RL7Z<98xT3Go;^*!Z&P83UJzK+D5giTpO1q z;0;n4?+1eJ&!Egqn6a%FDOyWIa6O^!0myDDONtg5pE}ta?f}wjzt{)ot6}0UKM+VmqVMZYE)lda8zochc}}hl{{En5klV(fRlWOi8SDbC9@Zlw@d$j_lo&Ne-Z1)6)a&d<%h~kbUxTlb8s#;Qd95euZ^j% zF{u;DR;M;uvw|u)ag|1U4!#KGVkZ^tT+Qu9ACAny&9E*L-XW|fYDg!RY?7_#19MAc z(=7u?4zsbS9V|CpgP%S`(DWO|x#(e^`X!S_mz&b8-i;}vA;tk}&72nKQZOG=8up=i z8a6q6UH8;4#~LbuMfvVWTN z3hLKom6AI`8vA_u464n)1EOH_OB0owJzmJ?M3O?X#R8k;a@GHgzKA>0q#qx*S|rwy zG{)$byNkEZ0Rzi4@7#VF$O9Yhg~i9IDGjqtcM5UM9m{c(r^z5YY~YH{th9et`NQCk zm_Sbz;71dTRLc6e;hf}m-H*7*c#}B)`j8?dw6~Oor>T!_S755Hw#SxCeu$QAi_jBxx%V*e-$#K5m=qu7c zyp5y1Xd+Q_8dC>EyG3|4lUr=K(iuY$a@)Txef_07gaqjLywk4f&%9v0OYR>eFE-~w zg^?^xs7hxO{?ghPM|qOwPx-3#+OwN_We7P6)ZIyurj3d!rO%IrHzwM=7p@V9?2;_( z7RqX9oLQf{?7E_W`wDo<*FUhzGnQ; z2dK{*1=^ddC>qiWEK>z-qg(bR?3#WRhS^$Md%#+S=yvW%bk-QiDGfx$2S5CIkf3Ly z)RP-BKSHRn2Gw;)82Im(QQ_U|yQ|(e?8iRaKqJk63P<#X}6IT7%B$(%)Qp3{c1#+xs{E3;1L(B!AM!u%? z_UR!v1m1R!cGV>-pdhM58EhrpiHivd_);}(nB4Y+HvHnl|}O_4F7q?MvFSQ z#Zms_t<-_apZS!=wTaXhZ_N}Z?$_Md>T0v`pJ0gU4s^JC9fT!sD&d}HxjYsxGYYM2 z=(oc=ub7C>SbEP%B1gRGrL8%Q>1}+2L!sVJcF8s(Q8ukCOXi#gQwqZKALb1$zdW_@ zBx&8qeHME6>+AO;W)mC*p=ZdG5d6nPc#3@ui}lGPfU}_TMlo%^EXRykEmgqIhGp15 z5TKMZ1M^`d%X{4lyK5ID(GqT#__h+GghsWlT{46>A(GmZ=P zq=DMtl+O-D=8DuAYEWChOO_SrXL=H8ji7XgJ}{<)rvnjL&x}~2_GI^Mc`|iN z22uaSX+8*G*NL1{{6SBweA2Ae~&rukA4$7CnOFa~{?K0YV$_)-0QsBm9;eA&qMPiL{)YSqTM~ z!_$f+QrxMfA?^`4lV)WBW7zmOK0GL|97s3qB&vWlUImg;Ju8!ac8{Eb&XhFz1;%KB z2|QvY2(wfzjs`;lvEL$1AfUL1d2iss)bD|&1O_Ku0t6mpU>c{$oD|2LLLUphyzQy| zjHx6sFZbco8L}Mu5~|bt2E%>aVz zgA8)*4f|AE$=%-Geh%W!wHRZX!BFpyiS>^ma;PCrx;bAxnAUUc61Qc?2$^6=2~Tpq zP9HTPtT>=NuY(sPCJd2BW+s1lqJz4-ZJxgxL>eOqna;h-Sufz|(FvnF$4)P4+GKU=j!~%ZYp13ZrFqr1+BTAI^}kfg*E%W+%1o%`O5V zAB!|eV47Mh&moP8HYs31WP)^Tbs%L0L*90406s+seNx0d5hg2-$`1mnFA4OlrlgY3 z!lZPW3~-NKhBJqX3n9eV2l#J=8VF$3SQTp1vJ_6qMnWmj`DB8U$w$H2Em%aZp`3YN zK~yLEW(oGmlJ6s6CObFKc`;zxBu9Ov_2I zQZa?*-R0dR?e>I>lKaf^F|l>jfQD(Ku~jT2B-6#1C*(|y)}EAEA)F{ORPNmoWQ__* z{CtGZmI)2lYF>6yg)$0glM<2U30b{@9YL8*p6+$hARC@?O#_}R1XLVCM~ic}v%!D} z2)-D&Dep{g1D&0Fl@mxwvjjo=gVtcRs}<0KvB-50qbQt27|DqZ0k(BOc%`muHnEoAIuW-pq2$s52(>8$z@OARkF3IA>=jWSjVT8Imow+4Q|GG031_&B;s-?WBl z@XDed3tnp%Xe1c{+^55LWTdvpCDe$MJb6k3yp_)=1E=EW80@zpADU>rv4d<8fs$am zO)VR_r^(L*1~hg^C9r)G&0f-`S5M>@=~xP}eOflypc6-@rU3`{g7B~$bp3Ul4JJvb zgj}uKiVjZV?KL#yR1P;KQKM{iho_0{Q#q>)TiA3(Pbgyny<&|GqQp@d@jjp_$B3wU zi`U0CUm6J`7U(nN9l+!paYqVAj!`ESQj7dn`C1PKiAOnK~YlFN9${31P`{GIoQ_^1j$yo2n(zHq235ia0q(oyqRxV4=d+Jnw0BiH+ zURI)LEWl>6D&3(Su}`~|_I7ypwK*2If^RKsY8G>>7ww=pOJN*^RUNBzYn*rdu@EEy zbn`;U0Uuw{7r%zbg2`?1B_3MYu+P=ncx{) z#%IMhgFjLhBB4c?86EMil6;&(s(?rvqlQU(f#z#OELa;e>k>-Zq|d4Hk`sWj;h*mA zJg4DSfzIGx>pq{?|I{8c!3WM|ybkMisRXM1VKl&%THf&$Byelzw}21oxFH}pP%8>o zCff)ss+;#v9ktdc&3nK-YRQNmk7OtqwZVRn5~~UJ9!SJyS_0;I`sl4+*J!RxidctAZRwb zmOSqFBnSnOm&3o*mz*MMO+UH4C(gBsx z?KeGDlN^pTjDf1o0b|fRIQKK3DUWk**1GG#hKxl0g*Y4(gk1plEPa2Dk5;CeKzef) z-{vlHzr4GIAffeNUOldpdZav7aOXOnjqw6MQ46BN)j`pKQPH<6#S=>g_XkH&q1=dk zC(y#fKb-ptLt_jY^p(R&MadlAwklQ$ts4hi!j zbQmO4Jb}*H|HoG0kMBJ{c0d34aruMr_Qy{GU9rjPwSZOWHj0}KKW_p67e9WU(-Hn$ z{si72TyOzIu>?>r0sMtP_mkiSCt+0EXR_aCiP>i@+Gp?GXDizF!b9R8HHP}rt>P&D z_#X%r9ffXqI3Ne}-@z_$GIAW1Tg`duS=LWTu#a?gfW zZgBkom|vV`^c!)NP|PJYMgT~wac8)9$K*KDyoTSyF&Cpn7sGy33oBbE;}uODF#TQ@IF4v1LBpIj$XgoO5=R7q2WR#M(U;j)@d%n9u z5d)+7{PRy!1KkEaLj{nI&l10aN}y(zaOvP}&!I7Hu+^Ve(?kCeH{pyy+?A4`0wou(lcdk=eimQ>*h^^=H z@9uyfAFy*6)5~AxI(8p5S+1*|NxjF5s>93}8faVK@Or1{)1NZVq#XVlEYA-~p3#%& zf2E=H602iVjT6QoK%6wbnPYNHfjSA8eTm`TPIuFnTPsSLuc+Ou1IO`C2sC58GYtU~ z6^!am{al>9E)bpxndT?Lfw+Tu+J<6A!D|8I(Y~qK%qXZo?t#t};~)e{l86G)gsHq2(d4{m z-a{fsb0p{hGWk-R&GRBF&Prt{lo#6u#o$jCSDeCG+^U&V?ro*Y z2@%&mI7O_SC>6zg`^BpI;*}7STE!04+w07SsO#i(X2i7(6P9@-SW}VFNinCk> zTT457Z^}OMpa!L{H_ClAJvTu=h(8aAr)Y2`q+lDfZ(Xjd>;rpADCOBygzBl->FERw z=*=!oj__h40oMaNl$pADcr*qNS)s4@J_cdJ^PZOqxy#%aW(~IO(ngEK-am`&@Awv) za?l;5Cb$_4)BD_K9!Iq$EE4yAHB;$m!aSMnarn2{-RM%<^xVQ0#Xmzg&;17Mh$+SW z+IktE(obFjv1a!lmIQ4pQLAd{Bb~4|CIR7y zq@iH{@LLVn$axQ*@$XephJJ55f|;mscOa-N|?_Hp?OgOF5AVobd058W#;o5#R#-k(7OT0SR3i zVB}Y3)^atf%zEu6_mAQorya?y`=C}Y(}Kcv%$stECC{ug(`^h2otVseAT&h(lL}#{ zVw|DJo=I&)7%8Mau<+_IyZ)l2VpW#Ry!Mcmlk;pe+|V$?qBu4mq=BJU8KYR3Ua#+L z7*EGn+{===T+W&v~9w)csh;5KRERn^-``ln$ra+*UZ)`99EsH(Pa}N^MJ?sS22S-$7WKLys;2F zonr)y46#s_ig62K1GR=ukh`8XAE@Om=(^9xD(M^pk5VG@#OGa^@IgI*P` zeK>==&zShdV|Vaf8e=uNal5FXSGUttbruU~2 zy?=Q|Vjoe->W%PA1`tH77C_F9l{er1Xe^9SOm-z^Td7RTG<<78(s~Vs>Zi-yd_^tm64?cdpOXk>TH6u6YYjDa;Xcq_3(W8w0gV|S zub?EYk<6x$TM>oh9&A7=5*nO(^cEnv!*Sk(r+ALG3ry^_PrmV1Pyj2+l9IIBFx~%S zLzZutU02vHCKIC7x^B>8D$Y67rCMq_By^wpCxO#P%M+Vn*W(NV))|Ka;X%@_SkzQPMf~$p=V8+ zh@OCS%U000q!u&5mE~+2`0sC|*-$)0w_k#0fG*M1m6N#FT>JI)RuUDUp5N)v3-YNn zMk0?n!BuZRsick6y<+B&ho+L($ssQ-fL}u8SJh!zBFyLMd<`sk&NhK@6R?9d=tEb|M-jC=0RlLI*!a^sHP$tz)eh9Zx84IDJ?UU#Pr zlncqsmokSd8ZfheYpcBk`~J0L#8(U1xi=#|+{~^_{cv}NC^t#-No)S2`4U#JXIACM z>2I_qkqhFmf1eyE#xMWQY|Z7)#M-f zL@-eQ*6!CIoXIqnxuw?4D#}8iUuy&dddimD99jC$YI&@FC50XGt{)G@CHlhF(VQ_w zvU=`hI+c~mdeYVzR6$5766F@fEsLK&LdT43N|AXcx)hNM?=&o4^73|E*Nv5Y)o$Dd zb*Dk|zL816-*beMGAHPCe0ukb^hws83NA&I8ClT{eCB-~-Ic%ulU4PRqV1Wyr%6)^ zr5}3iZmI!v5Zm=w3IgQUVM!>{*qs}YS|4Da%k8AH9yv4?;%uk0cL0>HN z^~M37_-7%1+bK)CMw7?mde;QM7~}y&4l_+DNbwfG7a_Js6|oeKqXVu>l8-U9#OTuz z`^&?sm_K_lF&CTm#PiJ<;vZrR0E{HzK$40f$yAU)10=aElENEF8HJ=uLsAzYL3K!) zE+lvoNxO`s+eOk}AQ`|Y2nUK$35D_mwv`C diff --git a/legacy/images/drive-icon.png b/legacy/images/drive-icon.png deleted file mode 100644 index dc5a27a51ba7ff26e832191cde0380c75ca08eb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36647 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 UsC_wh90Uv}M>lM(Lukr>0WRyEUH||9 diff --git a/legacy/images/erase-icon.gif b/legacy/images/erase-icon.gif deleted file mode 100644 index 565fe35711dc61a42d26447cccc3782139043bca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8456 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�EA zk8$pJeDc>sUI&4!@`EuPNf;FdO63dTQX=n}&w0!?u<7T#+E}K`#W@@}+ z9~bX%73dO}m6Wb3AK`VO+`}bl+EViMEK5A7iT%7VE3R~ce|E8u)w(}ACJa+Rm8|Z% zts{wy89jp$ysOL2GC@N-ZH5L5U@$afypV~e6=!)E#+t%v@*+qj;*bcj15XL%zy{i6nDnt8`UC}oIDz2(cULaj(8C+S1uxvq`(;$5Gr<0U7H<~q?tx_<@WKp0P#0=AmV;nH zG-l4Ea&EM*>{7WQ0a>tXF@?T90YNew!?~y^^CGrYdf?j__&6C_Sc&nZz#4?bBhh@k zJ~d(@`r(`}C5vjji5ci4UM6OYYEvk4 z8Nk)iN?@W~P)kV`Hae`fG&_v^z|bG{illpnTxQD6I+3Jfwv54Zu~`|btxK}Ep!mkH z%ugE(*E103doT%fr0OtSQ-<#{F(}m@W}J*ULSnM^L{H)PYOohcHs#sq2A7xGZW?@- zU)C`zQGVuOd^ED*To7vld*g_~haA*AgwI){!ChouKtq?|6AOIfK@1EIiL#pE2s)ZN zaur?8#dn)lZT_;sND|&oe@36F7D&dlP+6?MKr$#CmaXhUT8LTo6Ki>>^<|9g%eubV zItxokQGb1V!(%Hb^H=hd+7eh4&4)-};@3hrsrcQgsj+lsJxgxNpF?$m8BE*!tFL8E zR(Pg1_3Tn2G;a|@XCPlA^gOf>@2IaV@v!d>H_Rc;k>#ve$&t!?FO2=6eOM?V0d}mv z*`x@iqy;PG%C)1j9X8=hpw`j5U}vzj)9WnlTDA1DG`k`uB#Hg_GgO9Ci$M`W2pi*t zf{{p%6!%aM?naI#@gC`TG3^YCV&ywncUO=F7Q#U4YG4A%P>!0HX1o${jHhR!5S}4= zjx~8Yc-T271Bb?TO9F(7McafRBU8L27}6B=Xi6(TWYzR`2Cd(P|OJ zq)O`~1|eQM>>t>u8fl#m`mB=Sd|sx_cb{AfaOCaWCYS?C>jeV47&&e*0aoR7ORE-s zl6W^U3Fd`sb;Nh4juor5rjHG=I8uu)Mln64l8KwJbjHh*+=%@CeCB1?Q(THuD`FSr zOZDcR(`Zi?O?HZ6+Gh9@y5ZB1_7l)vsfs%xRCpbZzuBPshg!boK<}NNZr7sg9V@TL z?o_GP!XJ}a?fM_|Gs7;>(G4g0qYw9ax!$lB<+X;uH_zTnC3T;{vmRwY;74_A`Vqd2 zTD4kuGz~r{8go&LwdE4OJF)uCi(W-Sr?}${Yy`hPiJ6jL5s5=~|B^{3!vn|TiB3oz zIeymFUXDHUlAh)Witj-8)Lok z5J^a7zYaWv!JZ|`>&if8H)v_{pj6EGL+Lf&hr8q@hv_3MV{iE#nrfBiVami0vbBix z{?`X>e7q?AK2eDA@q~6_y9D=pFp<7E!Ow!_n2^))#xaXT^4x&17YX(h{WIgq`r4Guf~tAvp8WtzS;W_=>IVi zcQX>loRY{BPDEX#!RPazEUkZq%V2M+3@A1$Z`Kj1I#1tN@8bq+^4W2Hj2}04I_jQHCf7% z;||w{U)Eh-q@?Qvr2WI$pjEDW*$s88{2ysZfmDJe3Fa=wbB%&ZNFtObjzzUj$JWpC zLFvsYGdG-BQfl7cxdy9(%<>i?sz~gH`N|%oclo~r93J)R6>?quyykp%Oi_rw-`eSsK8u6L=fd}#6&xMsc>w+eeqUPP|Led%;( zLpawv!5CuM2lLUkn0B@NrSRG%GmfE4{Smww$Y`zECle#-&Zw17#F0~6j=x(sngzaT zvE`joCo*8!{ljdvhD94_N(n#V8C$9OJEBO_!W!A1y3pFz;xtjkhO#Bg0 z^`i?8BOcQ?U>Qhd8a(!sO6fy*!Fiz^%41!37|okYR8D+!a+AEyARg59Nl7~nC?uQcJ&)8tuX8PHo{p?L#Oq=W5&L!Diko8>us}_!i?EUa@ z&RuaJy?Yyv4r-eDcA(DE2@Q8bb5LO(RWj3q?S< zg7Z|c_Wg8142n;|ZLGhj?NDkVgla!9tCu2l%y)ilV9tOdsh755SX3Z`khOi}_Hl5* zBp2`gE~s*W^)X&Lcy0dU(2~Wi2$oaQ4#S@<6U-k3LC1%`SXWp=X&$X{i?$EWK5f>W zi_MX$bnZ+$XkuBxTk84Yk^Gph>`9J}_J`Xx>w#cS7$$;??Y3esqv@gXthH3MaOf> zK-e)(p=ojIrK{&~>xbi>R0;hgG1}OMhHj=B(v1D}E9K5oI(P~y zq_l;vd3(WJnmxGHWh-b0IYlCD>SRqC+Slt}hdKrr7o>&Ko=d8|Y-43pDca~Qz!|N) z=@f70G*uy}GsSC+ys1+>^0u3$Ughhip~hOb%5v@8%4T56pS936vj_d#vlP`oHo)e< z$sZ?^R2lr)!^M1gB3Z;cWjY53j5J`>Hz&n>kV+OB1)av~INNkKo6mB#Rw4$N56#LK zZG-q>3C@z7Jt|_*ICo{tFo&R9}P;0f~sKnzG|&yQG(vYY`SI( z{H8v*QN@q%XE{OrytvWdeJf4WPZ-dT^n-Zg+C`@&*$OR`Ra>J8VAYDVLsJc zTo3kgvOHg9C=HP;QXw#tcNNq*N~w@t7MB{2VvlRDq%Ulvxt`HR$=A4TLpiPz(k*Wx zji0jia>SLm3!y4YEsh#FXbsZ6CN1`2N>5`=CLqPRcLBwulJ6`9)BSM9P) z3oLaNTMachxoDYwZQfPl_qKr++=>z{?Iy_{W~h6}DkIs=?SR;hp`pIjt;|xlgYscU qrkAWT@6Nj&*4!~7##v>RNW06Lg&EtFS!GwdxgS0MCW8!tX#5|~kbH{( diff --git a/legacy/images/erase-icon.png b/legacy/images/erase-icon.png deleted file mode 100644 index 649f2f3502c46eb5eed9187e5a58fb87fa3aa47c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7882 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�NXo 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 E4~$3rPXGV_ diff --git a/legacy/images/favicon.png b/legacy/images/favicon.png deleted file mode 100755 index 178681c1243f2f5af7aa918533e7380e5a1024b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4726 zcmZu#c|26#-@nXY>@#*H%Opvp5h43DjJ>hUkBM)#WC^th@de z7(MuGdlCN-tmtj^uo&R%?_JPR@)Yc0bk`<41^{Nxzl8?K%Hab$8N751G#RELJls4& z|J(`q0stHk9gK#l@5E-VtBdJUeecTrK4A>G1V{iWROea>7i}NiEL2!{ z@t1EXU7>Yj4-X7wM!Q??|Bo1k4)cH^DSL6YS z6mu$VjS2qOdAm1-V|p+V^dn>ZHf_y?wh_dmoJ8{n9KcvP^~^4|?B(rP6xMZRmU@?| zfTIolfJVk>9HK52a#^#;Mw$0Me`Mjf24WNkO;)!RV2Pf)Fc6brqzgYfQV0>m|B3n5 z0ux!N@IIw2=&h^hy=XUjz+yxAPpO##t@R}$GyiCsvo#v;WTjJ)3A{9cD4bgV8>6c8^7^E2HDee0_MJV^lYBO-W6&1c7LqQ}T#L0zR(!yVD%l05GB~zWrG`N03B}pAq^cfKU z-XsjgeX-@V^v!_3fF+@gzR&>I^4QR`ocLF5slQ+}fLuyw;!L?%=VSH0Z5#|O4i(`F zgEMKs$igHv94!JXgo_3hO?KKDp7!f31~Eb)kkaz<&Zfu9LlYCxTU%Q@2QUC_QC`^C z$k*N7Eq?WC=g-xV$bicGm_ubb`@`J$6|%!A1DY1oFnk#nq=_Z`)JeJ-wW;rx~C=*$UK}+@*7C zx~zrXuwsDHZxE|PRcE6*)rW1h9*uf7iMop0zR`E(g<{iuK5VE<*Lb(vR7Md02C z`2{2dP!M1%>e#*aM!CeX%#vQ}9`-D&s`@y3%vzY&wd&Qu2SJ3|6L5I*G`fMh#MD$x5p7$~wa-^3 zF>r)__D$Ao`A34@RmQ==YDY&$;!qvslOVN;iHXEar@^76(MpTXKke=&&EMR7boDpv z*ptG%yuBxkuMyJ7at}vYoYO{ZzLE|fz^=OAHe?%9<|cXh_)N-7W##856zioMww0>S zCU_t@8qPQV;OtnYJH1Q%139}_L`yK?@4oqIWaNgMh$;7t2k$9o**6|9CrKLr| zdxMW!UOqfB0x22c=Mlbm(avkB8YaMo_3e9ES;<;iS$VkCyp1zAryOrJv;UeVZWkFo?m^8O6#@>g#|x@N8)V;)o_Rp*LK9+7}Yk z8jQx`Fi>jr1to9m-@8lZE<ZVXJMSkkaaEp@U-vdU}_nU*PNE(R%gsqf^Zo9-HoH z?)UI_$j<84)98koAf>5`qO{l2nP-B}RI;+NYW()Tmlm(Au4-VhSbeofO56H=$NIk3 z{-5C>D;aC!en`->`iZx8f#5krCGXXsLiyA~F%t%KGC9(sEE z*?oT_Q&Z?b-O$WTg1WHvv4gvUz~SQ4I|}o%8bzN2VTktO=UCSPHfr>7xY z2IoZY3d7aS%y{F4)Z#fW8^-!?jcDi3b�_JZvLsB87qu+i&uNAFi<<;L*>$wa-rI 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 diff --git a/legacy/images/freeform-icon.gif b/legacy/images/freeform-icon.gif deleted file mode 100644 index 1b732d9ae32fb4e91394a74f720293a49fa5a642..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8287 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 diff --git a/legacy/images/freeform-icon.png b/legacy/images/freeform-icon.png deleted file mode 100644 index e9265bc23b7ee4393ce38dee479f2b63e68dd9b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6699 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 diff --git a/legacy/images/icon_download.png b/legacy/images/icon_download.png deleted file mode 100644 index a2a287f642aaeeadf62d3819a16d6a55e12afc01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=$skw`#i#v$3O_v5UEZv#YC% zp@9obuSMv>2~2MaLa!N4y`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-@<(X&zK> z3U0TU;MA)Rbc{YIVv!;mCIn19ASOK70y*%6pPC0u?M1+3t#h8?05D7Z^K@|xskoK& z=l_5E!ww8;ZH!Ed#V+%1n6Rkg{=V8A2QTsNE8^> zvHmCezoM^A29GnE>#ih4F*YzTGbm`! V-6~#faTQcLc)I$ztaD0e0svxv^9G7pZCy$N;5 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 diff --git a/legacy/images/info-icon.gif b/legacy/images/info-icon.gif deleted file mode 100644 index 1ffb8d6d90b58df7d394d5ec98cb9e6238268401..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7058 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 WFByeNZ6rAD1}sdiOiE5&x$$2)&~5Ah diff --git a/legacy/images/line-icon.gif b/legacy/images/line-icon.gif deleted file mode 100644 index 560dd8596ff02457580b5c5add8277b2c31605af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3061 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 diff --git a/legacy/images/logo-full.gif b/legacy/images/logo-full.gif deleted file mode 100644 index b25c3ffd1d0b0394de72b6aa455f31fed8370a72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9145 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

@DjW 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 I;sNLW4@=-bLjV8( diff --git a/legacy/images/sprite_download.png b/legacy/images/sprite_download.png deleted file mode 100644 index f2babd575dc1cbd6e9342cc58ca795377d35afdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16799 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 diff --git a/legacy/images/text-icon.gif b/legacy/images/text-icon.gif deleted file mode 100644 index d0f9bc83532934f28f75d7a8bb5cd50904164601..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9020 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 diff --git a/legacy/images/text-icon.png b/legacy/images/text-icon.png deleted file mode 100644 index ce64044b762e580659c1b3105913c001cd669ce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7509 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 diff --git a/legacy/images/undo-icon.gif b/legacy/images/undo-icon.gif deleted file mode 100644 index 481d3d59645d01ea9ca53b3f5b8e6916a6d8fa88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8353 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 diff --git a/legacy/index.html b/legacy/index.html deleted file mode 100755 index 60597b1..0000000 --- a/legacy/index.html +++ /dev/null @@ -1,627 +0,0 @@ - - - - - - - - - -ASCIIFlow Infinity - - - - -

- - - -
- - - - - - - - -
- -
-
Unsaved
- - - - - - - -
- - -
- -
- -
-
- -
- -
- -
- - -
-
- - - -
- -
- -
-
- -
-
Untitled ASCII Diagram
-
Edit permissions and manage files in Google Drive.
-
- -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/jquery-3.1.1.min.js b/legacy/jquery-3.1.1.min.js deleted file mode 100644 index 4c5be4c..0000000 --- a/legacy/jquery-3.1.1.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.1.1 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):C.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/[^\x20\t\r\n\f]+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R), -a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ka=/^$|\/(?:java|ecma)script/i,la={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};la.optgroup=la.option,la.tbody=la.tfoot=la.colgroup=la.caption=la.thead,la.th=la.td;function ma(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function na(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ma(l.appendChild(f),"script"),j&&na(g),c){k=0;while(f=g[k++])ka.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var qa=d.documentElement,ra=/^key/,sa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ta=/^([^.]*)(?:\.(.+)|)/;function ua(){return!0}function va(){return!1}function wa(){try{return d.activeElement}catch(a){}}function xa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)xa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=va;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(qa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,za=/\s*$/g;function Da(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Ea(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Fa(a){var b=Ba.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ga(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Aa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ia(f,b,c,d)});if(m&&(e=pa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ma(e,"script"),Ea),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ma(h),f=ma(a),d=0,e=f.length;d0&&na(g,!i&&ma(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ja(this,a,!0)},remove:function(a){return Ja(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.appendChild(a)}})},prepend:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ma(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!za.test(a)&&!la[(ja.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Ya(a,b,c,d,e){return new Ya.prototype.init(a,b,c,d,e)}r.Tween=Ya,Ya.prototype={constructor:Ya,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Ya.propHooks[this.prop];return a&&a.get?a.get(this):Ya.propHooks._default.get(this)},run:function(a){var b,c=Ya.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ya.propHooks._default.set(this),this}},Ya.prototype.init.prototype=Ya.prototype,Ya.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Ya.propHooks.scrollTop=Ya.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Ya.prototype.init,r.fx.step={};var Za,$a,_a=/^(?:toggle|show|hide)$/,ab=/queueHooks$/;function bb(){$a&&(a.requestAnimationFrame(bb),r.fx.tick())}function cb(){return a.setTimeout(function(){Za=void 0}),Za=r.now()}function db(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ba[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function eb(a,b,c){for(var d,e=(hb.tweeners[b]||[]).concat(hb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?ib:void 0)), -void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||r.find.attr;jb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=jb[g],jb[g]=e,e=null!=c(a,b,d)?g:null,jb[g]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function mb(a){var b=a.match(K)||[];return b.join(" ")}function nb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,nb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,nb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,nb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=nb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(nb(c))+" ").indexOf(b)>-1)return!0;return!1}});var ob=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ob,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:mb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ia.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,"$1"),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("

|Iua800OG$xaW6^c*?}6(XroW!(<>`$ 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 OiK-Udkc$I=t^WhTUZG(C diff --git a/legacy/images/move-icon.gif b/legacy/images/move-icon.gif deleted file mode 100644 index 92a6c9ac0f146faf317d3e869ed194ce778ec264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8020 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 abxAQ&+;e$gb>^z;BfDVEi7*J{#Qy>bGeVdE diff --git a/legacy/images/move-icon.png b/legacy/images/move-icon.png deleted file mode 100644 index 1bb64019d95bac5a580922878ebc6db7b3cd554e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7014 zcmbVRc|4SD_rHh95~bv^tMBMf@bN%j&DT1;p)ZM0i-V#2Nhd-hJc7LdQ%}-yFBxm1hqsrLmxt%6 zlWktR0f762uk*psgZ6d?1QJorgH59rNeqIx0bn;aGRTAA?-eR@+{@cH&`55+x?WDk z*V9PORmWc4KFHk5$9GRuu-E=52WLW*KSAG94r?s4JJJB!fan$KArnaq2n;cZG?Ih& zHGrPk%V;?nm?YHSNRFe_LHoTj=A>XR867osRf0N3T?V6}rlF;+tE;Obqp7Z;j#k%1 zYiO!!=o)Bg8mOzwtpCYD(t{bVNjiT7;GwDcBpWp|7vc z-a}JU6{1iLITaY{5vdv&vh&vtIIj>wuy0VPFDX!ly`#r*Qdp>w9Hc4d2*eR*=3&~yQ#r;=a1M^@nk5E#uGl>-ND+2cVkU~izKBOQS^Zhz9_8tV^K=wP^ zJ)G0xyn=nhy*w?0Nkkdgz6QSkAYaqWOyAT}!(3DAKb@Py>-qn&85&Xs%?^%#3zlC? zPz16ce}_Kw^85051wuC_7`hs}q-&o5fLN+E&eS=we`fGa(jTr-uND)|7T~rkJp6cN z^tf$X)5xao*1jQo(Q|VxJG=hsNIoZKE*YTou;{T3CfRbLrzLqpDDJN01*(rovm_z< zMavZ`wIJZRWS{-*eWE!MPF6APf$E!L=8L0AMlQLfp`K?l=iKgfu6!?j&>7;_`{KON zHURi4)-?sC3nX;MW!M)T0e$$Oj|udF^T-zHJC6PGza;t3WIh_z_ZH3PK2_1n?)_XF zb}@9TpgioaJU6g+H@@P9%UYgaLS1-MV*+o)S?q=3nwJz7ogxy;c!T>H!RsDOK2~w| z!Js_2hwSzv@YZ)PX-2k314M!cE;M_)7#^#rettY)F13zn=Nbnx&jW8y)ZOnlbXhy> zs@>9C;8_3mj}a^=3p`04a50o+IL_FN;HC&1%D)(nE<_hsyURV@uM`mrx!@MyuxYGu z*keEZRN_Ut%anf?vXR0v2hx?6w6K*w@4gxwyD78UMd1Uq#yUJJ=2cMfU&j9gn3Gs! zT%jUJ7|UhI2fd~OFvJ!nYfe z7KlB@$?&4J{wn}vpn~6aN;Z~i39R8=gVRg^~11rCb z5RZYZ`)LPbaG4w8ivaFg?g(O}zTbCLL+fg4h)FDL$GbMQ27OwMQ~P@vhi3&~HSAg? z?Xw(n_#INJx+gIV__*$O1s{Yf6>iJnv9iGnt)GD?Gj9;~PG0>a1FdLCj)$YMNjaYE z-+n^&O~|wF#bZLSZQ9)HZSd|52Uz8Pxjb1&T8N53 zLXQ2<*XRspZt5d`7Cjf_YCx_&_PgY=Ht?VrnFR%7>{F%~cYD24%h+*=J8VOt0c{m< z@xf2mo;laq><5E#JQW_PbQ? z2xyp5=Kg8lNqLo7;CQ>XYb{D5VdW`v&`;uFu3<5UWpTC0549tu{zR?c`~jlUh|!252#1cx+-1gjK}?H{CaK`4-u&Nnm(^vuW0BS z#upU99?glrb7?ve9erUa=t8p@3ZQy$*gEbJJuzwS6LdE9>-{lbmzf51cJa z*(;zpX@T@jIX*d%_naW&4oHK{#u$DN>>XZSi@H3&FO6?-Bc|cUg7M=0d3qhS4!tBn zEqyOu$!&f%ZjrPG`HMM!2v`liJO=7jseCz@cnFo{`Z9bme1xq3^g>wOtL{4m#&?|X z{Fj|kf65^*vpOJ-Ns1%4i7M!qFiekSLTN%#TG>l*khBn85{^M$ z207GSTqbo2*Tt;KI`Q+_jz?a;G2`*2A2=k25jdsQOrCHh(N0phhSwfyPE^zN+-n9{ zY)?ju1GM&5!X^~>>f@eFNeoVTYkS3`wEZ&%qi2H!-%XQCsT$=Pjk%8wx5P51;}#Ea z4&wp%9B=G$DAX0Wco0Qa`zl|y*LY1PkJ;5fc1P(mS}<$&G#0XICCh3vPFp)I|FoWs>r5};!z`ZteboElrVx}nlOq9Q$Uux->TZj03u>abcYa|9V!Wl>u-t+A9)Cv@M$)~u zqGhSn>gMDhH%I0^NI@BmRrwn9-4I7|3dtmEHz(w|az(pED(ppp7c$9NDui3AA2QF9 z-`~Q+=5+fCKH+K@F8DaKJa9F-pu98_8HECug6HNd7Rrl7y<-QH0Vw;?>(8$=U^rQV&Cse?*BJ($go%APH+?W#OT43M5Gwcpv#I;_+c0xCv#v{q7 z8c>-&Bi7zEB(|5O<@;11HhlUu7$y%u`HxAu1$HTXfONyvNa@Y4T(pYGU0KquwKs;v z_wWHp*ZocCqSxL{p9$HRdmuaL=%l17qx42d^@;QZcET$gq?*L?g|ZDW2Fo@`|2?1GJZ37Lpvh^=SZd{lg9qwz}J_nCqCC1Sl#CixRw z;a=Jj|3JKP#L(NFX)7N{zSZfUiL_+=%%X$SB z`xtb`(@Uq+mQJN{1ia3;qA9b#%z6ZcSbLs|&t~s^IbH{Ni9xAi2Jh-Xr})BNFjg^c4H zn{=+S8$VYfep9kQ$cWA^sR$VnNc-N<=C?;|*XyK=des3PZ2jTxKMXBlMIa|-R|)G8 zg!>*bz2zxz&3$h6)A(dq)4;!KuF0e#BCN^rUo5#u2b6-D+aaYGGftg0cw;HCP=ds) zjf6T)b33o=N0&$!?AD#!0H%oRu|Nh6>*5TrI6 zNn3kay8Jc0G?k#ZzIL}{+uVz*9=+EM@Np0pTxgXK!h}VaUn_tzFz>1m0&u&pD=_tW zdSu))MF^(&U@e1{{?@(rl9Wo2!!|&`FtSDdEw!g{$q!HCW?Ee;6EcZDq+F=q+fkSO zxrZOCLYtg5Dqh~O3gHiRT4U z$(C#AeakQHA%>4Em=G)|;DCY!VdyT^dn?2Yf>h8q2sa}RBOutATDkLA#>>B~0= z!G>E#ut;Ec{7#D-wNksE){ggG)q4X#0X-7ES@4H2EkSS7>D(f#s4x0sA==4>eN3Gr3H z>itA4l&`q+4Ay?ZzzOH{MD2%($@*~R@oQtRE&ln5ONFx|=$ zfYnz&Nox_=y0ToyhB{A|&w!N&Si=?Wue5hfe!lMkp*;vd%ePhBm(Gub5R7d*KDxcP zh+2ARb9g{>hyFge%`ki^*D!kDHs*G1cSwQXyz?w;b6t2XnK%?hpKL5a(yC6S&q!^C zwweR9_k376HN4%7m9aKH{Apu&(GUvy0Ya1}cgEaoPc{2K8Hm+=5UxTj`7V_jJw80d z7ydfBqY4T_*sPEAvW^GRl1XdX;+hQX6x4(2e>`$nB{S&t+ovJ%gNXFa)m+~#pkimwI&wE8*oM{{a3fcu z80T~C^9O!!Z&uAtx*&wnLD3)BVqoDwhhcT>!`_@YnzZ8^HZoWn_qNJJF6WDrwsv$f zW30F!t$q=Axfs5sjY&h5E~`oU^@7%Jz9@yV%5hgN-bAhWh~H)T{YC%^l{*h+QIwry z8J}uQU)73|AxoDZ(dE}}VtsD6Ei_!O;O~pL^qeb%+_d?}w&e~h81Z3((jGibKM^uO zGMr26dLmMU=JgW%(>IwZE$XUC`MQ@6IwNCP6TEknXEn-Nx4cd&-QSEJk{5#*$EMt^ z9`U{xaH9)~?>^U-rlN0WghX_Ykz$g5(j?gtAhkddT?1-TF%jMwJ@Q+YVul!^1Nj(+ zPhwR0wF{Np-VEbK?&gcVP2c;z%Cd1f#g>`dV`;KPZRpUt29g`ba=(%32eSMT#@`Mz zirCe?^zs#7M=tdFDjJF90GmqU2eu;{5VAidoX)Q3t@C5XJ+v_}A4=>>Lu)U2y)M7D zKg2S>!~BxKD`dGD?oeJWV55NhrAT9klzORy^<9P;OnnRRuL}Cj;qty+xiJbO^6FPs zE=unrQ1Zuy6Y;D!pZH-zKnNYrf26QqdD{=xlHV|d*v4oXyh>_9?HagGDxTLLCg7C_ z#&c9kc?1^}K&%yQ!1I`W${{Ioets3yFVH$L4m@d;Z}LH!&C&6#Lz>|kImqdry3+88 zG;oz;gCy>Tzpe8M4Mv%NqCP81S6x=D5BPFydh<%VhAM8jEDd$^1#6b&Q(qYMG7GT*$fwo9P-+@lFwElgb}VWG6=la2R_OS|-gtWD6m}0(jV~^9B^yn(DVXuL z9}I(gGCbgO!S($efrP91&%)|1je(8wTNYzJhh+!V9@ zyK~ef+VJgUY@r`05@e^yz6n2{z~_G-Sx$-&r;bH6NXltVF~fB z+S0zsfj@<8a@D3b!WgRmFHoY5a@>{6d%ajbx$?ZT*KfFOU%eyqIcG+bx9L7TdkzAo zP_5&I8u+Wp9nKCZlUh#s=?y zU_4EE?$CGD1J35!HbZfrRTyqq{w#Zp06fOYlTC$C>FvEF(c@w2(5>PF2+70NwR>1W zDGkSI#wX!ZTIL^{wPmIMuDycxwY8HOC43!+AH$`0_f|>7&uiHHH>!$VHY^BewpMb3 z2P<+V>5y2caXlOi0-6xWW1kEO~@kL$BuxQ1~Y^TL5kIs@6%4$3m%!J#;{ zx5FgL!u8B3HMsLwFJ}~a*^vK;CjXgaP?$sH69tX+%4%m|XnIr@u=5jMuq&&jRnPLm zRUC&xJWLosfq&584ols4^G)PoRJ{QnHpyKKKRG}+y^1NFA`QFHmr#D~BZ>m|HL}2K zXyEzS+I^aaPi1munK~r-%(HfvqEeE61sE}}WE*sk+D^)>&y?~CQW~tc6Y5 zE2*%g)tD9rb=_IJ*TFu(VBF|we4_v=w`pNvT~03??g@06_36p!l`^N3r>flw&}*&u z?L3fTAgXyzNvd@|YI_OmwjZ{*pW;00<{)H*U_SXi3LcnsG@3~Or&`&5W_O|0JB-Ob z_YuI`7dN1PaQ)}u^8aB>9S7tI0Kh*pAVHh(( C;y4lj diff --git a/legacy/images/redo-icon.gif b/legacy/images/redo-icon.gif deleted file mode 100644 index deb6dfda6e204aa648ee85aaf870a27a6519b69c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8372 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