diff --git a/.github/workflows/web_checks.yaml b/.github/workflows/web_checks.yaml index 2821722fc6..0381946595 100644 --- a/.github/workflows/web_checks.yaml +++ b/.github/workflows/web_checks.yaml @@ -34,16 +34,6 @@ jobs: - run: yarn - run: yarn lint:tsc - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 20 - - run: yarn - - run: yarn test - editor-test: runs-on: ubuntu-latest steps: @@ -52,4 +42,4 @@ jobs: with: node-version: 20 - run: yarn - - run: yarn editor:test + - run: yarn test diff --git a/.yarn/cache/@babel-code-frame-npm-7.24.7-315a600a58-830e62cd38.zip b/.yarn/cache/@babel-code-frame-npm-7.24.7-315a600a58-830e62cd38.zip deleted file mode 100644 index 053969ec0b..0000000000 Binary files a/.yarn/cache/@babel-code-frame-npm-7.24.7-315a600a58-830e62cd38.zip and /dev/null differ diff --git a/.yarn/cache/@babel-compat-data-npm-7.25.4-213b9c835f-b12a91d27c.zip b/.yarn/cache/@babel-compat-data-npm-7.25.4-213b9c835f-b12a91d27c.zip deleted file mode 100644 index 1dc463cf6e..0000000000 Binary files a/.yarn/cache/@babel-compat-data-npm-7.25.4-213b9c835f-b12a91d27c.zip and /dev/null differ diff --git a/.yarn/cache/@babel-core-npm-7.25.2-341930f809-9a1ef604a7.zip b/.yarn/cache/@babel-core-npm-7.25.2-341930f809-9a1ef604a7.zip deleted file mode 100644 index 57980cf23f..0000000000 Binary files a/.yarn/cache/@babel-core-npm-7.25.2-341930f809-9a1ef604a7.zip and /dev/null differ diff --git a/.yarn/cache/@babel-generator-npm-7.25.6-3bdca6c59f-b55975cd66.zip b/.yarn/cache/@babel-generator-npm-7.25.6-3bdca6c59f-b55975cd66.zip deleted file mode 100644 index 1ea1d983cd..0000000000 Binary files a/.yarn/cache/@babel-generator-npm-7.25.6-3bdca6c59f-b55975cd66.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helper-compilation-targets-npm-7.25.2-27e0232144-aed33c5496.zip b/.yarn/cache/@babel-helper-compilation-targets-npm-7.25.2-27e0232144-aed33c5496.zip deleted file mode 100644 index 5f511fa262..0000000000 Binary files a/.yarn/cache/@babel-helper-compilation-targets-npm-7.25.2-27e0232144-aed33c5496.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helper-module-imports-npm-7.24.7-f60e66adbf-8ac15d96d2.zip b/.yarn/cache/@babel-helper-module-imports-npm-7.24.7-f60e66adbf-8ac15d96d2.zip deleted file mode 100644 index 95e2043a8a..0000000000 Binary files a/.yarn/cache/@babel-helper-module-imports-npm-7.24.7-f60e66adbf-8ac15d96d2.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helper-module-transforms-npm-7.25.2-2c8d511580-282d4e3308.zip b/.yarn/cache/@babel-helper-module-transforms-npm-7.25.2-2c8d511580-282d4e3308.zip deleted file mode 100644 index 90bcbffe8c..0000000000 Binary files a/.yarn/cache/@babel-helper-module-transforms-npm-7.25.2-2c8d511580-282d4e3308.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helper-plugin-utils-npm-7.24.8-a288f101a7-73b1a83ba8.zip b/.yarn/cache/@babel-helper-plugin-utils-npm-7.24.8-a288f101a7-73b1a83ba8.zip deleted file mode 100644 index 9da160c77c..0000000000 Binary files a/.yarn/cache/@babel-helper-plugin-utils-npm-7.24.8-a288f101a7-73b1a83ba8.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helper-simple-access-npm-7.24.7-beddd00b0e-ddbf55f9de.zip b/.yarn/cache/@babel-helper-simple-access-npm-7.24.7-beddd00b0e-ddbf55f9de.zip deleted file mode 100644 index 38ea173f82..0000000000 Binary files a/.yarn/cache/@babel-helper-simple-access-npm-7.24.7-beddd00b0e-ddbf55f9de.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helper-string-parser-npm-7.24.8-133b2e71e1-39b03c5119.zip b/.yarn/cache/@babel-helper-string-parser-npm-7.24.8-133b2e71e1-39b03c5119.zip deleted file mode 100644 index c36f592ef3..0000000000 Binary files a/.yarn/cache/@babel-helper-string-parser-npm-7.24.8-133b2e71e1-39b03c5119.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-6799ab117c.zip b/.yarn/cache/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-6799ab117c.zip deleted file mode 100644 index d63dc7cf48..0000000000 Binary files a/.yarn/cache/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-6799ab117c.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helper-validator-option-npm-7.24.8-e093ef5016-a52442dfa7.zip b/.yarn/cache/@babel-helper-validator-option-npm-7.24.8-e093ef5016-a52442dfa7.zip deleted file mode 100644 index bbaa9491b6..0000000000 Binary files a/.yarn/cache/@babel-helper-validator-option-npm-7.24.8-e093ef5016-a52442dfa7.zip and /dev/null differ diff --git a/.yarn/cache/@babel-helpers-npm-7.25.6-6722375514-5a548999db.zip b/.yarn/cache/@babel-helpers-npm-7.25.6-6722375514-5a548999db.zip deleted file mode 100644 index d081ee69d2..0000000000 Binary files a/.yarn/cache/@babel-helpers-npm-7.25.6-6722375514-5a548999db.zip and /dev/null differ diff --git a/.yarn/cache/@babel-highlight-npm-7.24.7-d792bd8d9f-5cd3a89f14.zip b/.yarn/cache/@babel-highlight-npm-7.24.7-d792bd8d9f-5cd3a89f14.zip deleted file mode 100644 index 13606408fc..0000000000 Binary files a/.yarn/cache/@babel-highlight-npm-7.24.7-d792bd8d9f-5cd3a89f14.zip and /dev/null differ diff --git a/.yarn/cache/@babel-parser-npm-7.25.6-3cb198940b-85b237ded0.zip b/.yarn/cache/@babel-parser-npm-7.25.6-3cb198940b-85b237ded0.zip deleted file mode 100644 index cfd68a6efc..0000000000 Binary files a/.yarn/cache/@babel-parser-npm-7.25.6-3cb198940b-85b237ded0.zip and /dev/null differ diff --git a/.yarn/cache/@babel-plugin-syntax-bigint-npm-7.8.3-b05d971e6c-3a10849d83.zip b/.yarn/cache/@babel-plugin-syntax-bigint-npm-7.8.3-b05d971e6c-3a10849d83.zip deleted file mode 100644 index 0134ce90a9..0000000000 Binary files a/.yarn/cache/@babel-plugin-syntax-bigint-npm-7.8.3-b05d971e6c-3a10849d83.zip and /dev/null differ diff --git a/.yarn/cache/@babel-plugin-syntax-jsx-npm-7.24.7-8f9596c5ff-7a5ca629d8.zip b/.yarn/cache/@babel-plugin-syntax-jsx-npm-7.24.7-8f9596c5ff-7a5ca629d8.zip deleted file mode 100644 index 4a34139847..0000000000 Binary files a/.yarn/cache/@babel-plugin-syntax-jsx-npm-7.24.7-8f9596c5ff-7a5ca629d8.zip and /dev/null differ diff --git a/.yarn/cache/@babel-template-npm-7.25.0-2c6ddcb43a-3f2db56871.zip b/.yarn/cache/@babel-template-npm-7.25.0-2c6ddcb43a-3f2db56871.zip deleted file mode 100644 index 5f9c6abd3f..0000000000 Binary files a/.yarn/cache/@babel-template-npm-7.25.0-2c6ddcb43a-3f2db56871.zip and /dev/null differ diff --git a/.yarn/cache/@babel-traverse-npm-7.25.6-1b9e2a314c-11ee47269a.zip b/.yarn/cache/@babel-traverse-npm-7.25.6-1b9e2a314c-11ee47269a.zip deleted file mode 100644 index 43210c1d17..0000000000 Binary files a/.yarn/cache/@babel-traverse-npm-7.25.6-1b9e2a314c-11ee47269a.zip and /dev/null differ diff --git a/.yarn/cache/@babel-types-npm-7.25.6-98df73a2ca-9b2f84ff3f.zip b/.yarn/cache/@babel-types-npm-7.25.6-98df73a2ca-9b2f84ff3f.zip deleted file mode 100644 index dd2a3d09dc..0000000000 Binary files a/.yarn/cache/@babel-types-npm-7.25.6-98df73a2ca-9b2f84ff3f.zip and /dev/null differ diff --git a/.yarn/cache/@bcoe-v8-coverage-npm-0.2.3-9e27b3c57e-850f930553.zip b/.yarn/cache/@bcoe-v8-coverage-npm-0.2.3-9e27b3c57e-850f930553.zip deleted file mode 100644 index 8725d33ac5..0000000000 Binary files a/.yarn/cache/@bcoe-v8-coverage-npm-0.2.3-9e27b3c57e-850f930553.zip and /dev/null differ diff --git a/.yarn/cache/@istanbuljs-load-nyc-config-npm-1.1.0-42d17c9cb1-d578da5e2e.zip b/.yarn/cache/@istanbuljs-load-nyc-config-npm-1.1.0-42d17c9cb1-d578da5e2e.zip deleted file mode 100644 index 3e663a24f2..0000000000 Binary files a/.yarn/cache/@istanbuljs-load-nyc-config-npm-1.1.0-42d17c9cb1-d578da5e2e.zip and /dev/null differ diff --git a/.yarn/cache/@istanbuljs-schema-npm-0.1.3-466bd3eaaa-5282759d96.zip b/.yarn/cache/@istanbuljs-schema-npm-0.1.3-466bd3eaaa-5282759d96.zip deleted file mode 100644 index 5796f76016..0000000000 Binary files a/.yarn/cache/@istanbuljs-schema-npm-0.1.3-466bd3eaaa-5282759d96.zip and /dev/null differ diff --git a/.yarn/cache/@jest-console-npm-29.7.0-77689f186f-0e3624e32c.zip b/.yarn/cache/@jest-console-npm-29.7.0-77689f186f-0e3624e32c.zip deleted file mode 100644 index 29c3e01763..0000000000 Binary files a/.yarn/cache/@jest-console-npm-29.7.0-77689f186f-0e3624e32c.zip and /dev/null differ diff --git a/.yarn/cache/@jest-core-npm-29.7.0-cef60d74c4-af759c9781.zip b/.yarn/cache/@jest-core-npm-29.7.0-cef60d74c4-af759c9781.zip deleted file mode 100644 index ac1132240d..0000000000 Binary files a/.yarn/cache/@jest-core-npm-29.7.0-cef60d74c4-af759c9781.zip and /dev/null differ diff --git a/.yarn/cache/@jest-environment-npm-29.7.0-97705658d0-6fb398143b.zip b/.yarn/cache/@jest-environment-npm-29.7.0-97705658d0-6fb398143b.zip deleted file mode 100644 index 12768f5eb3..0000000000 Binary files a/.yarn/cache/@jest-environment-npm-29.7.0-97705658d0-6fb398143b.zip and /dev/null differ diff --git a/.yarn/cache/@jest-expect-npm-29.7.0-9dfe9cebaa-a01cb85fd9.zip b/.yarn/cache/@jest-expect-npm-29.7.0-9dfe9cebaa-a01cb85fd9.zip deleted file mode 100644 index 3535939279..0000000000 Binary files a/.yarn/cache/@jest-expect-npm-29.7.0-9dfe9cebaa-a01cb85fd9.zip and /dev/null differ diff --git a/.yarn/cache/@jest-expect-utils-npm-29.7.0-14740cc487-75eb177f3d.zip b/.yarn/cache/@jest-expect-utils-npm-29.7.0-14740cc487-75eb177f3d.zip deleted file mode 100644 index b104b3ed42..0000000000 Binary files a/.yarn/cache/@jest-expect-utils-npm-29.7.0-14740cc487-75eb177f3d.zip and /dev/null differ diff --git a/.yarn/cache/@jest-fake-timers-npm-29.7.0-e4174d1b56-caf2bbd11f.zip b/.yarn/cache/@jest-fake-timers-npm-29.7.0-e4174d1b56-caf2bbd11f.zip deleted file mode 100644 index 45934cde9a..0000000000 Binary files a/.yarn/cache/@jest-fake-timers-npm-29.7.0-e4174d1b56-caf2bbd11f.zip and /dev/null differ diff --git a/.yarn/cache/@jest-globals-npm-29.7.0-06f2bd411e-97dbb94591.zip b/.yarn/cache/@jest-globals-npm-29.7.0-06f2bd411e-97dbb94591.zip deleted file mode 100644 index 23f3bac689..0000000000 Binary files a/.yarn/cache/@jest-globals-npm-29.7.0-06f2bd411e-97dbb94591.zip and /dev/null differ diff --git a/.yarn/cache/@jest-reporters-npm-29.7.0-2561cd7a09-7eadabd62c.zip b/.yarn/cache/@jest-reporters-npm-29.7.0-2561cd7a09-7eadabd62c.zip deleted file mode 100644 index 6a993dd551..0000000000 Binary files a/.yarn/cache/@jest-reporters-npm-29.7.0-2561cd7a09-7eadabd62c.zip and /dev/null differ diff --git a/.yarn/cache/@jest-schemas-npm-29.6.3-292730e442-910040425f.zip b/.yarn/cache/@jest-schemas-npm-29.6.3-292730e442-910040425f.zip deleted file mode 100644 index ce56da4513..0000000000 Binary files a/.yarn/cache/@jest-schemas-npm-29.6.3-292730e442-910040425f.zip and /dev/null differ diff --git a/.yarn/cache/@jest-source-map-npm-29.6.3-8bb8289263-bcc5a8697d.zip b/.yarn/cache/@jest-source-map-npm-29.6.3-8bb8289263-bcc5a8697d.zip deleted file mode 100644 index 57b5f024fc..0000000000 Binary files a/.yarn/cache/@jest-source-map-npm-29.6.3-8bb8289263-bcc5a8697d.zip and /dev/null differ diff --git a/.yarn/cache/@jest-test-result-npm-29.7.0-4bb532101b-67b6317d52.zip b/.yarn/cache/@jest-test-result-npm-29.7.0-4bb532101b-67b6317d52.zip deleted file mode 100644 index 59da95615a..0000000000 Binary files a/.yarn/cache/@jest-test-result-npm-29.7.0-4bb532101b-67b6317d52.zip and /dev/null differ diff --git a/.yarn/cache/@jest-test-sequencer-npm-29.7.0-291f23a495-73f4359901.zip b/.yarn/cache/@jest-test-sequencer-npm-29.7.0-291f23a495-73f4359901.zip deleted file mode 100644 index d199c9ee91..0000000000 Binary files a/.yarn/cache/@jest-test-sequencer-npm-29.7.0-291f23a495-73f4359901.zip and /dev/null differ diff --git a/.yarn/cache/@jest-transform-npm-29.7.0-af20d68b57-0f8ac9f413.zip b/.yarn/cache/@jest-transform-npm-29.7.0-af20d68b57-0f8ac9f413.zip deleted file mode 100644 index 29db8e9646..0000000000 Binary files a/.yarn/cache/@jest-transform-npm-29.7.0-af20d68b57-0f8ac9f413.zip and /dev/null differ diff --git a/.yarn/cache/@jest-types-npm-29.6.3-a584ca999d-a0bcf15dbb.zip b/.yarn/cache/@jest-types-npm-29.6.3-a584ca999d-a0bcf15dbb.zip deleted file mode 100644 index 1075f4ac9b..0000000000 Binary files a/.yarn/cache/@jest-types-npm-29.6.3-a584ca999d-a0bcf15dbb.zip and /dev/null differ diff --git a/.yarn/cache/@sinclair-typebox-npm-0.27.8-23e206d653-00bd7362a3.zip b/.yarn/cache/@sinclair-typebox-npm-0.27.8-23e206d653-00bd7362a3.zip deleted file mode 100644 index 6576452af0..0000000000 Binary files a/.yarn/cache/@sinclair-typebox-npm-0.27.8-23e206d653-00bd7362a3.zip and /dev/null differ diff --git a/.yarn/cache/@sinonjs-commons-npm-3.0.1-bffb9f5a53-a7c3e7cc61.zip b/.yarn/cache/@sinonjs-commons-npm-3.0.1-bffb9f5a53-a7c3e7cc61.zip deleted file mode 100644 index 2b3482b1af..0000000000 Binary files a/.yarn/cache/@sinonjs-commons-npm-3.0.1-bffb9f5a53-a7c3e7cc61.zip and /dev/null differ diff --git a/.yarn/cache/@sinonjs-fake-timers-npm-10.3.0-7417f876b4-614d30cb4d.zip b/.yarn/cache/@sinonjs-fake-timers-npm-10.3.0-7417f876b4-614d30cb4d.zip deleted file mode 100644 index 0f96731a63..0000000000 Binary files a/.yarn/cache/@sinonjs-fake-timers-npm-10.3.0-7417f876b4-614d30cb4d.zip and /dev/null differ diff --git a/.yarn/cache/@tootallnate-once-npm-2.0.0-e36cf4f140-ad87447820.zip b/.yarn/cache/@tootallnate-once-npm-2.0.0-e36cf4f140-ad87447820.zip deleted file mode 100644 index d240a82ae2..0000000000 Binary files a/.yarn/cache/@tootallnate-once-npm-2.0.0-e36cf4f140-ad87447820.zip and /dev/null differ diff --git a/.yarn/cache/@types-graceful-fs-npm-4.1.9-ebd697fe83-79d746a8f0.zip b/.yarn/cache/@types-graceful-fs-npm-4.1.9-ebd697fe83-79d746a8f0.zip deleted file mode 100644 index 8af594bc6a..0000000000 Binary files a/.yarn/cache/@types-graceful-fs-npm-4.1.9-ebd697fe83-79d746a8f0.zip and /dev/null differ diff --git a/.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.6-2ea31fda9c-3feac423fd.zip b/.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.6-2ea31fda9c-3feac423fd.zip deleted file mode 100644 index c09edec14c..0000000000 Binary files a/.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.6-2ea31fda9c-3feac423fd.zip and /dev/null differ diff --git a/.yarn/cache/@types-istanbul-lib-report-npm-3.0.3-a5c0ef4b88-b91e9b60f8.zip b/.yarn/cache/@types-istanbul-lib-report-npm-3.0.3-a5c0ef4b88-b91e9b60f8.zip deleted file mode 100644 index b9934ced95..0000000000 Binary files a/.yarn/cache/@types-istanbul-lib-report-npm-3.0.3-a5c0ef4b88-b91e9b60f8.zip and /dev/null differ diff --git a/.yarn/cache/@types-istanbul-reports-npm-3.0.4-1afa69db29-93eb188357.zip b/.yarn/cache/@types-istanbul-reports-npm-3.0.4-1afa69db29-93eb188357.zip deleted file mode 100644 index 47eedca948..0000000000 Binary files a/.yarn/cache/@types-istanbul-reports-npm-3.0.4-1afa69db29-93eb188357.zip and /dev/null differ diff --git a/.yarn/cache/@types-jest-npm-29.5.14-506446c38e-18dba4623f.zip b/.yarn/cache/@types-jest-npm-29.5.14-506446c38e-18dba4623f.zip deleted file mode 100644 index be6d9766bb..0000000000 Binary files a/.yarn/cache/@types-jest-npm-29.5.14-506446c38e-18dba4623f.zip and /dev/null differ diff --git a/.yarn/cache/@types-jsdom-npm-20.0.1-5bb899e006-d55402c525.zip b/.yarn/cache/@types-jsdom-npm-20.0.1-5bb899e006-d55402c525.zip deleted file mode 100644 index 964a2fdc76..0000000000 Binary files a/.yarn/cache/@types-jsdom-npm-20.0.1-5bb899e006-d55402c525.zip and /dev/null differ diff --git a/.yarn/cache/@types-stack-utils-npm-2.0.3-48a0a03262-72576cc152.zip b/.yarn/cache/@types-stack-utils-npm-2.0.3-48a0a03262-72576cc152.zip deleted file mode 100644 index 875101af5e..0000000000 Binary files a/.yarn/cache/@types-stack-utils-npm-2.0.3-48a0a03262-72576cc152.zip and /dev/null differ diff --git a/.yarn/cache/@types-tough-cookie-npm-4.0.5-8c5e2162e1-f19409d019.zip b/.yarn/cache/@types-tough-cookie-npm-4.0.5-8c5e2162e1-f19409d019.zip deleted file mode 100644 index 483f4a101d..0000000000 Binary files a/.yarn/cache/@types-tough-cookie-npm-4.0.5-8c5e2162e1-f19409d019.zip and /dev/null differ diff --git a/.yarn/cache/@types-yargs-npm-17.0.32-38712e567a-4505bdebe8.zip b/.yarn/cache/@types-yargs-npm-17.0.32-38712e567a-4505bdebe8.zip deleted file mode 100644 index 455e10348a..0000000000 Binary files a/.yarn/cache/@types-yargs-npm-17.0.32-38712e567a-4505bdebe8.zip and /dev/null differ diff --git a/.yarn/cache/@types-yargs-parser-npm-21.0.3-1d265246a1-ef236c27f9.zip b/.yarn/cache/@types-yargs-parser-npm-21.0.3-1d265246a1-ef236c27f9.zip deleted file mode 100644 index d97b0d2075..0000000000 Binary files a/.yarn/cache/@types-yargs-parser-npm-21.0.3-1d265246a1-ef236c27f9.zip and /dev/null differ diff --git a/.yarn/cache/@vitest-expect-npm-2.1.9-4e945bd225-a234f96dd4.zip b/.yarn/cache/@vitest-expect-npm-2.1.9-4e945bd225-a234f96dd4.zip new file mode 100644 index 0000000000..33ed198451 Binary files /dev/null and b/.yarn/cache/@vitest-expect-npm-2.1.9-4e945bd225-a234f96dd4.zip differ diff --git a/.yarn/cache/@vitest-mocker-npm-2.1.9-2c6df8716a-17de391acc.zip b/.yarn/cache/@vitest-mocker-npm-2.1.9-2c6df8716a-17de391acc.zip new file mode 100644 index 0000000000..02c96d37a5 Binary files /dev/null and b/.yarn/cache/@vitest-mocker-npm-2.1.9-2c6df8716a-17de391acc.zip differ diff --git a/.yarn/cache/@vitest-pretty-format-npm-2.1.9-94ea1cc996-33f7ff0a9d.zip b/.yarn/cache/@vitest-pretty-format-npm-2.1.9-94ea1cc996-33f7ff0a9d.zip new file mode 100644 index 0000000000..e1bd2bf278 Binary files /dev/null and b/.yarn/cache/@vitest-pretty-format-npm-2.1.9-94ea1cc996-33f7ff0a9d.zip differ diff --git a/.yarn/cache/@vitest-runner-npm-2.1.9-1d50535316-d8aaadc98b.zip b/.yarn/cache/@vitest-runner-npm-2.1.9-1d50535316-d8aaadc98b.zip new file mode 100644 index 0000000000..6927ac206c Binary files /dev/null and b/.yarn/cache/@vitest-runner-npm-2.1.9-1d50535316-d8aaadc98b.zip differ diff --git a/.yarn/cache/@vitest-snapshot-npm-2.1.9-ad091136c0-fb693dea59.zip b/.yarn/cache/@vitest-snapshot-npm-2.1.9-ad091136c0-fb693dea59.zip new file mode 100644 index 0000000000..49208779a6 Binary files /dev/null and b/.yarn/cache/@vitest-snapshot-npm-2.1.9-ad091136c0-fb693dea59.zip differ diff --git a/.yarn/cache/@vitest-spy-npm-2.1.9-d16af87e46-f9279488b5.zip b/.yarn/cache/@vitest-spy-npm-2.1.9-d16af87e46-f9279488b5.zip new file mode 100644 index 0000000000..54166468d5 Binary files /dev/null and b/.yarn/cache/@vitest-spy-npm-2.1.9-d16af87e46-f9279488b5.zip differ diff --git a/.yarn/cache/@vitest-utils-npm-2.1.9-355aea689e-b24fb9c676.zip b/.yarn/cache/@vitest-utils-npm-2.1.9-355aea689e-b24fb9c676.zip new file mode 100644 index 0000000000..ec21b5b57b Binary files /dev/null and b/.yarn/cache/@vitest-utils-npm-2.1.9-355aea689e-b24fb9c676.zip differ diff --git a/.yarn/cache/abab-npm-2.0.6-2662fba7f0-6ffc1af4ff.zip b/.yarn/cache/abab-npm-2.0.6-2662fba7f0-6ffc1af4ff.zip deleted file mode 100644 index f671c303c8..0000000000 Binary files a/.yarn/cache/abab-npm-2.0.6-2662fba7f0-6ffc1af4ff.zip and /dev/null differ diff --git a/.yarn/cache/acorn-globals-npm-7.0.1-97c48c0140-2a2998a547.zip b/.yarn/cache/acorn-globals-npm-7.0.1-97c48c0140-2a2998a547.zip deleted file mode 100644 index f18c3d9ca6..0000000000 Binary files a/.yarn/cache/acorn-globals-npm-7.0.1-97c48c0140-2a2998a547.zip and /dev/null differ diff --git a/.yarn/cache/acorn-npm-8.13.0-a6d9510af8-f1541f05eb.zip b/.yarn/cache/acorn-npm-8.13.0-a6d9510af8-f1541f05eb.zip deleted file mode 100644 index ed2fae6706..0000000000 Binary files a/.yarn/cache/acorn-npm-8.13.0-a6d9510af8-f1541f05eb.zip and /dev/null differ diff --git a/.yarn/cache/acorn-walk-npm-8.3.4-a75fa85ead-4ff03f4232.zip b/.yarn/cache/acorn-walk-npm-8.3.4-a75fa85ead-4ff03f4232.zip deleted file mode 100644 index ff1cfce104..0000000000 Binary files a/.yarn/cache/acorn-walk-npm-8.3.4-a75fa85ead-4ff03f4232.zip and /dev/null differ diff --git a/.yarn/cache/agent-base-npm-6.0.2-428f325a93-f52b6872cc.zip b/.yarn/cache/agent-base-npm-6.0.2-428f325a93-f52b6872cc.zip deleted file mode 100644 index c7d271af28..0000000000 Binary files a/.yarn/cache/agent-base-npm-6.0.2-428f325a93-f52b6872cc.zip and /dev/null differ diff --git a/.yarn/cache/ansi-styles-npm-5.2.0-72fc7003e3-d7f4e97ce0.zip b/.yarn/cache/ansi-styles-npm-5.2.0-72fc7003e3-d7f4e97ce0.zip deleted file mode 100644 index 62c09039bd..0000000000 Binary files a/.yarn/cache/ansi-styles-npm-5.2.0-72fc7003e3-d7f4e97ce0.zip and /dev/null differ diff --git a/.yarn/cache/assertion-error-npm-2.0.1-8169d136f2-a0789dd882.zip b/.yarn/cache/assertion-error-npm-2.0.1-8169d136f2-a0789dd882.zip new file mode 100644 index 0000000000..0f58a55c08 Binary files /dev/null and b/.yarn/cache/assertion-error-npm-2.0.1-8169d136f2-a0789dd882.zip differ diff --git a/.yarn/cache/async-npm-3.2.6-aa4f5aa081-ee6eb8cd8a.zip b/.yarn/cache/async-npm-3.2.6-aa4f5aa081-ee6eb8cd8a.zip deleted file mode 100644 index 0413032750..0000000000 Binary files a/.yarn/cache/async-npm-3.2.6-aa4f5aa081-ee6eb8cd8a.zip and /dev/null differ diff --git a/.yarn/cache/babel-jest-npm-29.7.0-273152fbe9-ee6f8e0495.zip b/.yarn/cache/babel-jest-npm-29.7.0-273152fbe9-ee6f8e0495.zip deleted file mode 100644 index e5097b35d2..0000000000 Binary files a/.yarn/cache/babel-jest-npm-29.7.0-273152fbe9-ee6f8e0495.zip and /dev/null differ diff --git a/.yarn/cache/babel-plugin-istanbul-npm-6.1.1-df824055e4-cb4fd95738.zip b/.yarn/cache/babel-plugin-istanbul-npm-6.1.1-df824055e4-cb4fd95738.zip deleted file mode 100644 index 6577c6eb65..0000000000 Binary files a/.yarn/cache/babel-plugin-istanbul-npm-6.1.1-df824055e4-cb4fd95738.zip and /dev/null differ diff --git a/.yarn/cache/babel-plugin-jest-hoist-npm-29.6.3-46120a3297-51250f2281.zip b/.yarn/cache/babel-plugin-jest-hoist-npm-29.6.3-46120a3297-51250f2281.zip deleted file mode 100644 index 605fd52c29..0000000000 Binary files a/.yarn/cache/babel-plugin-jest-hoist-npm-29.6.3-46120a3297-51250f2281.zip and /dev/null differ diff --git a/.yarn/cache/babel-preset-current-node-syntax-npm-1.0.1-849ec71e32-d118c27424.zip b/.yarn/cache/babel-preset-current-node-syntax-npm-1.0.1-849ec71e32-d118c27424.zip deleted file mode 100644 index bdd25ae094..0000000000 Binary files a/.yarn/cache/babel-preset-current-node-syntax-npm-1.0.1-849ec71e32-d118c27424.zip and /dev/null differ diff --git a/.yarn/cache/babel-preset-jest-npm-29.6.3-44bf6eeda9-aa4ff2a8a7.zip b/.yarn/cache/babel-preset-jest-npm-29.6.3-44bf6eeda9-aa4ff2a8a7.zip deleted file mode 100644 index 9f46181e59..0000000000 Binary files a/.yarn/cache/babel-preset-jest-npm-29.6.3-44bf6eeda9-aa4ff2a8a7.zip and /dev/null differ diff --git a/.yarn/cache/browserslist-npm-4.23.3-4e727c7b5b-7906064f99.zip b/.yarn/cache/browserslist-npm-4.23.3-4e727c7b5b-7906064f99.zip deleted file mode 100644 index 7d73b7a9b6..0000000000 Binary files a/.yarn/cache/browserslist-npm-4.23.3-4e727c7b5b-7906064f99.zip and /dev/null differ diff --git a/.yarn/cache/bs-logger-npm-0.2.6-7670f88b66-d34bdaf68c.zip b/.yarn/cache/bs-logger-npm-0.2.6-7670f88b66-d34bdaf68c.zip deleted file mode 100644 index c741a6bf2e..0000000000 Binary files a/.yarn/cache/bs-logger-npm-0.2.6-7670f88b66-d34bdaf68c.zip and /dev/null differ diff --git a/.yarn/cache/buffer-from-npm-1.1.2-03d2f20d7e-0448524a56.zip b/.yarn/cache/buffer-from-npm-1.1.2-03d2f20d7e-0448524a56.zip deleted file mode 100644 index efe1b76380..0000000000 Binary files a/.yarn/cache/buffer-from-npm-1.1.2-03d2f20d7e-0448524a56.zip and /dev/null differ diff --git a/.yarn/cache/cac-npm-6.7.14-c46284e425-45a2496a94.zip b/.yarn/cache/cac-npm-6.7.14-c46284e425-45a2496a94.zip new file mode 100644 index 0000000000..2ec9f9fb1d Binary files /dev/null and b/.yarn/cache/cac-npm-6.7.14-c46284e425-45a2496a94.zip differ diff --git a/.yarn/cache/chai-npm-5.1.2-6b92587dbf-f2341967ab.zip b/.yarn/cache/chai-npm-5.1.2-6b92587dbf-f2341967ab.zip new file mode 100644 index 0000000000..248af8ce94 Binary files /dev/null and b/.yarn/cache/chai-npm-5.1.2-6b92587dbf-f2341967ab.zip differ diff --git a/.yarn/cache/char-regex-npm-1.0.2-ecade5f97f-b563e4b603.zip b/.yarn/cache/char-regex-npm-1.0.2-ecade5f97f-b563e4b603.zip deleted file mode 100644 index 208bdb8f98..0000000000 Binary files a/.yarn/cache/char-regex-npm-1.0.2-ecade5f97f-b563e4b603.zip and /dev/null differ diff --git a/.yarn/cache/check-error-npm-2.1.1-34e4ef357e-d785ed17b1.zip b/.yarn/cache/check-error-npm-2.1.1-34e4ef357e-d785ed17b1.zip new file mode 100644 index 0000000000..bd980cd283 Binary files /dev/null and b/.yarn/cache/check-error-npm-2.1.1-34e4ef357e-d785ed17b1.zip differ diff --git a/.yarn/cache/ci-info-npm-3.9.0-646784ca0e-6b19dc9b29.zip b/.yarn/cache/ci-info-npm-3.9.0-646784ca0e-6b19dc9b29.zip deleted file mode 100644 index 48c662410f..0000000000 Binary files a/.yarn/cache/ci-info-npm-3.9.0-646784ca0e-6b19dc9b29.zip and /dev/null differ diff --git a/.yarn/cache/cjs-module-lexer-npm-1.2.3-9d788a3c14-5ea3cb867a.zip b/.yarn/cache/cjs-module-lexer-npm-1.2.3-9d788a3c14-5ea3cb867a.zip deleted file mode 100644 index 6492b26e46..0000000000 Binary files a/.yarn/cache/cjs-module-lexer-npm-1.2.3-9d788a3c14-5ea3cb867a.zip and /dev/null differ diff --git a/.yarn/cache/co-npm-4.6.0-03f2d1feb6-5210d92230.zip b/.yarn/cache/co-npm-4.6.0-03f2d1feb6-5210d92230.zip deleted file mode 100644 index be2bd8554d..0000000000 Binary files a/.yarn/cache/co-npm-4.6.0-03f2d1feb6-5210d92230.zip and /dev/null differ diff --git a/.yarn/cache/collect-v8-coverage-npm-1.0.2-bd20d0c572-c10f41c39a.zip b/.yarn/cache/collect-v8-coverage-npm-1.0.2-bd20d0c572-c10f41c39a.zip deleted file mode 100644 index 2d1512a369..0000000000 Binary files a/.yarn/cache/collect-v8-coverage-npm-1.0.2-bd20d0c572-c10f41c39a.zip and /dev/null differ diff --git a/.yarn/cache/create-jest-npm-29.7.0-3a6a7b993b-1427d49458.zip b/.yarn/cache/create-jest-npm-29.7.0-3a6a7b993b-1427d49458.zip deleted file mode 100644 index 393187bb44..0000000000 Binary files a/.yarn/cache/create-jest-npm-29.7.0-3a6a7b993b-1427d49458.zip and /dev/null differ diff --git a/.yarn/cache/cssom-npm-0.3.8-a9291d36ff-24beb3087c.zip b/.yarn/cache/cssom-npm-0.3.8-a9291d36ff-24beb3087c.zip deleted file mode 100644 index b204eba396..0000000000 Binary files a/.yarn/cache/cssom-npm-0.3.8-a9291d36ff-24beb3087c.zip and /dev/null differ diff --git a/.yarn/cache/cssom-npm-0.5.0-44ab2704f2-823471aa30.zip b/.yarn/cache/cssom-npm-0.5.0-44ab2704f2-823471aa30.zip deleted file mode 100644 index dc47b2e75f..0000000000 Binary files a/.yarn/cache/cssom-npm-0.5.0-44ab2704f2-823471aa30.zip and /dev/null differ diff --git a/.yarn/cache/cssstyle-npm-2.3.0-b5d112c450-5f05e6fd2e.zip b/.yarn/cache/cssstyle-npm-2.3.0-b5d112c450-5f05e6fd2e.zip deleted file mode 100644 index 814eea726a..0000000000 Binary files a/.yarn/cache/cssstyle-npm-2.3.0-b5d112c450-5f05e6fd2e.zip and /dev/null differ diff --git a/.yarn/cache/data-urls-npm-3.0.2-c8b2050319-033fc3dd0f.zip b/.yarn/cache/data-urls-npm-3.0.2-c8b2050319-033fc3dd0f.zip deleted file mode 100644 index 015df7be6a..0000000000 Binary files a/.yarn/cache/data-urls-npm-3.0.2-c8b2050319-033fc3dd0f.zip and /dev/null differ diff --git a/.yarn/cache/debug-npm-4.4.0-f6efe76023-fb42df878d.zip b/.yarn/cache/debug-npm-4.4.0-f6efe76023-fb42df878d.zip new file mode 100644 index 0000000000..9d9b13af5c Binary files /dev/null and b/.yarn/cache/debug-npm-4.4.0-f6efe76023-fb42df878d.zip differ diff --git a/.yarn/cache/dedent-npm-1.5.3-123726df15-045b595557.zip b/.yarn/cache/dedent-npm-1.5.3-123726df15-045b595557.zip deleted file mode 100644 index 05bbfa9b07..0000000000 Binary files a/.yarn/cache/dedent-npm-1.5.3-123726df15-045b595557.zip and /dev/null differ diff --git a/.yarn/cache/deep-eql-npm-5.0.2-3bce58289f-6aaaadb4c1.zip b/.yarn/cache/deep-eql-npm-5.0.2-3bce58289f-6aaaadb4c1.zip new file mode 100644 index 0000000000..afb2a30b48 Binary files /dev/null and b/.yarn/cache/deep-eql-npm-5.0.2-3bce58289f-6aaaadb4c1.zip differ diff --git a/.yarn/cache/detect-newline-npm-3.1.0-6d33fa8d37-ae6cd429c4.zip b/.yarn/cache/detect-newline-npm-3.1.0-6d33fa8d37-ae6cd429c4.zip deleted file mode 100644 index 95b9355c7e..0000000000 Binary files a/.yarn/cache/detect-newline-npm-3.1.0-6d33fa8d37-ae6cd429c4.zip and /dev/null differ diff --git a/.yarn/cache/diff-sequences-npm-29.6.3-18ab2c9949-f4914158e1.zip b/.yarn/cache/diff-sequences-npm-29.6.3-18ab2c9949-f4914158e1.zip deleted file mode 100644 index 89803db133..0000000000 Binary files a/.yarn/cache/diff-sequences-npm-29.6.3-18ab2c9949-f4914158e1.zip and /dev/null differ diff --git a/.yarn/cache/domexception-npm-4.0.0-5093673f9b-ddbc1268ed.zip b/.yarn/cache/domexception-npm-4.0.0-5093673f9b-ddbc1268ed.zip deleted file mode 100644 index 4253de44a5..0000000000 Binary files a/.yarn/cache/domexception-npm-4.0.0-5093673f9b-ddbc1268ed.zip and /dev/null differ diff --git a/.yarn/cache/ejs-npm-3.1.10-4e8cf4bdc1-ce90637e9c.zip b/.yarn/cache/ejs-npm-3.1.10-4e8cf4bdc1-ce90637e9c.zip deleted file mode 100644 index 2771e32670..0000000000 Binary files a/.yarn/cache/ejs-npm-3.1.10-4e8cf4bdc1-ce90637e9c.zip and /dev/null differ diff --git a/.yarn/cache/electron-to-chromium-npm-1.5.19-090c7e4d07-459b47ab82.zip b/.yarn/cache/electron-to-chromium-npm-1.5.19-090c7e4d07-459b47ab82.zip deleted file mode 100644 index d140a47b19..0000000000 Binary files a/.yarn/cache/electron-to-chromium-npm-1.5.19-090c7e4d07-459b47ab82.zip and /dev/null differ diff --git a/.yarn/cache/emittery-npm-0.13.1-cb6cd1bb03-2b089ab630.zip b/.yarn/cache/emittery-npm-0.13.1-cb6cd1bb03-2b089ab630.zip deleted file mode 100644 index e2a53f8723..0000000000 Binary files a/.yarn/cache/emittery-npm-0.13.1-cb6cd1bb03-2b089ab630.zip and /dev/null differ diff --git a/.yarn/cache/es-module-lexer-npm-1.6.0-20500c26f6-4413a9aed9.zip b/.yarn/cache/es-module-lexer-npm-1.6.0-20500c26f6-4413a9aed9.zip new file mode 100644 index 0000000000..caac3685d8 Binary files /dev/null and b/.yarn/cache/es-module-lexer-npm-1.6.0-20500c26f6-4413a9aed9.zip differ diff --git a/.yarn/cache/escape-string-regexp-npm-2.0.0-aef69d2a25-9f8a2d5743.zip b/.yarn/cache/escape-string-regexp-npm-2.0.0-aef69d2a25-9f8a2d5743.zip deleted file mode 100644 index 5150d4e552..0000000000 Binary files a/.yarn/cache/escape-string-regexp-npm-2.0.0-aef69d2a25-9f8a2d5743.zip and /dev/null differ diff --git a/.yarn/cache/escodegen-npm-2.1.0-e0bf940745-096696407e.zip b/.yarn/cache/escodegen-npm-2.1.0-e0bf940745-096696407e.zip deleted file mode 100644 index d28acf846b..0000000000 Binary files a/.yarn/cache/escodegen-npm-2.1.0-e0bf940745-096696407e.zip and /dev/null differ diff --git a/.yarn/cache/esprima-npm-4.0.1-1084e98778-b45bc805a6.zip b/.yarn/cache/esprima-npm-4.0.1-1084e98778-b45bc805a6.zip deleted file mode 100644 index 501ceb373b..0000000000 Binary files a/.yarn/cache/esprima-npm-4.0.1-1084e98778-b45bc805a6.zip and /dev/null differ diff --git a/.yarn/cache/estree-walker-npm-3.0.3-0372979673-a65728d572.zip b/.yarn/cache/estree-walker-npm-3.0.3-0372979673-a65728d572.zip new file mode 100644 index 0000000000..45ecddd4f9 Binary files /dev/null and b/.yarn/cache/estree-walker-npm-3.0.3-0372979673-a65728d572.zip differ diff --git a/.yarn/cache/execa-npm-5.1.1-191347acf5-fba9022c8c.zip b/.yarn/cache/execa-npm-5.1.1-191347acf5-fba9022c8c.zip deleted file mode 100644 index 2150a7b151..0000000000 Binary files a/.yarn/cache/execa-npm-5.1.1-191347acf5-fba9022c8c.zip and /dev/null differ diff --git a/.yarn/cache/exit-npm-0.1.2-ef3761a67d-abc407f07a.zip b/.yarn/cache/exit-npm-0.1.2-ef3761a67d-abc407f07a.zip deleted file mode 100644 index 87a2330e8c..0000000000 Binary files a/.yarn/cache/exit-npm-0.1.2-ef3761a67d-abc407f07a.zip and /dev/null differ diff --git a/.yarn/cache/expect-npm-29.7.0-62e9f7979e-9257f10288.zip b/.yarn/cache/expect-npm-29.7.0-62e9f7979e-9257f10288.zip deleted file mode 100644 index 4310bbcb15..0000000000 Binary files a/.yarn/cache/expect-npm-29.7.0-62e9f7979e-9257f10288.zip and /dev/null differ diff --git a/.yarn/cache/expect-type-npm-1.1.0-741d55500b-65d25ec10b.zip b/.yarn/cache/expect-type-npm-1.1.0-741d55500b-65d25ec10b.zip new file mode 100644 index 0000000000..02124a045f Binary files /dev/null and b/.yarn/cache/expect-type-npm-1.1.0-741d55500b-65d25ec10b.zip differ diff --git a/.yarn/cache/filelist-npm-1.0.4-3a835ae0a7-a303573b08.zip b/.yarn/cache/filelist-npm-1.0.4-3a835ae0a7-a303573b08.zip deleted file mode 100644 index 407ca83378..0000000000 Binary files a/.yarn/cache/filelist-npm-1.0.4-3a835ae0a7-a303573b08.zip and /dev/null differ diff --git a/.yarn/cache/get-package-type-npm-0.1.0-6c70cdc8ab-bba0811116.zip b/.yarn/cache/get-package-type-npm-0.1.0-6c70cdc8ab-bba0811116.zip deleted file mode 100644 index 3ea9023ca2..0000000000 Binary files a/.yarn/cache/get-package-type-npm-0.1.0-6c70cdc8ab-bba0811116.zip and /dev/null differ diff --git a/.yarn/cache/get-stream-npm-6.0.1-83e51a4642-e04ecece32.zip b/.yarn/cache/get-stream-npm-6.0.1-83e51a4642-e04ecece32.zip deleted file mode 100644 index ca09fa2648..0000000000 Binary files a/.yarn/cache/get-stream-npm-6.0.1-83e51a4642-e04ecece32.zip and /dev/null differ diff --git a/.yarn/cache/html-encoding-sniffer-npm-3.0.0-daac3dfe41-8d806aa004.zip b/.yarn/cache/html-encoding-sniffer-npm-3.0.0-daac3dfe41-8d806aa004.zip deleted file mode 100644 index 1fbdcc51de..0000000000 Binary files a/.yarn/cache/html-encoding-sniffer-npm-3.0.0-daac3dfe41-8d806aa004.zip and /dev/null differ diff --git a/.yarn/cache/http-proxy-agent-npm-5.0.0-7f1f121b83-e2ee1ff165.zip b/.yarn/cache/http-proxy-agent-npm-5.0.0-7f1f121b83-e2ee1ff165.zip deleted file mode 100644 index a999ab7d5a..0000000000 Binary files a/.yarn/cache/http-proxy-agent-npm-5.0.0-7f1f121b83-e2ee1ff165.zip and /dev/null differ diff --git a/.yarn/cache/https-proxy-agent-npm-5.0.1-42d65f358e-571fccdf38.zip b/.yarn/cache/https-proxy-agent-npm-5.0.1-42d65f358e-571fccdf38.zip deleted file mode 100644 index b8bc9949c6..0000000000 Binary files a/.yarn/cache/https-proxy-agent-npm-5.0.1-42d65f358e-571fccdf38.zip and /dev/null differ diff --git a/.yarn/cache/human-signals-npm-2.1.0-f75815481d-b87fd89fce.zip b/.yarn/cache/human-signals-npm-2.1.0-f75815481d-b87fd89fce.zip deleted file mode 100644 index 6346a18da2..0000000000 Binary files a/.yarn/cache/human-signals-npm-2.1.0-f75815481d-b87fd89fce.zip and /dev/null differ diff --git a/.yarn/cache/import-local-npm-3.1.0-8960af5e51-bfcdb63b5e.zip b/.yarn/cache/import-local-npm-3.1.0-8960af5e51-bfcdb63b5e.zip deleted file mode 100644 index e0411456b7..0000000000 Binary files a/.yarn/cache/import-local-npm-3.1.0-8960af5e51-bfcdb63b5e.zip and /dev/null differ diff --git a/.yarn/cache/is-generator-fn-npm-2.1.0-37895c2d2b-a6ad5492cf.zip b/.yarn/cache/is-generator-fn-npm-2.1.0-37895c2d2b-a6ad5492cf.zip deleted file mode 100644 index c9e8074298..0000000000 Binary files a/.yarn/cache/is-generator-fn-npm-2.1.0-37895c2d2b-a6ad5492cf.zip and /dev/null differ diff --git a/.yarn/cache/is-stream-npm-2.0.1-c802db55e7-b8e05ccdf9.zip b/.yarn/cache/is-stream-npm-2.0.1-c802db55e7-b8e05ccdf9.zip deleted file mode 100644 index c5699a4eeb..0000000000 Binary files a/.yarn/cache/is-stream-npm-2.0.1-c802db55e7-b8e05ccdf9.zip and /dev/null differ diff --git a/.yarn/cache/istanbul-lib-coverage-npm-3.2.2-5c0526e059-2367407a8d.zip b/.yarn/cache/istanbul-lib-coverage-npm-3.2.2-5c0526e059-2367407a8d.zip deleted file mode 100644 index e1256eff8f..0000000000 Binary files a/.yarn/cache/istanbul-lib-coverage-npm-3.2.2-5c0526e059-2367407a8d.zip and /dev/null differ diff --git a/.yarn/cache/istanbul-lib-instrument-npm-5.2.1-1b3ad719a9-bf16f1803b.zip b/.yarn/cache/istanbul-lib-instrument-npm-5.2.1-1b3ad719a9-bf16f1803b.zip deleted file mode 100644 index b630935eba..0000000000 Binary files a/.yarn/cache/istanbul-lib-instrument-npm-5.2.1-1b3ad719a9-bf16f1803b.zip and /dev/null differ diff --git a/.yarn/cache/istanbul-lib-instrument-npm-6.0.3-959dca7404-74104c60c6.zip b/.yarn/cache/istanbul-lib-instrument-npm-6.0.3-959dca7404-74104c60c6.zip deleted file mode 100644 index 7bbd375b7f..0000000000 Binary files a/.yarn/cache/istanbul-lib-instrument-npm-6.0.3-959dca7404-74104c60c6.zip and /dev/null differ diff --git a/.yarn/cache/istanbul-lib-report-npm-3.0.1-b17446ab24-fd17a1b879.zip b/.yarn/cache/istanbul-lib-report-npm-3.0.1-b17446ab24-fd17a1b879.zip deleted file mode 100644 index b946848afd..0000000000 Binary files a/.yarn/cache/istanbul-lib-report-npm-3.0.1-b17446ab24-fd17a1b879.zip and /dev/null differ diff --git a/.yarn/cache/istanbul-lib-source-maps-npm-4.0.1-af0f859df7-21ad3df45d.zip b/.yarn/cache/istanbul-lib-source-maps-npm-4.0.1-af0f859df7-21ad3df45d.zip deleted file mode 100644 index 344cd7cdbb..0000000000 Binary files a/.yarn/cache/istanbul-lib-source-maps-npm-4.0.1-af0f859df7-21ad3df45d.zip and /dev/null differ diff --git a/.yarn/cache/istanbul-reports-npm-3.1.6-66918eb97f-44c4c0582f.zip b/.yarn/cache/istanbul-reports-npm-3.1.6-66918eb97f-44c4c0582f.zip deleted file mode 100644 index 4a337c3397..0000000000 Binary files a/.yarn/cache/istanbul-reports-npm-3.1.6-66918eb97f-44c4c0582f.zip and /dev/null differ diff --git a/.yarn/cache/jake-npm-10.9.2-3bf2173aed-f2dc4a086b.zip b/.yarn/cache/jake-npm-10.9.2-3bf2173aed-f2dc4a086b.zip deleted file mode 100644 index 853f800e46..0000000000 Binary files a/.yarn/cache/jake-npm-10.9.2-3bf2173aed-f2dc4a086b.zip and /dev/null differ diff --git a/.yarn/cache/jest-changed-files-npm-29.7.0-c2dcd10525-963e203893.zip b/.yarn/cache/jest-changed-files-npm-29.7.0-c2dcd10525-963e203893.zip deleted file mode 100644 index c0f4fb39a4..0000000000 Binary files a/.yarn/cache/jest-changed-files-npm-29.7.0-c2dcd10525-963e203893.zip and /dev/null differ diff --git a/.yarn/cache/jest-circus-npm-29.7.0-f7679858c6-3494371489.zip b/.yarn/cache/jest-circus-npm-29.7.0-f7679858c6-3494371489.zip deleted file mode 100644 index 1deda1c48e..0000000000 Binary files a/.yarn/cache/jest-circus-npm-29.7.0-f7679858c6-3494371489.zip and /dev/null differ diff --git a/.yarn/cache/jest-cli-npm-29.7.0-9adb356180-664901277a.zip b/.yarn/cache/jest-cli-npm-29.7.0-9adb356180-664901277a.zip deleted file mode 100644 index 3d5ca8101c..0000000000 Binary files a/.yarn/cache/jest-cli-npm-29.7.0-9adb356180-664901277a.zip and /dev/null differ diff --git a/.yarn/cache/jest-config-npm-29.7.0-97d8544d74-4cabf8f894.zip b/.yarn/cache/jest-config-npm-29.7.0-97d8544d74-4cabf8f894.zip deleted file mode 100644 index aa8d730c08..0000000000 Binary files a/.yarn/cache/jest-config-npm-29.7.0-97d8544d74-4cabf8f894.zip and /dev/null differ diff --git a/.yarn/cache/jest-diff-npm-29.7.0-0149e01930-08e24a9dd4.zip b/.yarn/cache/jest-diff-npm-29.7.0-0149e01930-08e24a9dd4.zip deleted file mode 100644 index 13e779c9ac..0000000000 Binary files a/.yarn/cache/jest-diff-npm-29.7.0-0149e01930-08e24a9dd4.zip and /dev/null differ diff --git a/.yarn/cache/jest-docblock-npm-29.7.0-ec59f449dd-66390c3e94.zip b/.yarn/cache/jest-docblock-npm-29.7.0-ec59f449dd-66390c3e94.zip deleted file mode 100644 index c0da780a39..0000000000 Binary files a/.yarn/cache/jest-docblock-npm-29.7.0-ec59f449dd-66390c3e94.zip and /dev/null differ diff --git a/.yarn/cache/jest-each-npm-29.7.0-93476f5ba0-e88f99f018.zip b/.yarn/cache/jest-each-npm-29.7.0-93476f5ba0-e88f99f018.zip deleted file mode 100644 index 3b4d9d93bd..0000000000 Binary files a/.yarn/cache/jest-each-npm-29.7.0-93476f5ba0-e88f99f018.zip and /dev/null differ diff --git a/.yarn/cache/jest-environment-jsdom-npm-29.7.0-0b72dd0e0b-559aac134c.zip b/.yarn/cache/jest-environment-jsdom-npm-29.7.0-0b72dd0e0b-559aac134c.zip deleted file mode 100644 index 5fc7f5b3c1..0000000000 Binary files a/.yarn/cache/jest-environment-jsdom-npm-29.7.0-0b72dd0e0b-559aac134c.zip and /dev/null differ diff --git a/.yarn/cache/jest-environment-node-npm-29.7.0-860b5e25ec-501a996629.zip b/.yarn/cache/jest-environment-node-npm-29.7.0-860b5e25ec-501a996629.zip deleted file mode 100644 index 622f32bd79..0000000000 Binary files a/.yarn/cache/jest-environment-node-npm-29.7.0-860b5e25ec-501a996629.zip and /dev/null differ diff --git a/.yarn/cache/jest-get-type-npm-29.6.3-500477292e-88ac9102d4.zip b/.yarn/cache/jest-get-type-npm-29.6.3-500477292e-88ac9102d4.zip deleted file mode 100644 index 8afbbd1b39..0000000000 Binary files a/.yarn/cache/jest-get-type-npm-29.6.3-500477292e-88ac9102d4.zip and /dev/null differ diff --git a/.yarn/cache/jest-haste-map-npm-29.7.0-e3be419eff-c2c8f2d3e7.zip b/.yarn/cache/jest-haste-map-npm-29.7.0-e3be419eff-c2c8f2d3e7.zip deleted file mode 100644 index f136b52bd0..0000000000 Binary files a/.yarn/cache/jest-haste-map-npm-29.7.0-e3be419eff-c2c8f2d3e7.zip and /dev/null differ diff --git a/.yarn/cache/jest-leak-detector-npm-29.7.0-915d82553f-e3950e3ddd.zip b/.yarn/cache/jest-leak-detector-npm-29.7.0-915d82553f-e3950e3ddd.zip deleted file mode 100644 index db3bcee1f4..0000000000 Binary files a/.yarn/cache/jest-leak-detector-npm-29.7.0-915d82553f-e3950e3ddd.zip and /dev/null differ diff --git a/.yarn/cache/jest-matcher-utils-npm-29.7.0-dfc74b630e-d7259e5f99.zip b/.yarn/cache/jest-matcher-utils-npm-29.7.0-dfc74b630e-d7259e5f99.zip deleted file mode 100644 index 25c776cf0a..0000000000 Binary files a/.yarn/cache/jest-matcher-utils-npm-29.7.0-dfc74b630e-d7259e5f99.zip and /dev/null differ diff --git a/.yarn/cache/jest-message-util-npm-29.7.0-7f88b6e8d1-a9d025b1c6.zip b/.yarn/cache/jest-message-util-npm-29.7.0-7f88b6e8d1-a9d025b1c6.zip deleted file mode 100644 index acdc44e095..0000000000 Binary files a/.yarn/cache/jest-message-util-npm-29.7.0-7f88b6e8d1-a9d025b1c6.zip and /dev/null differ diff --git a/.yarn/cache/jest-mock-npm-29.7.0-22c4769d06-81ba9b6868.zip b/.yarn/cache/jest-mock-npm-29.7.0-22c4769d06-81ba9b6868.zip deleted file mode 100644 index b7e8baa47f..0000000000 Binary files a/.yarn/cache/jest-mock-npm-29.7.0-22c4769d06-81ba9b6868.zip and /dev/null differ diff --git a/.yarn/cache/jest-npm-29.7.0-d8dd095b81-17ca8d6750.zip b/.yarn/cache/jest-npm-29.7.0-d8dd095b81-17ca8d6750.zip deleted file mode 100644 index bd3db0ca2f..0000000000 Binary files a/.yarn/cache/jest-npm-29.7.0-d8dd095b81-17ca8d6750.zip and /dev/null differ diff --git a/.yarn/cache/jest-pnp-resolver-npm-1.2.3-70e06bf27c-db1a8ab2cb.zip b/.yarn/cache/jest-pnp-resolver-npm-1.2.3-70e06bf27c-db1a8ab2cb.zip deleted file mode 100644 index b4c4e50926..0000000000 Binary files a/.yarn/cache/jest-pnp-resolver-npm-1.2.3-70e06bf27c-db1a8ab2cb.zip and /dev/null differ diff --git a/.yarn/cache/jest-regex-util-npm-29.6.3-568e0094e2-0518beeb9b.zip b/.yarn/cache/jest-regex-util-npm-29.6.3-568e0094e2-0518beeb9b.zip deleted file mode 100644 index ddf6af34ec..0000000000 Binary files a/.yarn/cache/jest-regex-util-npm-29.6.3-568e0094e2-0518beeb9b.zip and /dev/null differ diff --git a/.yarn/cache/jest-resolve-dependencies-npm-29.7.0-06ec582f1e-aeb75d8150.zip b/.yarn/cache/jest-resolve-dependencies-npm-29.7.0-06ec582f1e-aeb75d8150.zip deleted file mode 100644 index 00e4a3115f..0000000000 Binary files a/.yarn/cache/jest-resolve-dependencies-npm-29.7.0-06ec582f1e-aeb75d8150.zip and /dev/null differ diff --git a/.yarn/cache/jest-resolve-npm-29.7.0-5c36f0eefb-0ca218e107.zip b/.yarn/cache/jest-resolve-npm-29.7.0-5c36f0eefb-0ca218e107.zip deleted file mode 100644 index a72822fb07..0000000000 Binary files a/.yarn/cache/jest-resolve-npm-29.7.0-5c36f0eefb-0ca218e107.zip and /dev/null differ diff --git a/.yarn/cache/jest-runner-npm-29.7.0-3bc9f82b58-f0405778ea.zip b/.yarn/cache/jest-runner-npm-29.7.0-3bc9f82b58-f0405778ea.zip deleted file mode 100644 index 50ad486f69..0000000000 Binary files a/.yarn/cache/jest-runner-npm-29.7.0-3bc9f82b58-f0405778ea.zip and /dev/null differ diff --git a/.yarn/cache/jest-runtime-npm-29.7.0-120fa64128-d19f113d01.zip b/.yarn/cache/jest-runtime-npm-29.7.0-120fa64128-d19f113d01.zip deleted file mode 100644 index 4b50dc6a80..0000000000 Binary files a/.yarn/cache/jest-runtime-npm-29.7.0-120fa64128-d19f113d01.zip and /dev/null differ diff --git a/.yarn/cache/jest-snapshot-npm-29.7.0-15ef0a4ad6-86821c3ad0.zip b/.yarn/cache/jest-snapshot-npm-29.7.0-15ef0a4ad6-86821c3ad0.zip deleted file mode 100644 index 2cf5f39821..0000000000 Binary files a/.yarn/cache/jest-snapshot-npm-29.7.0-15ef0a4ad6-86821c3ad0.zip and /dev/null differ diff --git a/.yarn/cache/jest-util-npm-29.7.0-ff1d59714b-042ab4980f.zip b/.yarn/cache/jest-util-npm-29.7.0-ff1d59714b-042ab4980f.zip deleted file mode 100644 index 4ed8c18ce9..0000000000 Binary files a/.yarn/cache/jest-util-npm-29.7.0-ff1d59714b-042ab4980f.zip and /dev/null differ diff --git a/.yarn/cache/jest-validate-npm-29.7.0-795ac5ede8-191fcdc980.zip b/.yarn/cache/jest-validate-npm-29.7.0-795ac5ede8-191fcdc980.zip deleted file mode 100644 index b72af69cf6..0000000000 Binary files a/.yarn/cache/jest-validate-npm-29.7.0-795ac5ede8-191fcdc980.zip and /dev/null differ diff --git a/.yarn/cache/jest-watcher-npm-29.7.0-e5372f1629-67e6e7fe69.zip b/.yarn/cache/jest-watcher-npm-29.7.0-e5372f1629-67e6e7fe69.zip deleted file mode 100644 index 0aadb1792b..0000000000 Binary files a/.yarn/cache/jest-watcher-npm-29.7.0-e5372f1629-67e6e7fe69.zip and /dev/null differ diff --git a/.yarn/cache/jest-worker-npm-29.7.0-4d3567fed6-30fff60af4.zip b/.yarn/cache/jest-worker-npm-29.7.0-4d3567fed6-30fff60af4.zip deleted file mode 100644 index dbd140762b..0000000000 Binary files a/.yarn/cache/jest-worker-npm-29.7.0-4d3567fed6-30fff60af4.zip and /dev/null differ diff --git a/.yarn/cache/js-yaml-npm-3.14.1-b968c6095e-bef146085f.zip b/.yarn/cache/js-yaml-npm-3.14.1-b968c6095e-bef146085f.zip deleted file mode 100644 index 31ddcc7f72..0000000000 Binary files a/.yarn/cache/js-yaml-npm-3.14.1-b968c6095e-bef146085f.zip and /dev/null differ diff --git a/.yarn/cache/jsdom-npm-20.0.3-906a2f7005-6e2ae21db3.zip b/.yarn/cache/jsdom-npm-20.0.3-906a2f7005-6e2ae21db3.zip deleted file mode 100644 index af675bfee0..0000000000 Binary files a/.yarn/cache/jsdom-npm-20.0.3-906a2f7005-6e2ae21db3.zip and /dev/null differ diff --git a/.yarn/cache/kleur-npm-3.0.3-f6f53649a4-df82cd1e17.zip b/.yarn/cache/kleur-npm-3.0.3-f6f53649a4-df82cd1e17.zip deleted file mode 100644 index 7d710afab9..0000000000 Binary files a/.yarn/cache/kleur-npm-3.0.3-f6f53649a4-df82cd1e17.zip and /dev/null differ diff --git a/.yarn/cache/leven-npm-3.1.0-b7697736a3-638401d534.zip b/.yarn/cache/leven-npm-3.1.0-b7697736a3-638401d534.zip deleted file mode 100644 index 227800ee09..0000000000 Binary files a/.yarn/cache/leven-npm-3.1.0-b7697736a3-638401d534.zip and /dev/null differ diff --git a/.yarn/cache/lodash.memoize-npm-4.1.2-0e6250041f-9ff3942fee.zip b/.yarn/cache/lodash.memoize-npm-4.1.2-0e6250041f-9ff3942fee.zip deleted file mode 100644 index e443a77a08..0000000000 Binary files a/.yarn/cache/lodash.memoize-npm-4.1.2-0e6250041f-9ff3942fee.zip and /dev/null differ diff --git a/.yarn/cache/loupe-npm-3.1.2-58c9dbcc10-4a75bbe887.zip b/.yarn/cache/loupe-npm-3.1.2-58c9dbcc10-4a75bbe887.zip new file mode 100644 index 0000000000..d6318b584a Binary files /dev/null and b/.yarn/cache/loupe-npm-3.1.2-58c9dbcc10-4a75bbe887.zip differ diff --git a/.yarn/cache/magic-string-npm-0.30.17-da1b7593b1-f4b4ed17c5.zip b/.yarn/cache/magic-string-npm-0.30.17-da1b7593b1-f4b4ed17c5.zip new file mode 100644 index 0000000000..2c0d78e2b2 Binary files /dev/null and b/.yarn/cache/magic-string-npm-0.30.17-da1b7593b1-f4b4ed17c5.zip differ diff --git a/.yarn/cache/make-dir-npm-4.0.0-ec3cd921cc-bf0731a2dd.zip b/.yarn/cache/make-dir-npm-4.0.0-ec3cd921cc-bf0731a2dd.zip deleted file mode 100644 index 2a141eff65..0000000000 Binary files a/.yarn/cache/make-dir-npm-4.0.0-ec3cd921cc-bf0731a2dd.zip and /dev/null differ diff --git a/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip b/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip deleted file mode 100644 index 7f7dc189d2..0000000000 Binary files a/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip and /dev/null differ diff --git a/.yarn/cache/makeerror-npm-1.0.12-69abf085d7-b38a025a12.zip b/.yarn/cache/makeerror-npm-1.0.12-69abf085d7-b38a025a12.zip deleted file mode 100644 index 8e32e3aa98..0000000000 Binary files a/.yarn/cache/makeerror-npm-1.0.12-69abf085d7-b38a025a12.zip and /dev/null differ diff --git a/.yarn/cache/merge-stream-npm-2.0.0-2ac83efea5-6fa4dcc8d8.zip b/.yarn/cache/merge-stream-npm-2.0.0-2ac83efea5-6fa4dcc8d8.zip deleted file mode 100644 index 1cf9d57dce..0000000000 Binary files a/.yarn/cache/merge-stream-npm-2.0.0-2ac83efea5-6fa4dcc8d8.zip and /dev/null differ diff --git a/.yarn/cache/minimatch-npm-5.1.6-1e71429f4c-7564208ef8.zip b/.yarn/cache/minimatch-npm-5.1.6-1e71429f4c-7564208ef8.zip deleted file mode 100644 index a0cbb8ee49..0000000000 Binary files a/.yarn/cache/minimatch-npm-5.1.6-1e71429f4c-7564208ef8.zip and /dev/null differ diff --git a/.yarn/cache/npm-run-path-npm-4.0.1-7aebd8bab3-5374c0cea4.zip b/.yarn/cache/npm-run-path-npm-4.0.1-7aebd8bab3-5374c0cea4.zip deleted file mode 100644 index 18ef7040d5..0000000000 Binary files a/.yarn/cache/npm-run-path-npm-4.0.1-7aebd8bab3-5374c0cea4.zip and /dev/null differ diff --git a/.yarn/cache/nwsapi-npm-2.2.13-d5ed04d8e0-d34fb78385.zip b/.yarn/cache/nwsapi-npm-2.2.13-d5ed04d8e0-d34fb78385.zip deleted file mode 100644 index a3071309dd..0000000000 Binary files a/.yarn/cache/nwsapi-npm-2.2.13-d5ed04d8e0-d34fb78385.zip and /dev/null differ diff --git a/.yarn/cache/parse5-npm-7.2.0-963394766d-78a3286521.zip b/.yarn/cache/parse5-npm-7.2.0-963394766d-78a3286521.zip deleted file mode 100644 index fdee8813f6..0000000000 Binary files a/.yarn/cache/parse5-npm-7.2.0-963394766d-78a3286521.zip and /dev/null differ diff --git a/.yarn/cache/pathval-npm-2.0.0-e9fc9a6282-682b6a6289.zip b/.yarn/cache/pathval-npm-2.0.0-e9fc9a6282-682b6a6289.zip new file mode 100644 index 0000000000..59911df295 Binary files /dev/null and b/.yarn/cache/pathval-npm-2.0.0-e9fc9a6282-682b6a6289.zip differ diff --git a/.yarn/cache/pkg-dir-npm-4.2.0-2b5d0a8d32-9863e3f351.zip b/.yarn/cache/pkg-dir-npm-4.2.0-2b5d0a8d32-9863e3f351.zip deleted file mode 100644 index 4718605f43..0000000000 Binary files a/.yarn/cache/pkg-dir-npm-4.2.0-2b5d0a8d32-9863e3f351.zip and /dev/null differ diff --git a/.yarn/cache/pretty-format-npm-29.7.0-7d330b2ea2-032c160238.zip b/.yarn/cache/pretty-format-npm-29.7.0-7d330b2ea2-032c160238.zip deleted file mode 100644 index 329581e27e..0000000000 Binary files a/.yarn/cache/pretty-format-npm-29.7.0-7d330b2ea2-032c160238.zip and /dev/null differ diff --git a/.yarn/cache/prompts-npm-2.4.2-f5d25d5eea-d8fd1fe638.zip b/.yarn/cache/prompts-npm-2.4.2-f5d25d5eea-d8fd1fe638.zip deleted file mode 100644 index ec51fd3842..0000000000 Binary files a/.yarn/cache/prompts-npm-2.4.2-f5d25d5eea-d8fd1fe638.zip and /dev/null differ diff --git a/.yarn/cache/psl-npm-1.9.0-a546edad1a-20c4277f64.zip b/.yarn/cache/psl-npm-1.9.0-a546edad1a-20c4277f64.zip deleted file mode 100644 index 0b64b509a0..0000000000 Binary files a/.yarn/cache/psl-npm-1.9.0-a546edad1a-20c4277f64.zip and /dev/null differ diff --git a/.yarn/cache/pure-rand-npm-6.1.0-497ea3fc37-8d53bc02be.zip b/.yarn/cache/pure-rand-npm-6.1.0-497ea3fc37-8d53bc02be.zip deleted file mode 100644 index a460d65776..0000000000 Binary files a/.yarn/cache/pure-rand-npm-6.1.0-497ea3fc37-8d53bc02be.zip and /dev/null differ diff --git a/.yarn/cache/querystringify-npm-2.2.0-4e77c9f606-5641ea231b.zip b/.yarn/cache/querystringify-npm-2.2.0-4e77c9f606-5641ea231b.zip deleted file mode 100644 index 492bf88efc..0000000000 Binary files a/.yarn/cache/querystringify-npm-2.2.0-4e77c9f606-5641ea231b.zip and /dev/null differ diff --git a/.yarn/cache/react-is-npm-18.2.0-0cc5edb910-e72d0ba81b.zip b/.yarn/cache/react-is-npm-18.2.0-0cc5edb910-e72d0ba81b.zip deleted file mode 100644 index 97bc63a7f3..0000000000 Binary files a/.yarn/cache/react-is-npm-18.2.0-0cc5edb910-e72d0ba81b.zip and /dev/null differ diff --git a/.yarn/cache/requires-port-npm-1.0.0-fd036b488a-eee0e303ad.zip b/.yarn/cache/requires-port-npm-1.0.0-fd036b488a-eee0e303ad.zip deleted file mode 100644 index b130302a58..0000000000 Binary files a/.yarn/cache/requires-port-npm-1.0.0-fd036b488a-eee0e303ad.zip and /dev/null differ diff --git a/.yarn/cache/resolve-cwd-npm-3.0.0-e6f4e296bf-546e081601.zip b/.yarn/cache/resolve-cwd-npm-3.0.0-e6f4e296bf-546e081601.zip deleted file mode 100644 index d629f22465..0000000000 Binary files a/.yarn/cache/resolve-cwd-npm-3.0.0-e6f4e296bf-546e081601.zip and /dev/null differ diff --git a/.yarn/cache/resolve.exports-npm-2.0.2-f59b42bbe5-1c7778ca1b.zip b/.yarn/cache/resolve.exports-npm-2.0.2-f59b42bbe5-1c7778ca1b.zip deleted file mode 100644 index 25724ce5aa..0000000000 Binary files a/.yarn/cache/resolve.exports-npm-2.0.2-f59b42bbe5-1c7778ca1b.zip and /dev/null differ diff --git a/.yarn/cache/siginfo-npm-2.0.0-9bbac931f8-8aa5a98640.zip b/.yarn/cache/siginfo-npm-2.0.0-9bbac931f8-8aa5a98640.zip new file mode 100644 index 0000000000..eee5d013ed Binary files /dev/null and b/.yarn/cache/siginfo-npm-2.0.0-9bbac931f8-8aa5a98640.zip differ diff --git a/.yarn/cache/sisteransi-npm-1.0.5-af60cc0cfa-aba6438f46.zip b/.yarn/cache/sisteransi-npm-1.0.5-af60cc0cfa-aba6438f46.zip deleted file mode 100644 index 606f0db3b7..0000000000 Binary files a/.yarn/cache/sisteransi-npm-1.0.5-af60cc0cfa-aba6438f46.zip and /dev/null differ diff --git a/.yarn/cache/source-map-support-npm-0.5.13-377dfd7321-933550047b.zip b/.yarn/cache/source-map-support-npm-0.5.13-377dfd7321-933550047b.zip deleted file mode 100644 index 4fbf1b13a0..0000000000 Binary files a/.yarn/cache/source-map-support-npm-0.5.13-377dfd7321-933550047b.zip and /dev/null differ diff --git a/.yarn/cache/stack-utils-npm-2.0.6-2be1099696-052bf4d25b.zip b/.yarn/cache/stack-utils-npm-2.0.6-2be1099696-052bf4d25b.zip deleted file mode 100644 index df68e7d2e3..0000000000 Binary files a/.yarn/cache/stack-utils-npm-2.0.6-2be1099696-052bf4d25b.zip and /dev/null differ diff --git a/.yarn/cache/stackback-npm-0.0.2-73273dc92e-2d4dc4e64e.zip b/.yarn/cache/stackback-npm-0.0.2-73273dc92e-2d4dc4e64e.zip new file mode 100644 index 0000000000..4bd2185c65 Binary files /dev/null and b/.yarn/cache/stackback-npm-0.0.2-73273dc92e-2d4dc4e64e.zip differ diff --git a/.yarn/cache/std-env-npm-3.8.0-f5ccf32ee1-ad4554485c.zip b/.yarn/cache/std-env-npm-3.8.0-f5ccf32ee1-ad4554485c.zip new file mode 100644 index 0000000000..d8765478ae Binary files /dev/null and b/.yarn/cache/std-env-npm-3.8.0-f5ccf32ee1-ad4554485c.zip differ diff --git a/.yarn/cache/string-length-npm-4.0.2-675173c7a2-ce85533ef5.zip b/.yarn/cache/string-length-npm-4.0.2-675173c7a2-ce85533ef5.zip deleted file mode 100644 index fd9f62fc86..0000000000 Binary files a/.yarn/cache/string-length-npm-4.0.2-675173c7a2-ce85533ef5.zip and /dev/null differ diff --git a/.yarn/cache/strip-bom-npm-4.0.0-97d367a64d-9dbcfbaf50.zip b/.yarn/cache/strip-bom-npm-4.0.0-97d367a64d-9dbcfbaf50.zip deleted file mode 100644 index 7f5558f2a9..0000000000 Binary files a/.yarn/cache/strip-bom-npm-4.0.0-97d367a64d-9dbcfbaf50.zip and /dev/null differ diff --git a/.yarn/cache/strip-final-newline-npm-2.0.0-340c4f7c66-69412b5e25.zip b/.yarn/cache/strip-final-newline-npm-2.0.0-340c4f7c66-69412b5e25.zip deleted file mode 100644 index 9253442347..0000000000 Binary files a/.yarn/cache/strip-final-newline-npm-2.0.0-340c4f7c66-69412b5e25.zip and /dev/null differ diff --git a/.yarn/cache/test-exclude-npm-6.0.0-3fb03d69df-3b34a3d771.zip b/.yarn/cache/test-exclude-npm-6.0.0-3fb03d69df-3b34a3d771.zip deleted file mode 100644 index 00b9c4c041..0000000000 Binary files a/.yarn/cache/test-exclude-npm-6.0.0-3fb03d69df-3b34a3d771.zip and /dev/null differ diff --git a/.yarn/cache/tinybench-npm-2.9.0-2861a048db-1ab00d7dfe.zip b/.yarn/cache/tinybench-npm-2.9.0-2861a048db-1ab00d7dfe.zip new file mode 100644 index 0000000000..ec0acdf432 Binary files /dev/null and b/.yarn/cache/tinybench-npm-2.9.0-2861a048db-1ab00d7dfe.zip differ diff --git a/.yarn/cache/tinyexec-npm-0.3.2-381b1e349c-bd49192302.zip b/.yarn/cache/tinyexec-npm-0.3.2-381b1e349c-bd49192302.zip new file mode 100644 index 0000000000..5e447d0d4a Binary files /dev/null and b/.yarn/cache/tinyexec-npm-0.3.2-381b1e349c-bd49192302.zip differ diff --git a/.yarn/cache/tinypool-npm-1.0.2-622ea851e4-752f23114d.zip b/.yarn/cache/tinypool-npm-1.0.2-622ea851e4-752f23114d.zip new file mode 100644 index 0000000000..c21fa5dd24 Binary files /dev/null and b/.yarn/cache/tinypool-npm-1.0.2-622ea851e4-752f23114d.zip differ diff --git a/.yarn/cache/tinyrainbow-npm-1.2.0-456cccee06-d1e2cb5400.zip b/.yarn/cache/tinyrainbow-npm-1.2.0-456cccee06-d1e2cb5400.zip new file mode 100644 index 0000000000..77581103c0 Binary files /dev/null and b/.yarn/cache/tinyrainbow-npm-1.2.0-456cccee06-d1e2cb5400.zip differ diff --git a/.yarn/cache/tinyspy-npm-3.0.2-4f17593a18-5db671b2ff.zip b/.yarn/cache/tinyspy-npm-3.0.2-4f17593a18-5db671b2ff.zip new file mode 100644 index 0000000000..536af239fb Binary files /dev/null and b/.yarn/cache/tinyspy-npm-3.0.2-4f17593a18-5db671b2ff.zip differ diff --git a/.yarn/cache/tmpl-npm-1.0.5-d399ba37e2-cd922d9b85.zip b/.yarn/cache/tmpl-npm-1.0.5-d399ba37e2-cd922d9b85.zip deleted file mode 100644 index f5bc8cda8c..0000000000 Binary files a/.yarn/cache/tmpl-npm-1.0.5-d399ba37e2-cd922d9b85.zip and /dev/null differ diff --git a/.yarn/cache/tough-cookie-npm-4.1.4-8293cc8bd5-5815059f01.zip b/.yarn/cache/tough-cookie-npm-4.1.4-8293cc8bd5-5815059f01.zip deleted file mode 100644 index 7f5a89f56d..0000000000 Binary files a/.yarn/cache/tough-cookie-npm-4.1.4-8293cc8bd5-5815059f01.zip and /dev/null differ diff --git a/.yarn/cache/tr46-npm-3.0.0-e1ae1ea7c9-44c3cc6767.zip b/.yarn/cache/tr46-npm-3.0.0-e1ae1ea7c9-44c3cc6767.zip deleted file mode 100644 index e272ccb852..0000000000 Binary files a/.yarn/cache/tr46-npm-3.0.0-e1ae1ea7c9-44c3cc6767.zip and /dev/null differ diff --git a/.yarn/cache/ts-jest-npm-29.2.5-3012d53ff5-d60d1e1d80.zip b/.yarn/cache/ts-jest-npm-29.2.5-3012d53ff5-d60d1e1d80.zip deleted file mode 100644 index 254dd40534..0000000000 Binary files a/.yarn/cache/ts-jest-npm-29.2.5-3012d53ff5-d60d1e1d80.zip and /dev/null differ diff --git a/.yarn/cache/type-detect-npm-4.0.8-8d8127b901-62b5628bff.zip b/.yarn/cache/type-detect-npm-4.0.8-8d8127b901-62b5628bff.zip deleted file mode 100644 index a3c01d86ab..0000000000 Binary files a/.yarn/cache/type-detect-npm-4.0.8-8d8127b901-62b5628bff.zip and /dev/null differ diff --git a/.yarn/cache/universalify-npm-0.2.0-9984e61c10-e86134cb12.zip b/.yarn/cache/universalify-npm-0.2.0-9984e61c10-e86134cb12.zip deleted file mode 100644 index 7f1d80c194..0000000000 Binary files a/.yarn/cache/universalify-npm-0.2.0-9984e61c10-e86134cb12.zip and /dev/null differ diff --git a/.yarn/cache/update-browserslist-db-npm-1.1.0-3d2cb7d955-7b74694d96.zip b/.yarn/cache/update-browserslist-db-npm-1.1.0-3d2cb7d955-7b74694d96.zip deleted file mode 100644 index 302c32377f..0000000000 Binary files a/.yarn/cache/update-browserslist-db-npm-1.1.0-3d2cb7d955-7b74694d96.zip and /dev/null differ diff --git a/.yarn/cache/url-parse-npm-1.5.10-64fa2bcd6d-fbdba6b1d8.zip b/.yarn/cache/url-parse-npm-1.5.10-64fa2bcd6d-fbdba6b1d8.zip deleted file mode 100644 index a0666e4f89..0000000000 Binary files a/.yarn/cache/url-parse-npm-1.5.10-64fa2bcd6d-fbdba6b1d8.zip and /dev/null differ diff --git a/.yarn/cache/v8-to-istanbul-npm-9.3.0-35fef658c9-ded42cd535.zip b/.yarn/cache/v8-to-istanbul-npm-9.3.0-35fef658c9-ded42cd535.zip deleted file mode 100644 index c279550d0c..0000000000 Binary files a/.yarn/cache/v8-to-istanbul-npm-9.3.0-35fef658c9-ded42cd535.zip and /dev/null differ diff --git a/.yarn/cache/vite-node-npm-2.1.9-84dcff71db-716d376498.zip b/.yarn/cache/vite-node-npm-2.1.9-84dcff71db-716d376498.zip new file mode 100644 index 0000000000..028aae9399 Binary files /dev/null and b/.yarn/cache/vite-node-npm-2.1.9-84dcff71db-716d376498.zip differ diff --git a/.yarn/cache/vitest-npm-2.1.9-da245b091d-20db77529f.zip b/.yarn/cache/vitest-npm-2.1.9-da245b091d-20db77529f.zip new file mode 100644 index 0000000000..a7b24147d7 Binary files /dev/null and b/.yarn/cache/vitest-npm-2.1.9-da245b091d-20db77529f.zip differ diff --git a/.yarn/cache/w3c-xmlserializer-npm-4.0.0-f09d0ec3fc-eba070e78d.zip b/.yarn/cache/w3c-xmlserializer-npm-4.0.0-f09d0ec3fc-eba070e78d.zip deleted file mode 100644 index ae61bb6f02..0000000000 Binary files a/.yarn/cache/w3c-xmlserializer-npm-4.0.0-f09d0ec3fc-eba070e78d.zip and /dev/null differ diff --git a/.yarn/cache/walker-npm-1.0.8-b0a05b9478-ad7a257ea1.zip b/.yarn/cache/walker-npm-1.0.8-b0a05b9478-ad7a257ea1.zip deleted file mode 100644 index 86c1668810..0000000000 Binary files a/.yarn/cache/walker-npm-1.0.8-b0a05b9478-ad7a257ea1.zip and /dev/null differ diff --git a/.yarn/cache/whatwg-encoding-npm-2.0.0-d7451f51b4-7087810c41.zip b/.yarn/cache/whatwg-encoding-npm-2.0.0-d7451f51b4-7087810c41.zip deleted file mode 100644 index 1824455106..0000000000 Binary files a/.yarn/cache/whatwg-encoding-npm-2.0.0-d7451f51b4-7087810c41.zip and /dev/null differ diff --git a/.yarn/cache/whatwg-mimetype-npm-3.0.0-5b617710c1-ce08bbb36b.zip b/.yarn/cache/whatwg-mimetype-npm-3.0.0-5b617710c1-ce08bbb36b.zip deleted file mode 100644 index aa91c250da..0000000000 Binary files a/.yarn/cache/whatwg-mimetype-npm-3.0.0-5b617710c1-ce08bbb36b.zip and /dev/null differ diff --git a/.yarn/cache/whatwg-url-npm-11.0.0-073529d93a-ed4826aaa5.zip b/.yarn/cache/whatwg-url-npm-11.0.0-073529d93a-ed4826aaa5.zip deleted file mode 100644 index 8da3cb7aae..0000000000 Binary files a/.yarn/cache/whatwg-url-npm-11.0.0-073529d93a-ed4826aaa5.zip and /dev/null differ diff --git a/.yarn/cache/why-is-node-running-npm-2.3.0-011cf61a18-58ebbf406e.zip b/.yarn/cache/why-is-node-running-npm-2.3.0-011cf61a18-58ebbf406e.zip new file mode 100644 index 0000000000..7f0b5bafbc Binary files /dev/null and b/.yarn/cache/why-is-node-running-npm-2.3.0-011cf61a18-58ebbf406e.zip differ diff --git a/.yarn/cache/write-file-atomic-npm-4.0.2-661baae4aa-5da60bd4ee.zip b/.yarn/cache/write-file-atomic-npm-4.0.2-661baae4aa-5da60bd4ee.zip deleted file mode 100644 index 127e30c69c..0000000000 Binary files a/.yarn/cache/write-file-atomic-npm-4.0.2-661baae4aa-5da60bd4ee.zip and /dev/null differ diff --git a/.yarn/cache/xml-name-validator-npm-4.0.0-0857c21729-af100b79c2.zip b/.yarn/cache/xml-name-validator-npm-4.0.0-0857c21729-af100b79c2.zip deleted file mode 100644 index abb3efef25..0000000000 Binary files a/.yarn/cache/xml-name-validator-npm-4.0.0-0857c21729-af100b79c2.zip and /dev/null differ diff --git a/README.md b/README.md index 71cac1679c..db9d880c7c 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ Creates a build of the frontend, shows summary of build artefacts and creates in yarn test ``` -Runs jest tests. +Runs editor unit tests (vitest). ``` yarn codegen diff --git a/apps/web/eslint.config.mjs b/apps/web/eslint.config.mjs index 853b5efcd7..35e41039ad 100644 --- a/apps/web/eslint.config.mjs +++ b/apps/web/eslint.config.mjs @@ -27,5 +27,19 @@ export default [ project: true, }, }, + rules: { + // Show an error for all direct imports from the Editor, + // in order to prevent coupling of the codebases. + 'no-restricted-imports': [ + 'error', + { + patterns: [ + '@editor/*', + // Make an exception for Editor package exports. + '!@editor/package', + ], + }, + ], + }, }, ] diff --git a/apps/web/jest.config.js b/apps/web/jest.config.js deleted file mode 100644 index f78737e36d..0000000000 --- a/apps/web/jest.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import nextJest from 'next/jest.js' - -const createJestConfig = nextJest({ - // Provide the path to your Next.js app to load next.config.js and .env files in your test environment - dir: './', -}) - -// Add any custom config to be passed to Jest -/** @type {import('jest').Config} */ -const config = { - // Add more setup options before each test is run - // setupFilesAfterEnv: ['/jest.setup.js'], - testEnvironment: 'jest-environment-jsdom', -} - -// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async -export default createJestConfig(config) diff --git a/apps/web/jest.setup.ts b/apps/web/jest.setup.ts deleted file mode 100644 index 8fab5598c7..0000000000 --- a/apps/web/jest.setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import dotenv from 'dotenv' - -dotenv.config({ path: './.env' }) diff --git a/apps/web/package.json b/apps/web/package.json index f0ed5fa077..77f8d6d444 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -24,8 +24,7 @@ "lint:prettier": "yarn _prettier --check", "lint:tsc": "tsc --noEmit", "show-unused-exports": "ts-unused-exports tsconfig.json --excludePathsFromReport=src/pages/ --excludePathsFromReport=src/fetcher/graphql-types/operations.ts --allowUnusedTypes", - "start": "next start", - "test": "jest" + "start": "next start" }, "resolutions": { "@serlo/katex-styles": "1.0.1" @@ -100,7 +99,6 @@ "@tailwindcss/typography": "^0.5.15", "@types/canvas-confetti": "^1.6.4", "@types/iframe-resizer": "^3.5.13", - "@types/jest": "^29.5.14", "@types/js-cookie": "^3.0.6", "@types/json-diff": "^1.0.3", "@types/katex": "^0.16.7", @@ -123,7 +121,6 @@ "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^5.0.0", "graphql-tag": "2.12.6", - "jest": "^29.7.0", "micromark": "^4.0.1", "npm-run-all": "^4.1.5", "postcss-flexbugs-fixes": "^5.0.2", diff --git a/apps/web/public/_assets/img/donations/partners.png b/apps/web/public/_assets/img/donations/partners.png new file mode 100644 index 0000000000..2d75ce9e63 Binary files /dev/null and b/apps/web/public/_assets/img/donations/partners.png differ diff --git a/apps/web/public/_assets/img/wallet/partners.png b/apps/web/public/_assets/img/wallet/partners.png new file mode 100644 index 0000000000..096b129664 Binary files /dev/null and b/apps/web/public/_assets/img/wallet/partners.png differ diff --git a/apps/web/src/components/author/revision/revision-preview-boxes.tsx b/apps/web/src/components/author/revision/revision-preview-boxes.tsx index bbcf85d55c..49337ed92a 100644 --- a/apps/web/src/components/author/revision/revision-preview-boxes.tsx +++ b/apps/web/src/components/author/revision/revision-preview-boxes.tsx @@ -1,4 +1,4 @@ -import { EditorPluginType } from '@editor/types/editor-plugin-type' +import { EditorPluginType } from '@editor/package' import { type ReactNode } from 'react' import { DisplayModes } from './display-modes' diff --git a/apps/web/src/components/author/revision/revision.tsx b/apps/web/src/components/author/revision/revision.tsx index 7f6c073f0b..c74040b986 100644 --- a/apps/web/src/components/author/revision/revision.tsx +++ b/apps/web/src/components/author/revision/revision.tsx @@ -1,4 +1,3 @@ -import { editorRenderers } from '@editor/plugin/helpers/editor-renderer' import { useState, useEffect } from 'react' import { DisplayModes } from './display-modes' @@ -12,7 +11,6 @@ import { UserTools } from '@/components/user-tools/user-tools' import { useInstanceData } from '@/contexts/instance-context' import { type RevisionData } from '@/data-types' import { removeHash } from '@/helper/remove-hash' -import { createRenderers } from '@/serlo-editor-integration/create-renderers' export interface RevisionProps { data: RevisionData @@ -26,7 +24,6 @@ export function Revision({ data }: RevisionProps) { const [displayMode, setDisplayMode] = useState( DisplayModes.This ) - editorRenderers.init(createRenderers()) // eslint-disable-next-line react-hooks/exhaustive-deps useEffect(() => { diff --git a/apps/web/src/components/author/uuid-url-input.tsx b/apps/web/src/components/author/uuid-url-input.tsx index fbba1bfa18..baa2827701 100644 --- a/apps/web/src/components/author/uuid-url-input.tsx +++ b/apps/web/src/components/author/uuid-url-input.tsx @@ -1,10 +1,10 @@ -import { useEditStrings } from '@editor/i18n/edit-strings-provider' import { gql } from 'graphql-request' import { useState } from 'react' import { FaIcon } from '../fa-icon' import { useGraphqlSwr } from '@/api/use-graphql-swr' import { useInstanceData } from '@/contexts/instance-context' +import { useLoggedInData } from '@/contexts/logged-in-data-context' import { UuidType, UuidWithRevType } from '@/data-types' import { TaxonomyTermType, @@ -38,13 +38,16 @@ export function UuidUrlInput({ const { data, error } = useSimpleUuidFetch(maybeUuid) const { strings } = useInstanceData() - const modalStrings = useEditStrings().templatePlugins.article.addModal + const loggedInData = useLoggedInData() + + if (!loggedInData) return null + const uuidToolStrings = loggedInData.strings.uuidUrlInput return (
{ if (event.target.value.length === 0) { setMaybeUuid(null) @@ -69,16 +72,16 @@ export function UuidUrlInput({ function renderFeedback() { if (maybeUuid === null) return null - if (maybeUuid === false) return modalStrings.invalidInput + if (maybeUuid === false) return uuidToolStrings.invalidInput if (error) { // eslint-disable-next-line no-console console.error(error) - return modalStrings.fetchError + return uuidToolStrings.fetchError } - if (!data) return modalStrings.loading + if (!data) return uuidToolStrings.loading const { uuid } = data - if (!uuid) return modalStrings.notFound + if (!uuid) return uuidToolStrings.notFound const { __typename: typename, id } = uuid @@ -90,18 +93,21 @@ export function UuidUrlInput({ Object.hasOwn(uuid, 'type') && uuid.type ? uuid.type : undefined if (!supportedEntityTypes.includes(typename as UuidWithRevType)) - return modalStrings.unsupportedType.replace('%type%', typename) + return uuidToolStrings.unsupportedType.replace('%type%', typename) if (taxonomyType && !supportedTaxonomyTypes.includes(taxonomyType)) - return modalStrings.unsupportedType.replace('%type%', taxonomyType ?? '') + return uuidToolStrings.unsupportedType.replace( + '%type%', + taxonomyType ?? '' + ) if (unsupportedIds && unsupportedIds.includes(id)) - return modalStrings.unsupportedId + return uuidToolStrings.unsupportedId - if (!id) return modalStrings.notFound + if (!id) return uuidToolStrings.notFound if (!typename.includes(UuidType.Exercise) && !title) - return modalStrings.notFound + return uuidToolStrings.notFound return ( <> diff --git a/apps/web/src/components/comments/comment.tsx b/apps/web/src/components/comments/comment.tsx index aef891eb0f..cc764ce34e 100644 --- a/apps/web/src/components/comments/comment.tsx +++ b/apps/web/src/components/comments/comment.tsx @@ -1,4 +1,4 @@ -import type { StaticMathProps } from '@editor/plugins/text/static-components/static-math' +import type { StaticMathProps } from '@editor/package' import dynamic from 'next/dynamic' import { useEffect, useRef, useState } from 'react' @@ -23,9 +23,7 @@ interface CommentProps { } const StaticMath = dynamic(() => - import('@editor/plugins/text/static-components/static-math').then( - (mod) => mod.StaticMath - ) + import('@editor/package').then((mod) => mod.StaticMath) ) export function Comment({ diff --git a/apps/web/src/components/content/license/exercise-license-notice.tsx b/apps/web/src/components/content/license/exercise-license-notice.tsx index f8faccd1c1..fd011f15fe 100644 --- a/apps/web/src/components/content/license/exercise-license-notice.tsx +++ b/apps/web/src/components/content/license/exercise-license-notice.tsx @@ -1,9 +1,9 @@ -import { EditorTooltip } from '@editor/editor-ui/editor-tooltip' import { faCreativeCommons } from '@fortawesome/free-brands-svg-icons' import { faSlash } from '@fortawesome/free-solid-svg-icons' import { Link } from '../link' import { FaIcon } from '@/components/fa-icon' +import { SimpleTooltip } from '@/components/simple-tooltip' import { useInstanceData } from '@/contexts/instance-context' import { getLicense } from '@/data/licenses/licenses-helpers' import { cn } from '@/helper/cn' @@ -63,16 +63,16 @@ export function ExerciseLicenseNotice({ return ( <> <> - diff --git a/apps/web/src/components/content/light-box.tsx b/apps/web/src/components/content/light-box.tsx index a5bc7f1547..e2988a997f 100644 --- a/apps/web/src/components/content/light-box.tsx +++ b/apps/web/src/components/content/light-box.tsx @@ -1,6 +1,7 @@ import * as Dialog from '@radix-ui/react-dialog' import { ReactNode } from 'react' +import { ProxyImage } from '../landing/subjects/proxy-image' import { defaultModalOverlayStyles } from '../modal-with-close-button' import { useInstanceData } from '@/contexts/instance-context' import { cn } from '@/helper/cn' @@ -20,8 +21,7 @@ export function LightBox({ label, src, alt, onClose }: LightBoxProps) { - {/* eslint-disable-next-line @next/next/no-img-element */} - {alt ) export function Entity({ data }: EntityProps) { - editorRenderers.init(createRenderers()) - const isLenabiUserJourneyCoursePage = !isProduction && data.id === 307521 const { strings } = useInstanceData() return wrapWithSchema( <> - {renderNotices()} + {renderNotices(data.content)} {renderStyledH1()} {renderUserTools({ aboveContent: true })}
- {data.content && renderContent(data.content)} + {data.content && !data.isUnrevised && renderContent(data.content)} {isLenabiUserJourneyCoursePage ? : null}
@@ -61,7 +60,14 @@ export function Entity({ data }: EntityProps) { function renderStyledH1() { if (!data.title) return null if (data.typename === UuidType.Course) - return {data.title}} /> + return ( + <> +

+ {strings.entities.course} +

+
{data.title}
+ + ) return (

@@ -139,7 +145,7 @@ export function Entity({ data }: EntityProps) { ) } - function renderNotices() { + function renderNotices(document: EntityData['content']) { if (data.trashed) return ( @@ -175,5 +181,18 @@ export function Entity({ data }: EntityProps) { ) } + + const isCourse = + document && + !Array.isArray(document) && + document.plugin === EditorPluginType.Course && + isCourseDocument(document) + if (isCourse && !document.state.pages.length) { + return ( + + {strings.content.courseNoPagesWarning} + + ) + } } } diff --git a/apps/web/src/components/equations-app/overview.tsx b/apps/web/src/components/equations-app/overview.tsx index abd5ce0a37..c61e278f50 100644 --- a/apps/web/src/components/equations-app/overview.tsx +++ b/apps/web/src/components/equations-app/overview.tsx @@ -1,4 +1,4 @@ -import type { StaticMathProps } from '@editor/plugins/text/static-components/static-math' +import type { StaticMathProps } from '@editor/package' import { faCheck, faPlay } from '@fortawesome/free-solid-svg-icons' import dynamic from 'next/dynamic' @@ -12,9 +12,7 @@ interface OverviewProps { } const StaticMath = dynamic(() => - import('@editor/plugins/text/static-components/static-math').then( - (mod) => mod.StaticMath - ) + import('@editor/package').then((mod) => mod.StaticMath) ) export function Overview({ selectLevel, solved }: OverviewProps) { diff --git a/apps/web/src/components/exams-info-box.tsx b/apps/web/src/components/exams-info-box.tsx index c0084a42fc..6ad2384708 100644 --- a/apps/web/src/components/exams-info-box.tsx +++ b/apps/web/src/components/exams-info-box.tsx @@ -1,4 +1,3 @@ -import { BoxRenderer } from '@editor/plugins/box/renderer' import { faDiscord } from '@fortawesome/free-brands-svg-icons' import { faGraduationCap } from '@fortawesome/free-solid-svg-icons' @@ -31,69 +30,69 @@ export function ExamsInfoBox({ examsFolderId }: { examsFolderId: number }) { '2xl:w-[270px]' )} > - <> -
-

- 🎓 Prüfungsbereich für{' '} - {deRegions[region].title}
+

+ 🎓 Prüfungsbereich für{' '} + {deRegions[region].title}
+
+

+
+

+ + Weitere Bundesländer{' '} + & Aufgaben: +
-

-
-

- - Weitere Bundesländer{' '} - & Aufgaben: - -
- + - - - Mathe- Prüfungen{' '} - Startseite - - -

-

- Austausch & Hilfe: -
- + + Mathe- Prüfungen{' '} + Startseite + + +

+

+ Austausch & Hilfe: +
+ + - - Prüfungen-Discord - -

-
+ /> + Prüfungen-Discord + +

{region === 'niedersachsen' ? ( // only for niedersachsen
@@ -103,7 +102,7 @@ export function ExamsInfoBox({ examsFolderId }: { examsFolderId: number }) {
) : null} - + {extraMeta ? : null} - - - - - diff --git a/packages/editor/index.html b/packages/editor/index.html index 59a761936f..948f263a53 100644 --- a/packages/editor/index.html +++ b/packages/editor/index.html @@ -44,13 +44,18 @@

🐦 ✏️ 🚀

+ Test the editor code with hot reload -

hot-reloads the editor:

- react (edit only)
- react (with preview)
- iframed react (edit only) +

React component (hot-reloads the editor)

+ editor & preview (iframed)
+ In the LTI integration the editor can be in a cross-origin iframe limiting + what it can do. Please check if your changes work here.
+
+ only editor
+ editor & preview
-

hot-reloads the component (but not the editor):

+

Web component (hot-reloads the component but not the editor)

web component (edit only)
lit (with preview)
diff --git a/packages/editor/jest.config.mjs b/packages/editor/jest.config.mjs deleted file mode 100644 index 8112028cd2..0000000000 --- a/packages/editor/jest.config.mjs +++ /dev/null @@ -1,13 +0,0 @@ -import { pathsToModuleNameMapper } from 'ts-jest' -import tsConfig from './tsconfig.json' with { type: 'json' } - -const jestConfig = { - transform: { '^.+\\.tsx?$': 'ts-jest' }, - roots: ['/__tests__'], - testEnvironment: 'jsdom', - moduleNameMapper: pathsToModuleNameMapper(tsConfig.compilerOptions.paths, { - prefix: '/', - }), -} - -export default jestConfig diff --git a/packages/editor/package.json b/packages/editor/package.json index ad2667006d..e7bc5cd2dc 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -1,6 +1,6 @@ { "name": "@serlo/editor", - "version": "0.21.3", + "version": "0.22.1", "homepage": "https://de.serlo.org/editor", "bugs": { "url": "https://github.com/serlo/frontend/issues" @@ -12,6 +12,7 @@ }, "license": "Apache-2.0", "author": "Serlo Education e.V.", + "sideEffects": false, "type": "module", "exports": { ".": { @@ -39,7 +40,7 @@ "lint:eslint": "yarn _eslint", "lint:prettier": "yarn _prettier --check", "lint:tsc": "tsc --noEmit", - "test": "jest", + "test": "vitest run", "publish:package": "npm publish", "yalc:publish": "yarn build && yalc publish --push --sig" }, @@ -95,8 +96,6 @@ "fp-ts": "^2.16.9", "io-ts": "^2.2.21", "is-hotkey": "0.2.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", "katex": "^0.16.21", "mathjs": "^13.2.2", "npm-run-all": "^4.1.5", @@ -124,13 +123,13 @@ "slate-react": "0.111.0", "tailwindcss": "^3.4.15", "ts-debounce": "^4.0.0", - "ts-jest": "^29.2.5", "ts-key-enum": "^2.0.13", "typescript": "^5.6.3", "uuid": "^11.0.3", - "vite": "^5.4.12", + "vite": "^5.4.14", "vite-plugin-dts": "4.3.0", - "vite-plugin-svgr": "^4.3.0" + "vite-plugin-svgr": "^4.3.0", + "vitest": "^2.1.9" }, "packageManager": "yarn@3.6.1", "engines": { diff --git a/packages/editor/src/___dev-demo/iframed-editor-and-preview.tsx b/packages/editor/src/___dev-demo/iframed-editor-and-preview.tsx new file mode 100644 index 0000000000..c6df482407 --- /dev/null +++ b/packages/editor/src/___dev-demo/iframed-editor-and-preview.tsx @@ -0,0 +1,27 @@ +import { createRoot } from 'react-dom/client' + +createRoot(document.getElementById('root')!).render( + +) diff --git a/packages/editor/src/___dev-demo/preview.tsx b/packages/editor/src/___dev-demo/preview.tsx index d4df7eed8d..c18890f929 100644 --- a/packages/editor/src/___dev-demo/preview.tsx +++ b/packages/editor/src/___dev-demo/preview.tsx @@ -1,20 +1,21 @@ import { showToastNotice } from '@editor/editor-ui/show-toast-notice' +// eslint-disable-next-line no-restricted-imports import { EditorPluginType, SerloEditor, SerloRenderer } from '@editor/package' import { LearnerEventData } from '@editor/plugin/helpers/editor-learner-event' -import { parseDocumentString } from '@editor/static-renderer/helper/parse-document-string' -import { AnyEditorDocument } from '@editor/types/editor-plugins' +import type { AnyEditorDocument } from '@editor/types/editor-plugins' import { useMemo, useState } from 'react' import { debounce } from 'ts-debounce' -const emptyState = JSON.stringify({ plugin: EditorPluginType.Rows }) +const emptyState = { plugin: EditorPluginType.Rows } export function Preview() { - const [previewState, setPreviewState] = useState(emptyState) + const [previewState, setPreviewState] = + useState(emptyState) const isNotEmpty = previewState !== emptyState const debouncedSetState = debounce( - (state?: string | null) => setPreviewState(state ?? emptyState), + (state: AnyEditorDocument) => setPreviewState(state ?? emptyState), 40 ) @@ -22,11 +23,10 @@ export function Preview() { () => { return ( { - void debouncedSetState(JSON.stringify(newState.document)) + void debouncedSetState(newState.document) }} > {(editor) =>
{editor.element}
} @@ -54,7 +54,7 @@ export function Preview() { const jsonObject = JSON.parse( cleanJsonString ) as AnyEditorDocument - setPreviewState(JSON.stringify(jsonObject)) + setPreviewState(jsonObject) } catch (error) { // eslint-disable-next-line no-console console.error('Error parsing JSON:', error) @@ -67,7 +67,7 @@ export function Preview() { {' | '} @@ -58,7 +58,7 @@ export function InteractiveAnswer({
{feedback}
diff --git a/packages/editor/src/editor-ui/plugin-toolbar/text-controls/hooks/use-formatting-options.tsx b/packages/editor/src/editor-ui/plugin-toolbar/text-controls/hooks/use-formatting-options.tsx index 4ac913ff8f..a465d07d5b 100644 --- a/packages/editor/src/editor-ui/plugin-toolbar/text-controls/hooks/use-formatting-options.tsx +++ b/packages/editor/src/editor-ui/plugin-toolbar/text-controls/hooks/use-formatting-options.tsx @@ -297,7 +297,8 @@ function createToolbarControls( group: 'default', renderIcon: (editor: SlateEditor) => { const colorIndex = getColorIndex(editor) - const color = colorIndex ? textColors[colorIndex].value : 'black' + const color = + colorIndex !== undefined ? textColors[colorIndex].value : 'black' return }, subMenuButtons: [ diff --git a/packages/editor/src/editor-ui/save/local-storage-button.tsx b/packages/editor/src/editor-ui/save/local-storage-button.tsx deleted file mode 100644 index 094186ad24..0000000000 --- a/packages/editor/src/editor-ui/save/local-storage-button.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { useEditStrings } from '@editor/i18n/edit-strings-provider' -import { useStore, selectStaticDocument } from '@editor/store' -import { ROOT } from '@editor/store/root/constants' -import { useEffect, useState } from 'react' - -import { storeStateToLocalStorage } from './local-storage-notice' - -export function LocalStorageButton({ open }: { open: boolean }) { - const store = useStore() - const [savedToLocalstorage, setSavedToLocalstorage] = useState(false) - - const edtrIoStrings = useEditStrings().edtrIo - useEffect(() => { - //reset when modal opens - if (open) setSavedToLocalstorage(false) - }, [open]) - - return ( - - ) -} diff --git a/packages/editor/src/editor-ui/save/local-storage-notice.tsx b/packages/editor/src/editor-ui/save/local-storage-notice.tsx index a08630d1ad..44f6a67982 100644 --- a/packages/editor/src/editor-ui/save/local-storage-notice.tsx +++ b/packages/editor/src/editor-ui/save/local-storage-notice.tsx @@ -26,7 +26,7 @@ export function LocalStorageNotice({ if (!stored) return null return ( -
+
<> {storageStrings[useStored ? 'restoreInitial' : 'found']}
@@ -56,7 +56,7 @@ export function getStateFromLocalStorage() { return parsedData[window.location.pathname] } -export function storeStateToLocalStorage(state: StateOrNull) { +function storeStateToLocalStorage(state: StateOrNull) { // eslint-disable-next-line no-console console.log('editor: saving state in browser localstorage') diff --git a/packages/editor/src/i18n/strings/de/edit.ts b/packages/editor/src/i18n/strings/de/edit.ts index b3a6045750..03653471f6 100644 --- a/packages/editor/src/i18n/strings/de/edit.ts +++ b/packages/editor/src/i18n/strings/de/edit.ts @@ -2,9 +2,6 @@ export type EditStrings = typeof editStrings export const editStrings = { lang: 'de', - confirmRouteChange: - 'Willst du wirklich die Seite verlassen ohne zu speichern?', - noChangesWarning: 'Bisher hast du nichts geändert', savedContentMightDisappearWarning: '⚠️ Dies ist eine Testumgebung. Bitte erstelle hier noch keine Inhalte, die du langfristig behalten willst. Fragen? vicky@serlo.org', addPluginsModal: { @@ -156,17 +153,10 @@ export const editStrings = { imageSource: 'Bildquelle', imageSourceHelpText: 'Füge hier weitere Informationen wie den Urheber dieses Bildes hinzu.', - invalidImageUrl: 'Fehler: Ungültige oder unvollständige URL', - invalidImageUrlMessage: - 'Die eingegebene URL ist entweder ungültig oder unvollständig. Bitte stelle sicher, dass du die vollständige URL korrekt kopiert und eingefügt hast. Die URL sollte mit "http://" oder "https://" beginnen.', search: 'Suche', searchOnline: 'Online nach lizenzfreien Bildern suchen', placeholderSource: 'Quelle (optional)', placeholderEmpty: 'https://example.com/image.png', - placeholderUploading: 'Wird hochgeladen …', - placeholderFailed: 'Hochladen fehlgeschlagen', - retry: 'Erneut versuchen', - failedUpload: 'Hochladen fehlgeschlagen', captionPlaceholder: 'Bildunterschrift (optional)', href: 'Link', hrefPlaceholder: 'Bild verlinken', @@ -232,7 +222,6 @@ export const editStrings = { confirmRemoveAllMarks: 'Bist du sicher, dass du alle Aufgaben löschen willst?', addOverlayContent: 'Aufgabe an aktueller Stelle einfügen', - addVideo: 'Füge ein Video hinzu (z.B. YouTube)', changeVideo: 'Video austauschen', saveInfo: 'Änderungen werden automatisch gespeichert!', }, @@ -256,11 +245,6 @@ export const editStrings = { title: '(experiment) Editor State einfügen', description: 'nur in staging', }, - pagePartners: { - title: 'Partner Liste', - description: - 'Nur für die Partnerseite (Liste der Partnerlogos wie auf de.serlo.org)', - }, rows: { title: 'Zeilen', description: 'Rows plugin holds other plugins', @@ -379,6 +363,10 @@ export const editStrings = { titlePlaceholder: 'Titel', url: 'URL', seoTitle: 'Titel für Suchmaschinen', + upload: 'Video hochladen', + placeholderEmpty: 'YouTube- oder Serlo-URL', + change: 'Video ändern', + settings: 'Einstellungen', }, audio: { title: 'Audio', @@ -470,26 +458,9 @@ export const editStrings = { moreInFolder: 'Weitere Aufgaben zum Thema findest du im folgenden Aufgabenordner', addModal: { - introText: - 'Was würde den Lernenden nach dem Artikel weiterhelfen?%break% Hier kannst du %exercises% einbetten oder eine %exerciseFolder% verlinken. %break% Oder du kannst weiterführende %articles%, %courses% oder %videos% empehlen.', - introText2: - 'Du kannst entweder eine Serlo ID oder einen Link einfügen, oder unten Inhalte aus dem Elternordner einfügen.', buttonEx: 'Aufgaben hinzufügen', buttonExFolder: 'Aufgabenordner auswählen', buttonContent: 'Inhalt hinzufügen', - buttonAddType: '%type% hinzufügen', - title: 'Weiterführende Inhalte oder Übungsaufgaben hinzufügen', - invalidInput: 'Ungültige ID oder URL', - fetchError: - 'Etwas ist schief gelaufen, bitte versuche es später noch einmal', - loading: 'Wird geladen …', - notFound: 'Inhalt konnte nicht gefunden werden', - unsupportedType: 'Sorry, der Typ [%type%] wird hier nicht unterstützt', - unsupportedId: - 'Sorry, diese ID ist hier nicht erlaubt. (z.B. weil sie schon ausgewählt ist, oder weil du diese ID bearbeitest…)', - addFromFolderTitle: 'Aus dem Ordner', - placeholder: 'Eine Serlo Id oder URL hier einfügen', - exerciseFolderNote: 'Hier kann nur ein Ordner ausgewählt werden', }, }, course: { @@ -547,29 +518,27 @@ export const editStrings = { confirmRestore: 'Sicher, dass du deine Änderugen unwiderruflich löschen möchtest?', }, + fileUpload: { + placeholderUploading: 'Wird hochgeladen …', + placeholderFailed: 'Hochladen fehlgeschlagen', + retry: 'Erneut versuchen', + failedUpload: 'Hochladen fehlgeschlagen', + invalidUrl: 'Fehler: Ungültige oder unvollständige URL', + invalidUrlMessage: + 'Die eingegebene URL ist entweder ungültig oder unvollständig. Bitte stelle sicher, dass du die vollständige URL korrekt kopiert und eingefügt hast. Die URL sollte mit "http://" oder "https://" beginnen.', + noFileSelected: 'Bitte wähle eine Datei aus', + badExtension: + "Sorry, %ext% ist leider nicht erlaubt. Versuch's mit diesen Typen: %allowed%", + fileTooBig: + "Sorry, diese Datei ist zu groß. Versuch's weniger als %maxsize% MB", + }, settings: 'Einstellungen', extendedSettings: 'Erweiterte Einstellungen', close: 'Schließen', save: 'Speichern', - saveWithReview: 'Speichern und reviewen lassen', cancel: 'Abbrechen', saving: 'Speichert…', - missingChanges: 'Du musst zuerst die Änderungen ausfüllen.', - missingLicenseTerms: 'Du musst zuerst die Lizenzbedingungen akzeptieren.', - missingChangesAndLicenseTerms: - 'Du musst zuerst die Lizenzbedingungen akzeptieren und die Änderungen ausfüllen.', - errorSaving: 'Es trat ein Fehler beim Speichern auf.', - saveLocallyAndRefresh: - 'Du kannst die Bearbeitung lokal zwischenspeichern, dann die Seite neu laden und es erneut versuchen.', - revisionSaved: 'Bearbeitung gespeichert', - saveRevision: 'Bearbeitung zwischenspeichern', changes: 'Beschreibe deine Änderungen am Inhalt', - importOther: 'Aus einem anderen Inhalt importieren', - importOtherExplanation: - 'Du kannst den Content eines anderen Inhalts hier importieren. Füge dazu einfach hier die URL oder ID eines anderen Inhalts auf serlo.org ein. (Nur gleiche Inhaltstypen sind erlaubt – also Artikel können nur in Artikeln importiert werden). Diese Funktion ist NICHT dazu gedacht exakte Kopien anzulegen. Aufgabengruppen und Kurse werden nicht unterstützt (aber Aufgaben und Kursseiten klappen)', - importOtherWarning: - 'Vorsicht: Diese Funktion überschreibt alle bestehenden Inhalte in diesem Editor.', - importOtherButton: 'Inhalte Importieren', current: 'Aktuell', author: 'Autor*in', createdAt: 'Zeitstempel', diff --git a/packages/editor/src/i18n/strings/de/static.ts b/packages/editor/src/i18n/strings/de/static.ts index 47df610c58..6423ee412b 100644 --- a/packages/editor/src/i18n/strings/de/static.ts +++ b/packages/editor/src/i18n/strings/de/static.ts @@ -40,18 +40,12 @@ export const staticStrings = { pages: 'Kursübersicht', next: 'Weiter', back: 'Zurück', - noPagesWarning: - 'Leider gibt es für diesen Kurs noch keine akzeptierten Seiten.', noRevisionForPage: 'Ungegeprüfte Seite', }, exercise: { title: 'Aufgabe', prerequisite: 'Für diese Aufgabe benötigst Du folgendes Grundwissen:', task: 'Aufgabenstellung', - correct: 'Richtig', - missedSome: 'Fast! Dir fehlt noch mindestens eine richtige Antwort.', - wrong: 'Leider nicht richtig', - feedback: 'Feedback', answer: 'Antwort', check: "Stimmt's?", yourAnswer: 'Deine Antwort…', @@ -60,6 +54,18 @@ export const staticStrings = { strategy: 'Strategie', solution: 'Lösungsvorschlag', showHiddenInteractive: 'Hier deine Lösung prüfen', + feedback: { + title: 'Feedback', + correct: 'Richtig!', + missedSome: 'Fast! Dir fehlt noch mindestens eine richtige Antwort.', + incorrect0: 'Schade, leider noch nicht richtig.', + incorrect1: "Versuch's nochmal.", + incorrect2: 'Probiere es nochmal.', + incorrect3: 'Überleg nochmal!', + incorrect4: "Versuch's nochmal, das war leider noch nicht richtig.", + incorrect5: 'Das war leider noch nicht richtig, überleg nochmal.', + incorrect6: 'Probiere es nochmal, das war leider noch nicht richtig.', + }, }, image: { altFallback: 'Bild', diff --git a/packages/editor/src/i18n/strings/en/edit.ts b/packages/editor/src/i18n/strings/en/edit.ts index 536404dc32..23f5231852 100644 --- a/packages/editor/src/i18n/strings/en/edit.ts +++ b/packages/editor/src/i18n/strings/en/edit.ts @@ -2,8 +2,6 @@ export type EditStrings = typeof editStrings export const editStrings = { lang: 'en', - confirmRouteChange: 'Are you sure you want to leave without saving?', - noChangesWarning: 'Nothing changed so there is no need to save yet', savedContentMightDisappearWarning: '⚠️ This is a test environment. Please do not create content that you want to keep long term here. Questions? vicky@serlo.org', addPluginsModal: { @@ -151,17 +149,10 @@ export const editStrings = { imageUrl: 'Image URL', imageSource: 'Image Source', imageSourceHelpText: 'Add the author or source of this image here', - invalidImageUrl: 'Error: Invalid or Incomplete URL', - invalidImageUrlMessage: - 'The URL you entered is either invalid or incomplete. Please ensure you have copied and pasted the full URL correctly. The URL should start with "http://" or "https://".', search: 'Search', searchOnline: 'Search online for licence-free images', placeholderSource: 'Source (optional)', placeholderEmpty: 'https://example.com/image.png', - placeholderUploading: 'Uploading…', - placeholderFailed: 'Upload failed…', - retry: 'Retry', - failedUpload: 'Upload failed', captionPlaceholder: 'Optional caption', href: 'Link', hrefPlaceholder: 'Link the image', @@ -220,7 +211,6 @@ export const editStrings = { removeAllMarks: 'Remove all exercises', confirmRemoveAllMarks: 'Are you sure you want to remove all exercises?', addOverlayContent: 'Add exercise', - addVideo: 'Add a video url (e.g. YouTube) to get started', changeVideo: 'Change video', saveInfo: 'Changes are continually saved!', }, @@ -244,11 +234,6 @@ export const editStrings = { title: 'Experimental State-Paste Plugin', description: 'only on staging', }, - pagePartners: { - title: 'Partner List', - description: - 'Only for partner page (List of partner logos like on de.serlo.org/)', - }, rows: { title: 'Rows', description: 'Rows plugin holds other plugins', @@ -365,6 +350,10 @@ export const editStrings = { titlePlaceholder: 'Title', url: 'URL', seoTitle: 'Title for search engines', + upload: 'Upload Video', + placeholderEmpty: 'YouTube or Serlo URL', + change: 'Change video', + settings: 'Settings', }, audio: { title: 'Audio', @@ -453,24 +442,9 @@ export const editStrings = { sourceUrl: 'Optional URL', moreInFolder: 'You can find more exercises in the following folder', addModal: { - introText: - 'After reading the article, what would help out learners next? %break% Here you can add some %exercises% or link to a single %exerciseFolder%. %break% Or you can suggest %articles%, %courses% or %videos% to follow up with.', - introText2: - 'You can either paste an Serlo ID, an URL or choose content from the parent folder below.', buttonEx: 'Add exercises', buttonExFolder: 'Select exercise folder', buttonContent: 'Add content', - buttonAddType: 'Add %type%', - title: 'Add related Content or Exercises', - invalidInput: 'Invalid id or url', - fetchError: 'Something went wrong, please try later', - loading: 'Loading…', - notFound: 'Could not find that content', - unsupportedType: 'Sorry, type [%type%] is not supported here', - unsupportedId: 'Sorry, this ID is not supported here', - addFromFolderTitle: 'From the folder', - placeholder: 'Paste Serlo ID or URL here', - exerciseFolderNote: 'Only one can be selected here', }, }, course: { @@ -527,29 +501,26 @@ export const editStrings = { restoreInitialButton: 'Delete changes', confirmRestore: 'Are you sure you want to delete all your changes?', }, + fileUpload: { + placeholderUploading: 'Uploading…', + placeholderFailed: 'Upload failed…', + retry: 'Retry', + failedUpload: 'Upload failed', + invalidUrl: 'Error: Invalid or Incomplete URL', + invalidUrlMessage: + 'The URL you entered is either invalid or incomplete. Please ensure you have copied and pasted the full URL correctly. The URL should start with "http://" or "https://".', + noFileSelected: 'Please select a file', + badExtension: + 'Sorry, %ext% is not an accepted file type. Try one of: %allowed%', + fileTooBig: 'Sorry, this file is too big. Maximum size is %maxsize% MB', + }, settings: 'Settings', extendedSettings: 'Extended Settings', close: 'Close', save: 'Save', - saveWithReview: 'Save and get review', cancel: 'Cancel', saving: 'Saving…', - missingChanges: 'You need to fill out the changes you made', - missingLicenseTerms: 'You need to accept the license terms', - missingChangesAndLicenseTerms: - 'You need to fill out the changes you made and accept the license terms', - errorSaving: 'An error occurred during saving.', - saveLocallyAndRefresh: - 'You can store the revision locally, refresh the page and try to save again.', - revisionSaved: 'Revision saved', - saveRevision: 'Save revision', changes: 'Describe your changes to the content', - importOther: 'Import content from other entity', - importOtherExplanation: - "Just paste the url or id of another serlo.org entity of the same type here to duplicate it's content here. Do NOT use this to make exact copies or move content. Exercise Groups and Courses are not supported (but Exercises and Course Pages).", - importOtherWarning: - 'Warning: This overwrites everything that is already present in this editor!', - importOtherButton: 'Import content', current: 'Current', author: 'Author', createdAt: 'when?', diff --git a/packages/editor/src/i18n/strings/en/static.ts b/packages/editor/src/i18n/strings/en/static.ts index 2d5de8b2b7..022d1d839d 100644 --- a/packages/editor/src/i18n/strings/en/static.ts +++ b/packages/editor/src/i18n/strings/en/static.ts @@ -38,18 +38,12 @@ export const staticStrings = { pages: 'Course overview', next: 'Next', back: 'Back', - noPagesWarning: - 'Sorry there seem to be no reviewed pages in this course yet.', noRevisionForPage: 'unreviewed page', }, exercise: { title: 'Exercise', prerequisite: 'For this task you need the following basic knowledge:', task: 'Task', - correct: 'Correct', - missedSome: 'Almost! You missed at least one correct answer.', - wrong: 'Wrong', - feedback: 'Feedback', answer: 'Answer', check: 'Check', yourAnswer: 'Your answer…', @@ -58,6 +52,19 @@ export const staticStrings = { strategy: 'Strategy', solution: 'Proposed Solution', showHiddenInteractive: 'Check your solution here', + feedback: { + title: 'Feedback', + correct: 'Correct!', + missedSome: 'Almost! You missed at least one correct answer.', + incorrect0: "Unfortunately, you're answer isn't quite right yet.", + incorrect1: 'Try again.', + incorrect2: 'Have another go.', + incorrect3: 'Have another think.', + incorrect4: + "Have another go. Unfortunately your answer isn't correct yet.", + incorrect5: "Your answer isn't correct yet. Have another think.", + incorrect6: "Try again, unfortunately your answer isn't correct yet.", + }, }, image: { altFallback: 'Image', diff --git a/packages/editor/src/package/config.ts b/packages/editor/src/package/config.ts index 35d5f56271..63dac1df41 100644 --- a/packages/editor/src/package/config.ts +++ b/packages/editor/src/package/config.ts @@ -32,4 +32,5 @@ export const defaultSerloEditorProps = { onChange: undefined, language: 'de' as SupportedLanguage, isProductionEnvironment: false, + styleReset: true, } diff --git a/packages/editor/src/package/editor.tsx b/packages/editor/src/package/editor.tsx index 397eaba57b..d0a0a37df3 100644 --- a/packages/editor/src/package/editor.tsx +++ b/packages/editor/src/package/editor.tsx @@ -1,8 +1,14 @@ import { Editor, type EditorProps } from '@editor/core' import { EditorMetaContext } from '@editor/core/contexts/editor-meta-context' import { type GetDocument } from '@editor/core/types' -import { createBasicPlugins } from '@editor/editor-integration/create-basic-plugins' -import { createRenderers } from '@editor/editor-integration/create-renderers' +import { + createPlugins, + type ExtraSerloPlugins, +} from '@editor/editor-integration/create-plugins' +import { + createRenderers, + type ExtraSerloRenderers, +} from '@editor/editor-integration/create-renderers' import { EditStringsProvider } from '@editor/i18n/edit-strings-provider' import { StaticStringsProvider } from '@editor/i18n/static-strings-provider' import { editorPlugins } from '@editor/plugin/helpers/editor-plugins' @@ -34,8 +40,13 @@ export interface SerloEditorProps { editorVariant: EditorVariant isProductionEnvironment?: boolean userId?: string + styleReset?: boolean _testingSecret?: string | null _ltik?: string + /** @deprecated Only temporarily allowed for serlo.org. */ + extraSerloPlugins?: ExtraSerloPlugins + /** @deprecated Only temporarily allowed for serlo.org. */ + extraSerloRenderers?: ExtraSerloRenderers } /** For exporting the editor */ @@ -48,8 +59,11 @@ export function SerloEditor(props: SerloEditorProps) { plugins, isProductionEnvironment, userId, + styleReset, _testingSecret, _ltik, + extraSerloPlugins, + extraSerloRenderers, } = { ...defaultSerloEditorProps, ...props, @@ -67,10 +81,15 @@ export function SerloEditor(props: SerloEditorProps) { const { staticStrings, editStrings } = editorData[language] - const allPlugins = createBasicPlugins(plugins, _testingSecret) + const allPlugins = createPlugins( + plugins, + _testingSecret, + language, + extraSerloPlugins + ) editorPlugins.init(allPlugins) - const basicRenderers = createRenderers() + const basicRenderers = createRenderers(extraSerloRenderers) editorRenderers.init(basicRenderers) return ( @@ -79,13 +98,15 @@ export function SerloEditor(props: SerloEditorProps) { - {isProductionEnvironment ? null : renderTestEnvironmentWarning()} - - {children} - + {renderTestEnvironmentWarning()} +
+ + {children} + +
@@ -105,8 +126,9 @@ export function SerloEditor(props: SerloEditorProps) { } function renderTestEnvironmentWarning() { + if (isProductionEnvironment) return null return ( -
+
{editStrings.savedContentMightDisappearWarning}
) diff --git a/packages/editor/src/package/index.ts b/packages/editor/src/package/index.ts index e07daf3c00..6af1279407 100644 --- a/packages/editor/src/package/index.ts +++ b/packages/editor/src/package/index.ts @@ -1,22 +1,117 @@ export { SerloEditor, type SerloEditorProps } from './editor' export { SerloRenderer, type SerloRendererProps } from './serlo-renderer' -export type { SupportedLanguage } from '@editor/types/language-data' export type { BaseEditor } from '@editor/core' +export type { SupportedLanguage } from '@editor/types/language-data' export type { LearnerEventData } from '@editor/plugin/helpers/editor-learner-event' +export { EditorPluginType } from '@editor/types/editor-plugin-type' -// We need to make a distinction between entires on our menu and technical -// plugin types Internally we have for example a `scMcExercise` which has a -// configuration whether it is a single choice or multiple choice exercise. -// However on the menu there are the two entries `singleChoiceExercise` and -// `multipleChoiceExercise`. When somebody else uses our editor as a block -// inside their own editor they would like to have the two entries -// `singleChoiceExercise` and `multipleChoiceExercise`. -// Thus we export our menu entries here as plugin. +/** + * We need to make a distinction between entries in our menu and + * technical plugin types. For example, internally we have a + * `scMcExercise` which has a configuration that defines whether + * it is a single choice or a multiple choice exercise. However, + * in the menu there are the two entries: `singleChoiceExercise` + * and `multipleChoiceExercise`. When somebody else uses our editor + * as a block inside their own editor they would like to have two + * entries: `singleChoiceExercise` and `multipleChoiceExercise`. + * Thus we export our menu entries here. + */ export { pluginMenuDe, pluginMenuEn } from './plugin-menu-export' export { type PluginMenuType as Plugin } from '@editor/plugins/rows/utils/plugin-menu' -export { EditorPluginType } from '@editor/types/editor-plugin-type' +/** + * Plugin state helpers and types + */ +export * from '@editor/types/plugin-type-guards' +export * from './static-is-plugin-empty' +export { extractStringFromTextDocument } from '@editor/plugins/text/utils/static-extract-text' +export type * from '@editor/types/editor-plugins' +export type * from '@editor/plugin/internal-plugin-state' +export type * from '@editor/plugin/internal-plugin' -// Exported only so that integrations like serlo-editor-for-edusharing can customize available plugins based on the default plugins +/** + * Exported so that integrations can customize available plugins + * based on the default plugins. + */ export { defaultPlugins } from './config' + +/** StaticMath is a simple component that renders a math formula. + * it's used in the Editor and is exported here in case you want to + * render pretty LaTeX without the whole editor. + * It's relatively big so load it dynamically if you can. */ +export { + StaticMath, + type StaticMathProps, +} from '@editor/plugins/text/static-components/static-math' + +/** + * Exported for serlo.org + */ +export { TemplatePluginType } from '@editor/types/template-plugin-type' +export * from '@editor/core/contexts/serlo-only-features-context' +export { + // Exported for H5P plugin + string, + type StringStateType, + // Exported for image-with-serlo-config plugin wrapper + type LoadedFile, + type UploadValidator, +} from '@editor/plugin' +// Exported for ___experiments page +export { + type PreferenceName, + getWithoutContext, + setWithoutContext, +} from '@editor/core/contexts/preference-context' +// Exported for H5P plugin +export { EditorInput } from '@editor/editor-ui' +export { editorLearnerEvent } from '@editor/plugin/helpers/editor-learner-event' +// Exported for InputExercise and Multimedia Serlo static renderers +export { TextStaticRenderer } from '@editor/plugins/text/static' +// Exported for Audio Serlo static renderer +export { + AudioRenderer, + getVocarooUrl, + parseAudioUrl, +} from '@editor/plugins/audio/renderer' +// Exported for Exercise Serlo static renderer +export { ExerciseStaticRenderer } from '@editor/plugins/exercise/static' +// Exported for ExerciseGroup Serlo static renderer +export { ExerciseGroupStaticRenderer } from '@editor/plugins/exercise-group/static' +// Exported for Geogebra Serlo static renderer +export { parseId } from '@editor/plugins/geogebra/renderer' +export { GeogebraStaticRenderer } from '@editor/plugins/geogebra/static' +// Exported for Image Serlo static renderer +export { ImageStaticRenderer } from '@editor/plugins/image/static' +// Exported for InputExercise Serlo static renderer +export { InputExerciseStaticRenderer } from '@editor/plugins/input-exercise/static' +// Exported for Interactive Video Serlo static renderer +export { InteractiveVideoStaticRenderer } from '@editor/plugins/interactive-video/static' +// Exported for Multimedia Serlo static renderer +export { MultimediaStaticRenderer } from '@editor/plugins/multimedia/static' +// Exported for ScMcExercise Serlo static renderer +export type { ScMcExerciseRendererAnswer } from '@editor/plugins/sc-mc-exercise/renderer/renderer' +export { ScMcExerciseStaticRenderer } from '@editor/plugins/sc-mc-exercise/static' +// Exported for Solution Serlo static renderer +export { StaticSolutionRenderer } from '@editor/plugins/solution/static' +// Exported for Video Serlo static renderer +export { VideoType } from '@editor/plugins/video/renderer' +export { parseVideoUrl } from '@editor/plugins/video/utils/parse-video-url' +export { VideoStaticRenderer } from '@editor/plugins/video/static' +// Exported for image-with-serlo-config plugin wrapper +export { createImagePlugin } from '@editor/plugins/image' +// Exported for convertEditorResponseToState utility +export type { AppletTypePluginState } from '@editor/plugins/serlo-template-plugins/applet' +export type { ArticleTypePluginState } from '@editor/plugins/serlo-template-plugins/article' +export type { + Entity, + Uuid, +} from '@editor/plugins/serlo-template-plugins/common/common' +export type { CourseTypePluginState } from '@editor/plugins/serlo-template-plugins/course' +export type { EventTypePluginState } from '@editor/plugins/serlo-template-plugins/event' +export type { TextExerciseGroupTypePluginState } from '@editor/plugins/serlo-template-plugins/exercise-group/text-exercise-group' +export type { PageTypePluginState } from '@editor/plugins/serlo-template-plugins/page' +export type { TaxonomyTypePluginState } from '@editor/plugins/serlo-template-plugins/taxonomy' +export type { TextExerciseTypePluginState } from '@editor/plugins/serlo-template-plugins/text-exercise' +export type { VideoTypePluginState } from '@editor/plugins/serlo-template-plugins/video' diff --git a/packages/editor/src/package/serlo-renderer.tsx b/packages/editor/src/package/serlo-renderer.tsx index 4f356ab681..d1fb9f7a91 100644 --- a/packages/editor/src/package/serlo-renderer.tsx +++ b/packages/editor/src/package/serlo-renderer.tsx @@ -1,5 +1,8 @@ import { EditorMetaContext } from '@editor/core/contexts/editor-meta-context' -import { createRenderers } from '@editor/editor-integration/create-renderers' +import { + createRenderers, + type ExtraSerloRenderers, +} from '@editor/editor-integration/create-renderers' import { EditStringsProvider } from '@editor/i18n/edit-strings-provider' import { StaticStringsProvider } from '@editor/i18n/static-strings-provider' import { @@ -21,10 +24,12 @@ export interface SerloRendererProps { _ltik?: string editorVariant: EditorVariant handleLearnerEvent?: (data: LearnerEventData) => void + /** @deprecated Only temporarily allowed for serlo.org. */ + extraSerloRenderers?: ExtraSerloRenderers } export function SerloRenderer(props: SerloRendererProps) { - const { language, _ltik, editorVariant } = { + const { language, _ltik, editorVariant, extraSerloRenderers } = { ...defaultSerloEditorProps, ...props, } @@ -38,7 +43,7 @@ export function SerloRenderer(props: SerloRendererProps) { // if we load the editStrings here as well, we might as well merge them const { staticStrings, editStrings } = editorData[language] - const basicRenderers = createRenderers() + const basicRenderers = createRenderers(extraSerloRenderers) editorRenderers.init(basicRenderers) if (props.handleLearnerEvent) { diff --git a/packages/editor/src/package/static-is-plugin-empty.ts b/packages/editor/src/package/static-is-plugin-empty.ts new file mode 100644 index 0000000000..13bf1cb0db --- /dev/null +++ b/packages/editor/src/package/static-is-plugin-empty.ts @@ -0,0 +1,2 @@ +export * from '@editor/plugins/text/utils/static-is-empty' +export * from '@editor/plugins/article/utils/static-is-empty' diff --git a/packages/editor/src/package/storage-format.ts b/packages/editor/src/package/storage-format.ts index 08beac5e93..3d6a85476c 100644 --- a/packages/editor/src/package/storage-format.ts +++ b/packages/editor/src/package/storage-format.ts @@ -104,7 +104,8 @@ export function createEmptyDocument( id: uuid_v4(), type: documentType, variant: editorVariant, - domainOrigin: window.location.origin, + domainOrigin: + typeof window !== 'undefined' ? window.location.origin : 'server', version: currentVersion, editorVersion: getEditorVersion(), dateModified: getCurrentDatetime(), diff --git a/packages/editor/src/plugins/article/editor.tsx b/packages/editor/src/plugins/article/editor.tsx index d9b9ebbc11..0f3045c69c 100644 --- a/packages/editor/src/plugins/article/editor.tsx +++ b/packages/editor/src/plugins/article/editor.tsx @@ -1,8 +1,8 @@ +import { SerloOnlyFeaturesContext } from '@editor/core/contexts/serlo-only-features-context' import { EditorTooltip } from '@editor/editor-ui/editor-tooltip' import { FaIcon } from '@editor/editor-ui/fa-icon' import { useEditStrings } from '@editor/i18n/edit-strings-provider' import { cn } from '@editor/utils/cn' -import { SerloOnlyFeaturesContext } from '@editor/utils/serlo-extra-context' import { faTrashAlt } from '@fortawesome/free-solid-svg-icons' import { useContext, useState } from 'react' diff --git a/packages/editor/src/plugins/blanks-exercise/components/blank-draggable-answer.tsx b/packages/editor/src/plugins/blanks-exercise/components/blank-draggable-answer.tsx index 8d2e0d42fc..156690b6a5 100644 --- a/packages/editor/src/plugins/blanks-exercise/components/blank-draggable-answer.tsx +++ b/packages/editor/src/plugins/blanks-exercise/components/blank-draggable-answer.tsx @@ -1,9 +1,11 @@ -import { useEmptyPreview } from '@editor/core/hooks/use-empty-preview' import { cn } from '@editor/utils/cn' -import { useMemo } from 'react' +import { useEffect, useMemo } from 'react' import { useDrag } from 'react-dnd' +import { getEmptyImage } from 'react-dnd-html5-backend' import type { DraggableId } from '..' +import { DraggableAnswerPreview } from './draggable-answer-preview' +import { draggableAnswerStyle } from './draggable-answer-style' export const blankDraggableAnswerDragType = 'blank-solution' @@ -18,9 +20,6 @@ export interface BlankAnswerDragItem { text: string } -export const dragAnswerStyle = - 'cursor-grab rounded-full border border-brand bg-brand-50 px-2' - export function BlankDraggableAnswer(props: BlankDraggableAnswerProps) { const { draggableId, text, isAnswerCorrect } = props @@ -33,18 +32,24 @@ export function BlankDraggableAnswer(props: BlankDraggableAnswerProps) { type: blankDraggableAnswerDragType, item: dragItem, }) - useEmptyPreview(preview) + + useEffect(() => { + preview(getEmptyImage(), { captureDraggingState: true }) + }, [preview]) return ( - } - > - {text} - +
+ } + > + {text} + + +
) } diff --git a/packages/editor/src/plugins/blanks-exercise/components/draggable-answer-preview.tsx b/packages/editor/src/plugins/blanks-exercise/components/draggable-answer-preview.tsx new file mode 100644 index 0000000000..27362d2a30 --- /dev/null +++ b/packages/editor/src/plugins/blanks-exercise/components/draggable-answer-preview.tsx @@ -0,0 +1,33 @@ +import { cn } from '@editor/utils/cn' +import { useDragLayer } from 'react-dnd' + +import type { BlankAnswerDragItem } from './blank-draggable-answer' +import { draggableAnswerStyle } from './draggable-answer-style' + +export function DraggableAnswerPreview({ + draggableId, +}: { + draggableId: string +}) { + const { isDragging, item, currentOffset } = useDragLayer((monitor) => ({ + item: monitor.getItem(), + currentOffset: monitor.getDifferenceFromInitialOffset(), + isDragging: monitor.isDragging(), + })) + + const isExactItemBeingDragged = item && item.draggableId === draggableId + + if (!isDragging || !isExactItemBeingDragged) return null + + const transform = currentOffset + ? `translate(${currentOffset.x}px, ${currentOffset.y}px)` + : 'translate(-9999px, -9999px)' + + return ( +
+
+
{item?.text}
+
+
+ ) +} diff --git a/packages/editor/src/plugins/blanks-exercise/components/draggable-answer-style.ts b/packages/editor/src/plugins/blanks-exercise/components/draggable-answer-style.ts new file mode 100644 index 0000000000..974cdccde9 --- /dev/null +++ b/packages/editor/src/plugins/blanks-exercise/components/draggable-answer-style.ts @@ -0,0 +1,2 @@ +export const draggableAnswerStyle = + 'cursor-grab rounded-full border border-brand bg-brand-50 px-2 text-lg leading-6 select-none' diff --git a/packages/editor/src/plugins/blanks-exercise/editor.tsx b/packages/editor/src/plugins/blanks-exercise/editor.tsx index 650df6065e..6b1017c591 100644 --- a/packages/editor/src/plugins/blanks-exercise/editor.tsx +++ b/packages/editor/src/plugins/blanks-exercise/editor.tsx @@ -73,6 +73,9 @@ export function BlanksExerciseEditor(props: BlanksExerciseProps) { if (!childPluginState || !staticDocument) return null + const showToolbar = + isChildPluginFocused && childPluginState.plugin === EditorPluginType.Text + return (
- {isChildPluginFocused ? ( +
+ {showToolbar ? ( ) : null} {childPlugin.render({ config: childPluginConfig })} - +
} childPluginState={childPluginState} extraDraggableAnswers={staticDocument.state.extraDraggableAnswers} diff --git a/packages/editor/src/plugins/course/static/course-footer.tsx b/packages/editor/src/plugins/course/static/course-footer.tsx index 6eab27c566..805fa04fef 100644 --- a/packages/editor/src/plugins/course/static/course-footer.tsx +++ b/packages/editor/src/plugins/course/static/course-footer.tsx @@ -2,27 +2,22 @@ import { FaIcon } from '@editor/editor-ui/fa-icon' import { useStaticStrings } from '@editor/i18n/static-strings-provider' import { EditorCourseDocument } from '@editor/types/editor-plugins' import { cn } from '@editor/utils/cn' -import { scrollIfNeeded } from '@editor/utils/scroll' import { faArrowCircleRight, faArrowCircleUp, } from '@fortawesome/free-solid-svg-icons' import { MouseEvent } from 'react' -import { type DummyNextRouter } from './static' - export function CourseFooter({ activePageIndex: index, pages, onOverviewButtonClick, pageUrls, - router, }: { activePageIndex: number pages: EditorCourseDocument['state']['pages'] onOverviewButtonClick: (e: MouseEvent) => void pageUrls?: string[] - router: DummyNextRouter }) { const onOverviewClick = (e: MouseEvent) => { location.href = '#course-overview' @@ -38,10 +33,7 @@ export function CourseFooter({ const courseStrings = useStaticStrings().plugins.course function navigate(toPath: string, newIndex: number) { - void router.push(toPath, undefined, { shallow: true }) - scrollIfNeeded(document.querySelector('#course-title')) - - void router.push(toPath, undefined, { shallow: true }) + window.location.pathname = toPath setTimeout(() => { document.title = pages[newIndex].title }, 100) diff --git a/packages/editor/src/plugins/course/static/course-navigation.tsx b/packages/editor/src/plugins/course/static/course-navigation.tsx index c3b71d2bb1..090f7b2c86 100644 --- a/packages/editor/src/plugins/course/static/course-navigation.tsx +++ b/packages/editor/src/plugins/course/static/course-navigation.tsx @@ -1,7 +1,6 @@ import { EditorCourseDocument } from '@editor/types/editor-plugins' import { cn } from '@editor/utils/cn' -import { type DummyNextRouter } from './static' import { CourseNavigationRenderer } from '../renderer/course-navigation' export function CourseNavigation({ @@ -10,14 +9,12 @@ export function CourseNavigation({ courseNavOpen, setCourseNavOpen, pageUrls, - router, }: { pages: EditorCourseDocument['state']['pages'] activePageId?: string courseNavOpen: boolean setCourseNavOpen: (open: boolean) => void pageUrls?: string[] - router: DummyNextRouter }) { if (!pages) return null @@ -35,7 +32,7 @@ export function CourseNavigation({ function handleClick(e: React.MouseEvent) { e.preventDefault() if (!href) return - void router.push(href, undefined, { shallow: true }) + window.location.pathname = href setTimeout(() => { document.title = title }, 100) diff --git a/packages/editor/src/plugins/course/static/static.tsx b/packages/editor/src/plugins/course/static/static.tsx index c0c0d62f3a..ea54ba604e 100644 --- a/packages/editor/src/plugins/course/static/static.tsx +++ b/packages/editor/src/plugins/course/static/static.tsx @@ -1,34 +1,21 @@ +import { SerloOnlyFeaturesContext } from '@editor/core/contexts/serlo-only-features-context' import { StaticRenderer } from '@editor/static-renderer/static-renderer' import { EditorCourseDocument } from '@editor/types/editor-plugins' import { cn } from '@editor/utils/cn' -import { useState, MouseEvent } from 'react' +import { useState, MouseEvent, useContext } from 'react' import { CourseFooter } from './course-footer' import { CourseNavigation } from './course-navigation' -import { getCoursePageIdFromPath } from '../helper/get-course-id-from-path' - -export interface DummyNextRouter { - asPath: string - push( - url: string, - as?: undefined, - options?: { shallow: boolean } - ): Promise -} export function CourseStaticRenderer({ state, serloContext, - router, - isRevisionView, -}: EditorCourseDocument & { - router: DummyNextRouter - isRevisionView?: boolean -}) { +}: EditorCourseDocument) { const { pages } = state - const routerCourseId = getCoursePageIdFromPath(router.asPath) - const queryPageId = routerCourseId ?? serloContext?.activeCoursePageId + const { isRevisionView } = useContext(SerloOnlyFeaturesContext) + + const queryPageId = serloContext?.activeCoursePageId // load nav opened when only some entries const [courseNavOpen, setCourseNavOpen] = useState( pages.length < 4 || (isRevisionView ?? false) @@ -61,7 +48,6 @@ export function CourseStaticRenderer({ courseNavOpen={courseNavOpen} setCourseNavOpen={setCourseNavOpen} pageUrls={pageUrls} - router={router} /> {pages.length ? ( @@ -73,7 +59,6 @@ export function CourseStaticRenderer({ onOverviewButtonClick={openCourseNav} activePageIndex={activePageIndex} pageUrls={serloContext?.coursePageUrls} - router={router} /> ) : null} diff --git a/packages/editor/src/plugins/dropzone-image/components/editor/editor-canvas.tsx b/packages/editor/src/plugins/dropzone-image/components/editor/editor-canvas.tsx index cc24a661d9..ab827aa339 100644 --- a/packages/editor/src/plugins/dropzone-image/components/editor/editor-canvas.tsx +++ b/packages/editor/src/plugins/dropzone-image/components/editor/editor-canvas.tsx @@ -114,10 +114,10 @@ export function EditorCanvas({ return (
({ + item: monitor.getItem(), + currentOffset: monitor.getDifferenceFromInitialOffset(), + isDragging: monitor.isDragging(), + })) + + const isExactItemBeingDragged = item && item.id === id + + if (!isDragging || !isExactItemBeingDragged) return null + + const { text, imageUrl } = item + + const transform = currentOffset + ? `translate(${currentOffset.x}px, ${currentOffset.y}px)` + : 'translate(-9999px, -9999px)' + + return ( +
+
+ +
+
+ ) +} diff --git a/packages/editor/src/plugins/dropzone-image/components/shared/draggable-answer.tsx b/packages/editor/src/plugins/dropzone-image/components/shared/draggable-answer.tsx index 6303e1c25d..0cc01c0b8d 100644 --- a/packages/editor/src/plugins/dropzone-image/components/shared/draggable-answer.tsx +++ b/packages/editor/src/plugins/dropzone-image/components/shared/draggable-answer.tsx @@ -1,6 +1,9 @@ import { cn } from '@editor/utils/cn' +import { useEffect, useMemo } from 'react' import { useDrag } from 'react-dnd' +import { getEmptyImage } from 'react-dnd-html5-backend' +import { DraggableAnswerPreview } from './draggable-answer-preview' import type { PossibleAnswerType } from '../../types' import { AnswerContent } from '../answer-zone/answer-content' @@ -14,6 +17,9 @@ interface DraggableAnswerProps { hasEnoughDroppedAnswers?: boolean } +export type DragItem = PossibleAnswerType & + Pick + export function DraggableAnswer(props: DraggableAnswerProps) { const { answer, @@ -26,35 +32,47 @@ export function DraggableAnswer(props: DraggableAnswerProps) { } = props const { id, imageUrl, text } = answer - const [, dragRef] = useDrag({ + const dragItem = useMemo( + () => ({ id, originDropzoneId, imageUrl, text }), + [id, imageUrl, originDropzoneId, text] + ) + + const [, dragRef, preview] = useDrag({ type: dragType, - item: { id, originDropzoneId, imageUrl, text }, + item: dragItem, }) + useEffect(() => { + preview(getEmptyImage(), { captureDraggingState: true }) + }, [preview]) + return ( - - + - + ref={dragRef} + > + + + +
) } diff --git a/packages/editor/src/plugins/dropzone-image/components/static/static-canvas.tsx b/packages/editor/src/plugins/dropzone-image/components/static/static-canvas.tsx index 1d79b79bb7..254e65da12 100644 --- a/packages/editor/src/plugins/dropzone-image/components/static/static-canvas.tsx +++ b/packages/editor/src/plugins/dropzone-image/components/static/static-canvas.tsx @@ -42,11 +42,10 @@ export function StaticCanvas(props: StaticCanvasProps) { return (
( ) : null} diff --git a/packages/editor/src/plugins/image/utils/upload-file.ts b/packages/editor/src/plugins/image/utils/upload-file.ts index 4737873f74..e78c174739 100644 --- a/packages/editor/src/plugins/image/utils/upload-file.ts +++ b/packages/editor/src/plugins/image/utils/upload-file.ts @@ -2,30 +2,35 @@ import { EditorMetaContext, type EditorMeta, } from '@editor/core/contexts/editor-meta-context' +import { useIsSerlo } from '@editor/core/hooks/use-is-serlo' +import { useEditStrings } from '@editor/i18n/edit-strings-provider' import { type UploadHandler } from '@editor/plugin' +import { EditStrings } from '@editor/types/language-data' import { useContext } from 'react' import { handleError, validateFile } from './validate-file' type UploadMeta = Pick -export function useUploadFile(oldUploader: UploadHandler) { +export function useUploadFile(oldUploader?: UploadHandler) { const { editorVariant, userId } = useContext(EditorMetaContext) - - const uploader = (file: File) => uploadFile({ file, editorVariant, userId }) - return shouldUseNewUpload() ? uploader : oldUploader + const isSerlo = useIsSerlo() + const uploadStrings = useEditStrings().edtrIo.fileUpload + const uploader = (file: File) => + uploadFile({ file, editorVariant, userId, isSerlo, uploadStrings }) + return shouldUseNewUpload(isSerlo) ? uploader : oldUploader! } -// while testing -export function shouldUseNewUpload() { +function shouldUseNewUpload(isSerlo: boolean) { + if (isSerlo) return true + // while testing if (typeof window === 'undefined') return false const host = window.location.hostname const isDevOrPreviewOrStaging = - (host.startsWith('frontend-git') && host.endsWith('vercel.app')) || - host.endsWith('serlo-staging.dev') || host === 'localhost' || process.env.NODE_ENV === 'development' || - host.endsWith('serlo.dev') + host === 'editor.serlo.dev' || + host === 'editor.serlo-staging.dev' if (isDevOrPreviewOrStaging) { // eslint-disable-next-line no-console @@ -35,16 +40,21 @@ export function shouldUseNewUpload() { } async function uploadFile({ + isSerlo, file, editorVariant, userId, + uploadStrings, }: UploadMeta & { file: File + uploadStrings: EditStrings['edtrIo']['fileUpload'] + isSerlo: boolean }) { - const validated = validateFile(file) + const validated = validateFile(file, uploadStrings) if (!validated) return Promise.reject() const parentHost = getParentHost() + const signedUrlHost = getSignedUrlHost(isSerlo) // url for signedUrl fetch const url = new URL(`https://${signedUrlHost}/media/presigned-url`) @@ -88,10 +98,11 @@ async function uploadFile({ return Promise.resolve(fileUrl) } -const signedUrlHost = - process.env.NODE_ENV === 'development' - ? 'editor.serlo.dev' - : 'editor.serlo.dev' // TODO: Change to production bucket after testing +const isSerloProduction = process.env.NEXT_PUBLIC_ENV === 'production' + +function getSignedUrlHost(isSerlo: boolean) { + return isSerlo && isSerloProduction ? 'editor.serlo.org' : 'editor.serlo.dev' +} const errorMessage = 'Error while uploading' diff --git a/packages/editor/src/plugins/image/utils/validate-file.ts b/packages/editor/src/plugins/image/utils/validate-file.ts index eaf6237432..535c65d2f2 100644 --- a/packages/editor/src/plugins/image/utils/validate-file.ts +++ b/packages/editor/src/plugins/image/utils/validate-file.ts @@ -1,4 +1,5 @@ import { showToastNotice } from '@editor/editor-ui/show-toast-notice' +import { EditStrings } from '@editor/types/language-data' export enum FileErrorCode { TOO_MANY_FILES, @@ -12,34 +13,63 @@ export interface FileError { errorCode: FileErrorCode message: string } -const maxFileSize = 2 * 1024 * 1024 -const allowedExtensions = ['gif', 'jpg', 'jpeg', 'png', 'svg', 'webp'] +const maxImageFileSize = 2 * 1024 * 1024 +const maxVideoFileSize = 16 * 1024 * 1024 +const allowedExtensions = [ + 'gif', + 'jpg', + 'jpeg', + 'png', + 'svg', + 'webp', + 'webm', + 'mp4', +] -export function validateFile(file: File) { - // TODO: i18n and make error messages actually helpful +export function validateFile( + file: File, + uploadStrings: EditStrings['edtrIo']['fileUpload'] +) { if (!file) { - handleError('No file selected') + handleError(uploadStrings.noFileSelected) return false } - if (!matchesAllowedExtensions(file.name)) { - handleError('Not an accepted file type') + + const extension = file.name + .toLowerCase() + .slice(file.name.lastIndexOf('.') + 1) + + if (!matchesAllowedExtensions(extension)) { + handleError( + uploadStrings.badExtension + .replace('%ext%', extension) + .replace('%allowed%', allowedExtensions.join(', ')) + ) return false } + const maxFileSize = file.type.startsWith('video/') + ? maxVideoFileSize + : maxImageFileSize + if (file.size > maxFileSize) { - handleError('File is too big') + handleError( + uploadStrings.fileTooBig.replace( + '%maxsize%', + String(maxFileSize / 1024 / 1024) + ) + ) return false } return true } -function matchesAllowedExtensions(fileName: string) { - const extension = fileName.toLowerCase().slice(fileName.lastIndexOf('.') + 1) +function matchesAllowedExtensions(extension: string) { return allowedExtensions.includes(extension) } export function handleError(message: string) { // eslint-disable-next-line no-console console.error(message) - showToastNotice(message, 'warning') + showToastNotice('⚠️ ' + message, 'warning') } diff --git a/packages/editor/src/plugins/input-exercise/renderer.tsx b/packages/editor/src/plugins/input-exercise/renderer.tsx index 2b336f58c2..fcbf681d02 100644 --- a/packages/editor/src/plugins/input-exercise/renderer.tsx +++ b/packages/editor/src/plugins/input-exercise/renderer.tsx @@ -22,7 +22,7 @@ interface InputExersiseRendererProps { export interface FeedbackData { correct: boolean - message: JSX.Element + customFeedback: JSX.Element | null } export function InputExerciseRenderer({ @@ -45,15 +45,12 @@ export function InputExerciseRenderer({ const answer = getMatchingAnswer(answers, value, type, mathjs.evaluate) const hasCorrectAnswer = !!answer?.isCorrect - const customFeedbackNode = answer?.feedback ?? null onEvaluate(hasCorrectAnswer, value) setFeedback({ correct: hasCorrectAnswer, - message: customFeedbackNode ?? ( - <>{exStrings[hasCorrectAnswer ? 'correct' : 'wrong']} - ), + customFeedback: answer?.feedback ?? null, }) } @@ -92,9 +89,10 @@ export function InputExerciseRenderer({ {exStrings.check} {feedback && value ? ( - - {feedback.message} - + ) : null}
diff --git a/packages/editor/src/plugins/interactive-video/editor.tsx b/packages/editor/src/plugins/interactive-video/editor.tsx index 6d96b64792..f259fb1ca9 100644 --- a/packages/editor/src/plugins/interactive-video/editor.tsx +++ b/packages/editor/src/plugins/interactive-video/editor.tsx @@ -1,17 +1,26 @@ -import { useAppSelector, selectStaticDocument } from '@editor/store' +import { isTempFile } from '@editor/plugin/upload' +import { + useAppSelector, + selectStaticDocument, + focus, + useAppDispatch, +} from '@editor/store' import { EditorInteractiveVideoDocument } from '@editor/types/editor-plugins' import { isVideoDocument } from '@editor/types/plugin-type-guards' -import { useState } from 'react' +import { useEffect, useRef, useState } from 'react' import { type InteractiveVideoProps } from '.' import { EditMode } from './editor/edit-mode' -import { SelectVideoMode } from './editor/select-video-mode' import { InteractiveVideoToolbar } from './toolbar' +import { isValidVideoUrl } from '../video/utils/is-valid-video-url' export function InteractiveVideoEditor(props: InteractiveVideoProps) { const { focused, state, id } = props const [previewActive, setPreviewActive] = useState(false) + const mounted = useRef(false) + const dispatch = useAppDispatch() + const staticDocument = useAppSelector( (storeState) => selectStaticDocument(storeState, id) as EditorInteractiveVideoDocument @@ -22,7 +31,17 @@ export function InteractiveVideoEditor(props: InteractiveVideoProps) { ? staticDocument.state.video.state.src : '' - const hasVideo = videoSrc.length > 0 + const hasVideo = !isTempFile(videoSrc) && isValidVideoUrl(videoSrc) + + // refocus after adding a video (but not on first mount) + useEffect(() => { + if (!mounted.current) { + if (!hasVideo) mounted.current = true + return + } + if (!hasVideo) return + dispatch(focus(id)) + }, [hasVideo, dispatch, id]) return ( <> @@ -42,7 +61,7 @@ export function InteractiveVideoEditor(props: InteractiveVideoProps) { staticMarks={staticMarks} /> ) : ( - + state.video.render() )} ) diff --git a/packages/editor/src/plugins/interactive-video/editor/edit-mode.tsx b/packages/editor/src/plugins/interactive-video/editor/edit-mode.tsx index db57bfbc9f..6f1c32b031 100644 --- a/packages/editor/src/plugins/interactive-video/editor/edit-mode.tsx +++ b/packages/editor/src/plugins/interactive-video/editor/edit-mode.tsx @@ -1,7 +1,6 @@ -import { focus } from '@editor/store' +import { focus, useAppDispatch } from '@editor/store' import { type EditorInteractiveVideoDocument } from '@editor/types/editor-plugins' import { useState } from 'react' -import { useDispatch } from 'react-redux' import { type InteractiveVideoProps } from '..' import { MarksList } from './marks-list' @@ -26,7 +25,7 @@ export function EditMode({ previewActive: boolean }) { const { marks } = state - const dispatch = useDispatch() + const dispatch = useAppDispatch() const learnerInteractions = useLearnerInteractions() const checkSeekAndPlay = useCheckSeekAndPlay({ diff --git a/packages/editor/src/plugins/interactive-video/editor/select-video-mode.tsx b/packages/editor/src/plugins/interactive-video/editor/select-video-mode.tsx deleted file mode 100644 index b62ecbfbca..0000000000 --- a/packages/editor/src/plugins/interactive-video/editor/select-video-mode.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { useEditStrings } from '@editor/i18n/edit-strings-provider' -import { parseVideoUrl } from '@editor/plugins/video/renderer' -import { runChangeDocumentSaga } from '@editor/store' -import { cn } from '@editor/utils/cn' -import { useEffect, useRef, useState } from 'react' -import { useDispatch } from 'react-redux' - -/** - * input for video src, should use (`video.render()`) in the future - * but for now UX is better this way - */ -export function SelectVideoMode({ - videoId, - staticVideoSrc, -}: { - videoId: string - staticVideoSrc: string -}) { - const inputRef = useRef(null) - const pluginsStrings = useEditStrings().plugins - const dispatch = useDispatch() - const [videoSrc, setVideoSrc] = useState(staticVideoSrc) - - useEffect(() => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const [_, type] = parseVideoUrl(videoSrc) - if (type === undefined) return - - dispatch( - runChangeDocumentSaga({ - id: videoId, - state: { initial: (curr) => ({ ...(curr as object), src: videoSrc }) }, - }) - ) - }, [videoSrc, videoId, dispatch]) - - useEffect(() => { - inputRef.current?.focus() - }, []) - - return ( -
- -
- ) -} diff --git a/packages/editor/src/plugins/interactive-video/helpers/use-learner-interactions.ts b/packages/editor/src/plugins/interactive-video/helpers/use-learner-interactions.ts index 3182170e74..59175dbcd1 100644 --- a/packages/editor/src/plugins/interactive-video/helpers/use-learner-interactions.ts +++ b/packages/editor/src/plugins/interactive-video/helpers/use-learner-interactions.ts @@ -4,7 +4,7 @@ import { } from '@editor/plugin/helpers/editor-learner-event' import { EditorInteractiveVideoDocument } from '@editor/types/editor-plugins' import { isExerciseDocument } from '@editor/types/plugin-type-guards' -import { useEffect, useState } from 'react' +import { useCallback, useEffect, useState } from 'react' export type LearnerInteractions = Map< string, @@ -20,8 +20,8 @@ export function useLearnerInteractions() { const empty = new Map() const [interactions, setInteractions] = useState(empty) - useEffect(() => { - function handleExerciseEvents(e: Event) { + const handleExerciseEvents = useCallback( + (e: Event) => { const { verb, pluginId, correct } = (e as CustomEvent) .detail if (verb !== 'answered' || !pluginId) return @@ -33,14 +33,16 @@ export function useLearnerInteractions() { const updated = new Map(interactions) updated.set(pluginId, entry) setInteractions(updated) - } + }, + [interactions] + ) + + useEffect(() => { document.addEventListener(editorLearnerEventName, handleExerciseEvents) return () => { document.removeEventListener(editorLearnerEventName, handleExerciseEvents) } - // only change on mount and unmount - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) + }, [handleExerciseEvents]) return interactions } diff --git a/packages/editor/src/plugins/interactive-video/renderer/renderer.tsx b/packages/editor/src/plugins/interactive-video/renderer/renderer.tsx index 68b404de98..0d251eb958 100644 --- a/packages/editor/src/plugins/interactive-video/renderer/renderer.tsx +++ b/packages/editor/src/plugins/interactive-video/renderer/renderer.tsx @@ -25,7 +25,6 @@ export function InteractiveVideoRenderer({ videoSrc, marks, tools, - isEditMode, checkSeekAndPlay, learnerInteractions, }: { @@ -50,8 +49,8 @@ export function InteractiveVideoRenderer({ src={videoSrc} playsInline className="[&_.vds-chapter-title]:opacity-0" - load={isSerlo ? 'eager' : isEditMode ? 'visible' : 'play'} - autoPlay={isSerlo ? true : false} // autoplay after wrapper + load={isSerlo ? 'eager' : 'visible'} + autoPlay={false} aspectRatio="16:9" onMediaPlayRequest={(nativeEvent) => { const allowed = checkSeekAndPlay?.(nativeEvent.target) diff --git a/packages/editor/src/plugins/interactive-video/toolbar.tsx b/packages/editor/src/plugins/interactive-video/toolbar.tsx index b89387d99c..d6ac294056 100644 --- a/packages/editor/src/plugins/interactive-video/toolbar.tsx +++ b/packages/editor/src/plugins/interactive-video/toolbar.tsx @@ -2,11 +2,10 @@ import { PluginToolbar, PreviewButton } from '@editor/editor-ui/plugin-toolbar' import { DropdownButton } from '@editor/editor-ui/plugin-toolbar/plugin-tool-menu/dropdown-button' import { PluginDefaultTools } from '@editor/editor-ui/plugin-toolbar/plugin-tool-menu/plugin-default-tools' import { useEditStrings } from '@editor/i18n/edit-strings-provider' -import { runChangeDocumentSaga } from '@editor/store' +import { runChangeDocumentSaga, useAppDispatch } from '@editor/store' import { EditorPluginType } from '@editor/types/editor-plugin-type' import { faArrowsRotate, faTrashAlt } from '@fortawesome/free-solid-svg-icons' import { type Dispatch, type SetStateAction } from 'react' -import { useDispatch } from 'react-redux' import type { InteractiveVideoProps } from '.' @@ -22,7 +21,7 @@ export const InteractiveVideoToolbar = ({ setPreviewActive: Dispatch> }) => { const interactiveVideoStrings = useEditStrings().plugins.interactiveVideo - const dispatch = useDispatch() + const dispatch = useAppDispatch() function handleOnChangeVideo() { dispatch( diff --git a/packages/editor/src/plugins/page-partners/editor.tsx b/packages/editor/src/plugins/page-partners/editor.tsx deleted file mode 100644 index 30f36c8c39..0000000000 --- a/packages/editor/src/plugins/page-partners/editor.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { PluginToolbar } from '@editor/editor-ui/plugin-toolbar' -import { PluginDefaultTools } from '@editor/editor-ui/plugin-toolbar/plugin-tool-menu/plugin-default-tools' -import { EditorPluginType } from '@editor/types/editor-plugin-type' - -import type { PagePartnersPluginProps } from '.' -import { PagePartnersRenderer } from './renderer' - -export const PagePartnersEditor: React.FunctionComponent< - PagePartnersPluginProps -> = (props) => { - const { id, focused } = props - - return ( - <> - {focused ? ( - } - /> - ) : null} - - - ) -} diff --git a/packages/editor/src/plugins/page-partners/index.tsx b/packages/editor/src/plugins/page-partners/index.tsx deleted file mode 100644 index f8d90698fa..0000000000 --- a/packages/editor/src/plugins/page-partners/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { - type EditorPlugin, - type EditorPluginProps, - object, -} from '@editor/plugin' - -import { PagePartnersEditor } from './editor' - -const pagePartnersState = object({}) -export type PagePartnersPluginState = typeof pagePartnersState -export type PagePartnersPluginProps = EditorPluginProps - -export const pagePartnersPlugin: EditorPlugin = { - Component: PagePartnersEditor, - state: pagePartnersState, - config: {}, -} diff --git a/packages/editor/src/plugins/page-partners/renderer.tsx b/packages/editor/src/plugins/page-partners/renderer.tsx deleted file mode 100644 index f6c1c9c2b5..0000000000 --- a/packages/editor/src/plugins/page-partners/renderer.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { cn } from '@editor/utils/cn' - -const partners = [ - { - name: 'Bundesministerium für Bildung und Forschung', - logo: '/_assets/img/landing/partners/logo_bmbf.svg', - padding: 0, - }, - { - name: 'Ludwig-Maximilians-Universität München', - logo: '/_assets/img/landing/partners/logo_lmu.svg', - padding: 8, - }, - { - name: 'Wikimedia Deutschland', - logo: '/_assets/img/landing/partners/logo_wikimedia.svg', - padding: 0, - }, - { - name: 'Beisheim Stiftung', - logo: '/_assets/img/landing/partners/logo_beisheimstiftung.svg', - padding: 10, - }, - { - name: 'Europäische Kommission', - logo: '/_assets/img/landing/partners/logo_eu.svg', - padding: 0, - }, - { - name: 'Deloitte', - logo: '/_assets/img/landing/partners/logo_deloitte.svg', - padding: 28, - }, - { - name: 'Technische Universität München', - logo: '/_assets/img/landing/partners/logo_tum.svg', - padding: 15, - }, - { - name: 'Ashoka Deutschland', - logo: '/_assets/img/landing/partners/logo_ashoka.svg', - padding: 6, - }, -] - -export function PagePartnersRenderer({ inContent }: { inContent?: boolean }) { - return ( -
- {partners.map(renderPartner)} -
- ) - - function renderPartner({ - name, - logo, - padding, - }: { - name: string - logo: string - padding: number - }) { - return ( - {`Logo - ) - } -} diff --git a/packages/editor/src/plugins/page-partners/static.tsx b/packages/editor/src/plugins/page-partners/static.tsx deleted file mode 100644 index 578629be8e..0000000000 --- a/packages/editor/src/plugins/page-partners/static.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { PagePartnersRenderer } from './renderer' - -export function PagePartnersStaticRenderer() { - return -} diff --git a/packages/editor/src/plugins/rows/utils/check-is-allowed-nesting.ts b/packages/editor/src/plugins/rows/utils/check-is-allowed-nesting.ts index c83e5714bf..17554ddcfe 100644 --- a/packages/editor/src/plugins/rows/utils/check-is-allowed-nesting.ts +++ b/packages/editor/src/plugins/rows/utils/check-is-allowed-nesting.ts @@ -18,18 +18,6 @@ export function checkIsAllowedNesting( const rootPluginType = typesOfAncestors.at(0) - // page specific plugins should only be allowed inside a page - // only for serlo.org - if ( - [EditorPluginType.PageLayout, EditorPluginType.PagePartners].includes( - pluginType as EditorPluginType - ) - ) { - if (rootPluginType !== TemplatePluginType.Page) { - return false - } - } - if (pluginType === EditorPluginType.Exercise) { // Restrict Exercise->Exercise nesting if ( diff --git a/packages/editor/src/plugins/rows/utils/plugin-menu.ts b/packages/editor/src/plugins/rows/utils/plugin-menu.ts index f03a4552d9..7db0c1cc5d 100644 --- a/packages/editor/src/plugins/rows/utils/plugin-menu.ts +++ b/packages/editor/src/plugins/rows/utils/plugin-menu.ts @@ -78,7 +78,6 @@ export const pluginMenuType = { InteractiveVideo: EditorPluginType.InteractiveVideo, Audio: EditorPluginType.Audio, PageLayout: EditorPluginType.PageLayout, - PagePartners: EditorPluginType.PagePartners, SingleChoiceExercise: 'singleChoiceExercise', MultipleChoiceExercise: 'multipleChoiceExercise', @@ -257,7 +256,6 @@ const iconLookup: Record = { [pluginMenuType.InteractiveVideo]: IconInteractiveVideo, [pluginMenuType.Audio]: IconAudio, [pluginMenuType.PageLayout]: IconFallback, - [pluginMenuType.PagePartners]: IconFallback, [pluginMenuType.EdusharingAsset]: IconImage, } @@ -290,7 +288,6 @@ const iconComponentLookup: Record = { [pluginMenuType.InteractiveVideo]: InteractiveVideoIcon, [pluginMenuType.Audio]: AudioIcon, [pluginMenuType.PageLayout]: FallbackIcon, - [pluginMenuType.PagePartners]: FallbackIcon, [pluginMenuType.EdusharingAsset]: ImageIcon, } diff --git a/packages/editor/src/plugins/sc-mc-exercise/renderer/feedback.tsx b/packages/editor/src/plugins/sc-mc-exercise/renderer/feedback.tsx deleted file mode 100644 index 9131eb46ed..0000000000 --- a/packages/editor/src/plugins/sc-mc-exercise/renderer/feedback.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { useStaticStrings } from '@editor/i18n/static-strings-provider' - -export interface FeedbackProps { - correct: boolean - children?: React.ReactNode - missedSome?: boolean -} - -export function Feedback({ children, correct, missedSome }: FeedbackProps) { - const exStrings = useStaticStrings().plugins.exercise - const fallbackString = - exStrings[correct ? 'correct' : missedSome ? 'missedSome' : 'wrong'] - - return ( -
- - {correct ? '🎉' : '✋'} - {' '} -
- {children ? ( - <> - {missedSome && exStrings.missedSome} {children} - - ) : ( - fallbackString - )} -
-
- ) -} diff --git a/packages/editor/src/plugins/sc-mc-exercise/renderer/sc-renderer.tsx b/packages/editor/src/plugins/sc-mc-exercise/renderer/sc-renderer.tsx index e0b01b4b60..64320310b3 100644 --- a/packages/editor/src/plugins/sc-mc-exercise/renderer/sc-renderer.tsx +++ b/packages/editor/src/plugins/sc-mc-exercise/renderer/sc-renderer.tsx @@ -95,9 +95,10 @@ export function ScRenderer({ : exStrings.chooseOption} {showFeedback && selected !== undefined && answers[selected] ? ( - - {answers[selected].feedback} - + ) : null}
diff --git a/packages/editor/src/plugins/serlo-template-plugins/video.tsx b/packages/editor/src/plugins/serlo-template-plugins/video.tsx index 4f6084a4f1..83a004abd2 100644 --- a/packages/editor/src/plugins/serlo-template-plugins/video.tsx +++ b/packages/editor/src/plugins/serlo-template-plugins/video.tsx @@ -2,6 +2,7 @@ import { type EditorPlugin, type EditorPluginProps, string, + upload, } from '@editor/plugin' import { videoPlugin } from '@editor/plugins/video' @@ -11,7 +12,7 @@ import { EntityTitleInput } from './common/entity-title-input' export const videoTypeState = entityType( { ...entity, - content: string(), + content: upload(''), title: string(), description: editorContent(), }, diff --git a/packages/editor/src/plugins/solution/serlo-license-chooser.tsx b/packages/editor/src/plugins/solution/serlo-license-chooser.tsx index 6fbe63370d..4d87ec0400 100644 --- a/packages/editor/src/plugins/solution/serlo-license-chooser.tsx +++ b/packages/editor/src/plugins/solution/serlo-license-chooser.tsx @@ -1,9 +1,9 @@ +import { SerloOnlyFeaturesContext } from '@editor/core/contexts/serlo-only-features-context' import { EditorModal } from '@editor/editor-ui/editor-modal' import { EditorTooltip } from '@editor/editor-ui/editor-tooltip' import { FaIcon } from '@editor/editor-ui/fa-icon' import { useEditStrings } from '@editor/i18n/edit-strings-provider' import { cn } from '@editor/utils/cn' -import { SerloOnlyFeaturesContext } from '@editor/utils/serlo-extra-context' import { faCreativeCommons } from '@fortawesome/free-brands-svg-icons' import { useContext, useState } from 'react' diff --git a/packages/editor/src/plugins/text/hooks/use-editable-key-down-handler.tsx b/packages/editor/src/plugins/text/hooks/use-editable-key-down-handler.tsx index fe623f297f..b3d990d654 100644 --- a/packages/editor/src/plugins/text/hooks/use-editable-key-down-handler.tsx +++ b/packages/editor/src/plugins/text/hooks/use-editable-key-down-handler.tsx @@ -11,7 +11,9 @@ import { selectChildTreeOfParent, useStore, useAppDispatch, + selectParentPluginType, } from '@editor/store' +import { EditorPluginType } from '@editor/types/editor-plugin-type' import isHotkey from 'is-hotkey' import { useCallback, useContext } from 'react' import { Editor as SlateEditor, Range, Node, Transforms } from 'slate' @@ -59,9 +61,15 @@ export const useEditableKeydownHandler = ( const { path } = selection.focus const node = Node.get(editor, path) + const parentType = selectParentPluginType(store.getState(), id) const parent = selectChildTreeOfParent(store.getState(), id) - if (Object.hasOwn(node, 'text') && node.text.length === 0 && parent) { + if ( + parentType === EditorPluginType.Rows && + Object.hasOwn(node, 'text') && + node.text.length === 0 && + parent + ) { const currentIndex = parent.children?.findIndex( (child) => child.id === id ) diff --git a/packages/editor/src/plugins/text/utils/static-extract-text.ts b/packages/editor/src/plugins/text/utils/static-extract-text.ts index a5e70160b8..7d68052770 100644 --- a/packages/editor/src/plugins/text/utils/static-extract-text.ts +++ b/packages/editor/src/plugins/text/utils/static-extract-text.ts @@ -2,7 +2,7 @@ import { AnyEditorDocument } from '@editor/types/editor-plugins' import { isTextDocument } from '@editor/types/plugin-type-guards' import type { Descendant } from 'slate' -export function extractDescendant(node: Descendant): string { +function extractDescendant(node: Descendant): string { if (Object.hasOwn(node, 'type') && Object.hasOwn(node, 'children')) { return node.children.map(extractDescendant).join(' ') } diff --git a/packages/editor/src/plugins/video/components/upload-button.tsx b/packages/editor/src/plugins/video/components/upload-button.tsx new file mode 100644 index 0000000000..503f4cd986 --- /dev/null +++ b/packages/editor/src/plugins/video/components/upload-button.tsx @@ -0,0 +1,85 @@ +import { EditorTooltip } from '@editor/editor-ui/editor-tooltip' +import { FaIcon } from '@editor/editor-ui/fa-icon' +import { useEditStrings } from '@editor/i18n/edit-strings-provider' +import { TempFile, isTempFile } from '@editor/plugin' +import { useUploadFile } from '@editor/plugins/image/utils/upload-file' +import { cn } from '@editor/utils/cn' +import { + faArrowUpFromBracket, + faRedoAlt, +} from '@fortawesome/free-solid-svg-icons' +import { useState } from 'react' + +import type { VideoProps } from '..' + +interface UploadButtonProps { + src: VideoProps['state']['src'] + onFocus?: () => void + onBlur?: () => void +} + +export function UploadButton({ src, onFocus, onBlur }: UploadButtonProps) { + const uploadStrings = useEditStrings().edtrIo.fileUpload + const videoStrings = useEditStrings().plugins.video + const isFailed = isTempFile(src.value) && src.value.failed + + const upload = useUploadFile() + + const [isLabelFocused, setIsLabelFocused] = useState(false) + if (!upload) return null + + return ( + <> + + + (webm | mp4 | max. 16MB) + + + {isFailed ? ( + + ) : null} + + ) +} diff --git a/packages/editor/src/plugins/video/components/video-selection-screen.tsx b/packages/editor/src/plugins/video/components/video-selection-screen.tsx new file mode 100644 index 0000000000..557fde8659 --- /dev/null +++ b/packages/editor/src/plugins/video/components/video-selection-screen.tsx @@ -0,0 +1,82 @@ +import { EditorTooltip } from '@editor/editor-ui/editor-tooltip' +import { useEditStrings } from '@editor/i18n/edit-strings-provider' +import { isTempFile } from '@editor/plugin' +import { cn } from '@editor/utils/cn' +import React, { type RefObject } from 'react' + +import type { VideoProps } from '..' +import { UploadButton } from './upload-button' +import { isValidVideoUrl } from '../utils/is-valid-video-url' + +interface VideoSelectionScreenProps { + state: VideoProps['state'] + urlInputRef: RefObject + pluginId: string +} + +export function VideoSelectionScreen({ + state, + urlInputRef, + pluginId, +}: VideoSelectionScreenProps) { + const editorStrings = useEditStrings() + const { src } = state + + const uploadStrings = editorStrings.edtrIo.fileUpload + const videoStrings = editorStrings.plugins.video + + const placeholder = !isTempFile(src.value) + ? videoStrings.placeholderEmpty + : !src.value.failed + ? uploadStrings.placeholderUploading + : uploadStrings.placeholderFailed + + const videoUrl = src.value + + const isValid = isValidVideoUrl(isTempFile(videoUrl) ? '' : videoUrl) + const showErrorMessage = (videoUrl as string).length > 5 && !isValid + + return ( +
+
+ +
+ state.src.set(e.target.value)} + className={cn( + 'w-full rounded-lg border-0 bg-yellow-100 px-4 py-2 text-gray-600', + showErrorMessage && 'outline outline-1 outline-red-500' + )} + data-qa="plugin-video-src" + /> + {showErrorMessage && ( + <> + + {uploadStrings.invalidUrl} + + + + )} +
+ + +
+
+ ) +} diff --git a/packages/editor/src/plugins/video/editor.tsx b/packages/editor/src/plugins/video/editor.tsx index 9837e00c84..3406de51ee 100644 --- a/packages/editor/src/plugins/video/editor.tsx +++ b/packages/editor/src/plugins/video/editor.tsx @@ -1,28 +1,33 @@ import { EmbedWrapper } from '@editor/editor-ui/embed-wrapper' -import { FaIcon } from '@editor/editor-ui/fa-icon' -import { faPlayCircle } from '@fortawesome/free-solid-svg-icons' -import { useState } from 'react' +import { isTempFile } from '@editor/plugin' +import { useRef, useState } from 'react' import type { VideoProps } from '.' -import { parseVideoUrl, VideoRenderer } from './renderer' +import { VideoSelectionScreen } from './components/video-selection-screen' +import { VideoRenderer } from './renderer' import { VideoToolbar } from './toolbar' - -export type SettingsModalState = 'url' | 'description' | false +import { parseVideoUrl } from './utils/parse-video-url' export const VideoEditor = (props: VideoProps) => { const { focused, state } = props - const [showSettingsModal, setShowSettingsModal] = - useState(false) - const [iframeSrc, type] = parseVideoUrl(state.src.value) + const [showSettingsModal, setShowSettingsModal] = useState(false) + + const [iframeSrc, type] = parseVideoUrl( + isTempFile(state.src.value) ? '' : state.src.value + ) const couldBeValid = type !== undefined + const urlInputRef = useRef(null) + return ( <> {focused && ( state.src.set('')} /> )} {couldBeValid ? ( @@ -35,16 +40,11 @@ export const VideoEditor = (props: VideoProps) => { ) : ( -
setShowSettingsModal('url')} - > - -
+ )} ) diff --git a/packages/editor/src/plugins/video/index.ts b/packages/editor/src/plugins/video/index.ts index f25f70bf1e..af11b45856 100644 --- a/packages/editor/src/plugins/video/index.ts +++ b/packages/editor/src/plugins/video/index.ts @@ -1,13 +1,14 @@ import { VideoEditor } from './editor' -import { parseVideoUrl } from './renderer' import { type EditorPlugin, type EditorPluginProps, object, string, + upload, } from '../../plugin' +import { isValidVideoUrl } from './utils/is-valid-video-url' -const videoState = object({ src: string(), alt: string() }) +const videoState = object({ src: upload(''), alt: string() }) export type VideoProps = EditorPluginProps export type VideoPluginState = typeof videoState @@ -17,8 +18,6 @@ export const videoPlugin: EditorPlugin = { config: {}, state: videoState, onText(value) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const [src, type] = parseVideoUrl(value) - if (type) return { state: { src: value, alt: '' } } + if (isValidVideoUrl(value)) return { state: { src: value, alt: '' } } }, } diff --git a/packages/editor/src/plugins/video/renderer.tsx b/packages/editor/src/plugins/video/renderer.tsx index c7700c216c..625b290277 100644 --- a/packages/editor/src/plugins/video/renderer.tsx +++ b/packages/editor/src/plugins/video/renderer.tsx @@ -46,35 +46,3 @@ export function VideoRenderer({ src, type }: VideoRendererProps) { } const videoClassName = cn(`h-full w-full border-none bg-black/30`) - -export function parseVideoUrl( - inputSrc: string, - lang?: string -): [string, VideoType | undefined] { - const videoRegex = /^(https?:\/\/)?(.*?vimeo\.com\/)(.+)/ - const vimeo = videoRegex.exec(inputSrc) - if (vimeo) - return [ - `https://player.vimeo.com/video/${vimeo[3]}?autoplay=1`, - VideoType.Vimeo, - ] - const serloAssetRegex = - /^(https:\/\/assets\.serlo\.org\/wikimedia\/)(.+)(webm)$/ - const serloAsset = serloAssetRegex.exec(inputSrc) - if (serloAsset) return [inputSrc, VideoType.SerloAsset] - - const youtubeRegex = - /^(https?:\/\/)?(.*?youtube\.com\/watch\?(.*&)?v=|.*?youtu\.be\/)([a-zA-Z0-9_-]{11})/ - const youtube = youtubeRegex.exec(inputSrc) - if (youtube) { - const videoId = encodeURIComponent(youtube[4]) - const url = new URL(inputSrc) - const timestamp = parseInt(url.searchParams.get('t') ?? '') - const useSubtitles = url.search.includes('cc_load_policy=1') - const iframeSrc = `https://www.youtube-nocookie.com/embed/${videoId}?autoplay=1&html5=1${ - useSubtitles ? `&cc_lang_pref=${lang ?? 'de'}&cc_load_policy=1` : '' - }${isNaN(timestamp) ? '' : `&start=${timestamp}`}` - return [iframeSrc, VideoType.YouTube] - } - return [inputSrc, undefined] -} diff --git a/packages/editor/src/plugins/video/static.tsx b/packages/editor/src/plugins/video/static.tsx index ce8df948b6..7b1cdbd40c 100644 --- a/packages/editor/src/plugins/video/static.tsx +++ b/packages/editor/src/plugins/video/static.tsx @@ -1,11 +1,13 @@ import { useStaticStrings } from '@editor/i18n/static-strings-provider' -import { parseVideoUrl, VideoRenderer } from '@editor/plugins/video/renderer' +import { VideoRenderer } from '@editor/plugins/video/renderer' import { EditorVideoDocument } from '@editor/types/editor-plugins' +import { parseVideoUrl } from './utils/parse-video-url' + export function VideoStaticRenderer({ state: { src } }: EditorVideoDocument) { const { lang } = useStaticStrings() - const [iframeSrc, type] = parseVideoUrl(src, lang) + const [iframeSrc, type] = parseVideoUrl(src as string, lang) if (!type || !iframeSrc) return null return diff --git a/packages/editor/src/plugins/video/toolbar.tsx b/packages/editor/src/plugins/video/toolbar.tsx index c69419241d..107c22e810 100644 --- a/packages/editor/src/plugins/video/toolbar.tsx +++ b/packages/editor/src/plugins/video/toolbar.tsx @@ -3,80 +3,86 @@ import { FaIcon } from '@editor/editor-ui/fa-icon' import { PluginToolbar } from '@editor/editor-ui/plugin-toolbar' import { PluginDefaultTools } from '@editor/editor-ui/plugin-toolbar/plugin-tool-menu/plugin-default-tools' import { useEditStrings } from '@editor/i18n/edit-strings-provider' +import { isTempFile } from '@editor/plugin' import { EditorPluginType } from '@editor/types/editor-plugin-type' -import { faPencilAlt } from '@fortawesome/free-solid-svg-icons' -import { Dispatch, SetStateAction } from 'react' +import { faPencilAlt, faSyncAlt } from '@fortawesome/free-solid-svg-icons' import type { VideoProps } from '.' -import type { SettingsModalState } from './editor' import { EditorInput } from '../../editor-ui' export const VideoToolbar = ({ id, state, + showSettingsButtons, showSettingsModal, setShowSettingsModal, + onChangeVideoButtonClick, }: VideoProps & { - showSettingsModal: SettingsModalState - setShowSettingsModal: Dispatch> + showSettingsButtons: boolean + showSettingsModal: boolean + setShowSettingsModal: (show: boolean) => void + onChangeVideoButtonClick: () => void }) => { const videoStrings = useEditStrings().plugins.video return ( - - - { - if (!open) setShowSettingsModal(false) - }} - className="top-8 max-w-xl translate-y-0 sm:top-24" - title={videoStrings.title} - extraTitleClassName="serlo-h3 mt-4" - > -
- { - state.src.set(e.target.value) - }} - inputWidth="100%" - width="100%" - placeholder="(YouTube, Vimeo)" - className="block" - /> -
-
- state.alt.set(e.target.value)} - width="100%" - inputWidth="100%" - className="block" - /> -
-
- - } + pluginSettings={showSettingsButtons ? renderPluginSettings() : undefined} pluginControls={} /> ) + + function renderPluginSettings() { + return ( + <> + + + { + if (!open) setShowSettingsModal(false) + }} + className="top-8 max-w-xl translate-y-0 sm:top-24" + title={videoStrings.title} + extraTitleClassName="serlo-h3 mt-4" + > +
+ { + state.src.set(e.target.value) + }} + inputWidth="100%" + width="100%" + placeholder="(YouTube, Vimeo)" + className="block" + /> +
+
+ state.alt.set(e.target.value)} + width="100%" + inputWidth="100%" + className="block" + /> +
+
+ + ) + } } diff --git a/packages/editor/src/plugins/video/utils/is-valid-video-url.ts b/packages/editor/src/plugins/video/utils/is-valid-video-url.ts new file mode 100644 index 0000000000..5e6554cebd --- /dev/null +++ b/packages/editor/src/plugins/video/utils/is-valid-video-url.ts @@ -0,0 +1,6 @@ +import { parseVideoUrl } from './parse-video-url' + +export function isValidVideoUrl(inputSrc: string) { + const [, type] = parseVideoUrl(inputSrc) + return type !== undefined +} diff --git a/packages/editor/src/plugins/video/utils/parse-video-url.ts b/packages/editor/src/plugins/video/utils/parse-video-url.ts new file mode 100644 index 0000000000..cc0d473564 --- /dev/null +++ b/packages/editor/src/plugins/video/utils/parse-video-url.ts @@ -0,0 +1,41 @@ +import { VideoType } from '../renderer' + +export function parseVideoUrl( + inputSrc: string, + lang?: string +): [string, VideoType | undefined] { + const youtubeRegex = + /^(https?:\/\/)?(.*?youtube\.com\/watch\?(.*&)?v=|.*?youtu\.be\/)([a-zA-Z0-9_-]{11})/ + const youtube = youtubeRegex.exec(inputSrc) + if (youtube) { + const videoId = encodeURIComponent(youtube[4]) + const url = new URL(inputSrc) + const timestamp = parseInt(url.searchParams.get('t') ?? '') + const useSubtitles = url.search.includes('cc_load_policy=1') + const iframeSrc = `https://www.youtube-nocookie.com/embed/${videoId}?autoplay=1&html5=1${ + useSubtitles ? `&cc_lang_pref=${lang ?? 'de'}&cc_load_policy=1` : '' + }${isNaN(timestamp) ? '' : `&start=${timestamp}`}` + return [iframeSrc, VideoType.YouTube] + } + + if ( + inputSrc.startsWith('https://assets.serlo.org/wikimedia/') || + inputSrc.startsWith('https://editor.serlo.dev/media/') || + inputSrc.startsWith('https://editor.serlo-staging.dev/media/') || + inputSrc.startsWith('https://editor.serlo.org/media/') + ) { + if (inputSrc.endsWith('video.webm') || inputSrc.endsWith('video.mp4')) { + return [inputSrc, VideoType.SerloAsset] + } + } + + const videoRegex = /^(https?:\/\/)?(.*?vimeo\.com\/)(.+)/ + const vimeo = videoRegex.exec(inputSrc) + if (vimeo) + return [ + `https://player.vimeo.com/video/${vimeo[3]}?autoplay=1`, + VideoType.Vimeo, + ] + + return [inputSrc, undefined] +} diff --git a/packages/editor/src/static-renderer/static-renderer.tsx b/packages/editor/src/static-renderer/static-renderer.tsx index 0066152605..63e405f71c 100644 --- a/packages/editor/src/static-renderer/static-renderer.tsx +++ b/packages/editor/src/static-renderer/static-renderer.tsx @@ -1,5 +1,5 @@ import type { AnyEditorDocument } from '@editor/types/editor-plugins' -import { Fragment } from 'react' +import { Fragment, Suspense } from 'react' import { editorRenderers } from '../plugin/helpers/editor-renderer' @@ -34,5 +34,9 @@ export function StaticRenderer({ const Renderer = editorRenderers.getByType(document.plugin) - return Renderer ? : null + return Renderer ? ( + + + + ) : null } diff --git a/packages/editor/src/tailwind/editor.css b/packages/editor/src/tailwind/editor.css index 51567d2d19..56f2fb3f14 100644 --- a/packages/editor/src/tailwind/editor.css +++ b/packages/editor/src/tailwind/editor.css @@ -7,7 +7,7 @@ * Reset all styles outside of the editor (trying to prevent style collisions) */ @layer base { - .editor-core { + .serlo-editor-style-reset { all: initial; display: block; diff --git a/packages/editor/src/types/editor-plugin-type.ts b/packages/editor/src/types/editor-plugin-type.ts index cfce44c59f..ac3f751085 100644 --- a/packages/editor/src/types/editor-plugin-type.ts +++ b/packages/editor/src/types/editor-plugin-type.ts @@ -16,7 +16,6 @@ export enum EditorPluginType { Multimedia = 'multimedia', PageLayout = 'pageLayout', - PagePartners = 'pagePartners', PasteHack = 'pasteHack', Rows = 'rows', diff --git a/packages/editor/src/types/editor-plugins.ts b/packages/editor/src/types/editor-plugins.ts index 627017363c..6f920bf09a 100644 --- a/packages/editor/src/types/editor-plugins.ts +++ b/packages/editor/src/types/editor-plugins.ts @@ -19,7 +19,6 @@ import type { InputExercisePluginState } from '@editor/plugins/input-exercise' import type { InteractiveVideoPluginState } from '@editor/plugins/interactive-video' import type { MultimediaPluginState } from '@editor/plugins/multimedia' import type { PageLayoutPluginState } from '@editor/plugins/page-layout' -import type { PagePartnersPluginState } from '@editor/plugins/page-partners' import type { RowsPluginState } from '@editor/plugins/rows' import type { ScMcExercisePluginState } from '@editor/plugins/sc-mc-exercise' import type { SerloInjectionPluginState } from '@editor/plugins/serlo-injection' @@ -200,7 +199,7 @@ export interface EditorTextDocument { } export interface EditorVideoDocument { plugin: EditorPluginType.Video - state: PrettyStaticState + state: PrettyStaticState & { src: string } id?: string } export interface EditorAudioDocument { @@ -213,11 +212,6 @@ export interface EditorPageLayoutDocument { state: PrettyStaticState id?: string } -export interface EditorPagePartnersDocument { - plugin: EditorPluginType.PagePartners - state: PrettyStaticState - id?: string -} export interface EditorExerciseGroupDocument { plugin: EditorPluginType.ExerciseGroup @@ -282,7 +276,6 @@ export type SupportedEditorDocument = | EditorEquationsDocument | EditorExerciseDocument | EditorPageLayoutDocument - | EditorPagePartnersDocument | EditorEdusharingAssetDocument | EditorSerloInjectionDocument diff --git a/packages/editor/src/types/plugin-type-guards.ts b/packages/editor/src/types/plugin-type-guards.ts index b22132853b..94d0dec30c 100644 --- a/packages/editor/src/types/plugin-type-guards.ts +++ b/packages/editor/src/types/plugin-type-guards.ts @@ -15,7 +15,6 @@ import type { EditorInputExerciseDocument, EditorMultimediaDocument, EditorPageLayoutDocument, - EditorPagePartnersDocument, EditorRowsDocument, EditorScMcExerciseDocument, EditorSerloInjectionDocument, @@ -164,11 +163,6 @@ export function isPageLayoutDocument( ): document is EditorPageLayoutDocument { return document.plugin === EditorPluginType.PageLayout } -export function isPagePartnersDocument( - document: AnyEditorDocument -): document is EditorPagePartnersDocument { - return document.plugin === EditorPluginType.PagePartners -} export function isTemplateExerciseGroupDocument( document: AnyEditorDocument ): document is EditorTemplateExerciseGroupDocument { diff --git a/packages/editor/vite.config.ts b/packages/editor/vite.config.ts index c8268e215e..ed57eee4a8 100644 --- a/packages/editor/vite.config.ts +++ b/packages/editor/vite.config.ts @@ -4,6 +4,7 @@ import { defineConfig } from 'vite' import dts from 'vite-plugin-dts' import svgr from 'vite-plugin-svgr' import replace from '@rollup/plugin-replace' +import treeShakeable from 'rollup-plugin-tree-shakeable' // https://vitejs.dev/guide/build.html#library-mode diff --git a/packages/eslint-config/editor.js b/packages/eslint-config/editor.js index 5c174946f1..b673755c98 100644 --- a/packages/eslint-config/editor.js +++ b/packages/eslint-config/editor.js @@ -53,6 +53,7 @@ module.exports = { rules: { // eslint 'no-duplicate-imports': 'error', + 'no-restricted-imports': ['error', '@editor/package'], 'no-console': 'warn', 'no-warning-comments': 'warn', eqeqeq: ['error', 'always'], diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js index 6a0580492f..0f1bf01eef 100644 --- a/packages/eslint-config/next.js +++ b/packages/eslint-config/next.js @@ -17,7 +17,6 @@ module.exports = { }, env: { node: true, - jest: true, //! }, plugins: ['@typescript-eslint', 'import', 'react-hooks'], settings: { @@ -40,7 +39,6 @@ module.exports = { 'node_modules/', 'tailwind.config.js', 'next.config.js', - 'jest.config.js', 'prettier.config.js', ], overrides: [ diff --git a/yarn.lock b/yarn.lock index 678cf3d44f..edc4fb841f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -67,7 +67,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5": version: 7.23.5 resolution: "@babel/code-frame@npm:7.23.5" dependencies: @@ -77,16 +77,6 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/code-frame@npm:7.24.7" - dependencies: - "@babel/highlight": ^7.24.7 - picocolors: ^1.0.0 - checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4 - languageName: node - linkType: hard - "@babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0": version: 7.26.2 resolution: "@babel/code-frame@npm:7.26.2" @@ -105,13 +95,6 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.25.2": - version: 7.25.4 - resolution: "@babel/compat-data@npm:7.25.4" - checksum: b12a91d27c3731a4b0bdc9312a50b1911f41f7f728aaf0d4b32486e2257fd2cb2d3ea1a295e98449600c48f2c7883a3196ca77cda1cef7d97a10c2e83d037974 - languageName: node - linkType: hard - "@babel/compat-data@npm:^7.25.9": version: 7.26.2 resolution: "@babel/compat-data@npm:7.26.2" @@ -119,30 +102,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.23.9": - version: 7.25.2 - resolution: "@babel/core@npm:7.25.2" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.25.0 - "@babel/helper-compilation-targets": ^7.25.2 - "@babel/helper-module-transforms": ^7.25.2 - "@babel/helpers": ^7.25.0 - "@babel/parser": ^7.25.0 - "@babel/template": ^7.25.0 - "@babel/traverse": ^7.25.2 - "@babel/types": ^7.25.2 - convert-source-map: ^2.0.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.3 - semver: ^6.3.1 - checksum: 9a1ef604a7eb62195f70f9370cec45472a08114e3934e3eaaedee8fd754edf0730e62347c7b4b5e67d743ce57b5bb8cf3b92459482ca94d06e06246ef021390a - languageName: node - linkType: hard - -"@babel/core@npm:^7.12.3, @babel/core@npm:^7.14.0, @babel/core@npm:^7.21.3, @babel/core@npm:^7.22.9": +"@babel/core@npm:^7.14.0, @babel/core@npm:^7.21.3, @babel/core@npm:^7.22.9": version: 7.23.6 resolution: "@babel/core@npm:7.23.6" dependencies: @@ -188,7 +148,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.23.6, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.23.6": version: 7.23.6 resolution: "@babel/generator@npm:7.23.6" dependencies: @@ -200,18 +160,6 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/generator@npm:7.25.6" - dependencies: - "@babel/types": ^7.25.6 - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.25 - jsesc: ^2.5.1 - checksum: b55975cd664f5602304d868bb34f4ee3bed6f5c7ce8132cd92ff27a46a53a119def28a182d91992e86f75db904f63094a81247703c4dc96e4db0c03fd04bcd68 - languageName: node - linkType: hard - "@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.26.0": version: 7.26.2 resolution: "@babel/generator@npm:7.26.2" @@ -256,19 +204,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-compilation-targets@npm:7.25.2" - dependencies: - "@babel/compat-data": ^7.25.2 - "@babel/helper-validator-option": ^7.24.8 - browserslist: ^4.23.1 - lru-cache: ^5.1.1 - semver: ^6.3.1 - checksum: aed33c5496cb9db4b5e2d44e26bf8bc474074cc7f7bb5ebe1d4a20fdeb362cb3ba9e1596ca18c7484bcd6e5c3a155ab975e420d520c0ae60df81f9de04d0fd16 - languageName: node - linkType: hard - "@babel/helper-compilation-targets@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-compilation-targets@npm:7.25.9" @@ -373,16 +308,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-imports@npm:7.24.7" - dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054 - languageName: node - linkType: hard - "@babel/helper-module-imports@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-module-imports@npm:7.25.9" @@ -408,20 +333,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-module-transforms@npm:7.25.2" - dependencies: - "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-simple-access": ^7.24.7 - "@babel/helper-validator-identifier": ^7.24.7 - "@babel/traverse": ^7.25.2 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 282d4e3308df6746289e46e9c39a0870819630af5f84d632559171e4fae6045684d771a65f62df3d569e88ccf81dc2def78b8338a449ae3a94bb421aa14fc367 - languageName: node - linkType: hard - "@babel/helper-module-transforms@npm:^7.26.0": version: 7.26.0 resolution: "@babel/helper-module-transforms@npm:7.26.0" @@ -451,13 +362,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.24.7": - version: 7.24.8 - resolution: "@babel/helper-plugin-utils@npm:7.24.8" - checksum: 73b1a83ba8bcee21dc94de2eb7323207391715e4369fd55844bb15cf13e3df6f3d13a40786d990e6370bf0f571d94fc31f70dec96c1d1002058258c35ca3767a - languageName: node - linkType: hard - "@babel/helper-plugin-utils@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-plugin-utils@npm:7.25.9" @@ -500,16 +404,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-simple-access@npm:7.24.7" - dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: ddbf55f9dea1900213f2a1a8500fabfd21c5a20f44dcfa957e4b0d8638c730f88751c77f678644f754f1a1dc73f4eb8b766c300deb45a9daad000e4247957819 - languageName: node - linkType: hard - "@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" @@ -535,13 +429,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-string-parser@npm:7.24.8" - checksum: 39b03c5119216883878655b149148dc4d2e284791e969b19467a9411fccaa33f7a713add98f4db5ed519535f70ad273cdadfd2eb54d47ebbdeac5083351328ce - languageName: node - linkType: hard - "@babel/helper-string-parser@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-string-parser@npm:7.25.9" @@ -556,13 +443,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-identifier@npm:7.24.7" - checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257 - languageName: node - linkType: hard - "@babel/helper-validator-identifier@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-identifier@npm:7.25.9" @@ -577,13 +457,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-validator-option@npm:7.24.8" - checksum: a52442dfa74be6719c0608fee3225bd0493c4057459f3014681ea1a4643cd38b68ff477fe867c4b356da7330d085f247f0724d300582fa4ab9a02efaf34d107c - languageName: node - linkType: hard - "@babel/helper-validator-option@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-option@npm:7.25.9" @@ -613,16 +486,6 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.25.0": - version: 7.25.6 - resolution: "@babel/helpers@npm:7.25.6" - dependencies: - "@babel/template": ^7.25.0 - "@babel/types": ^7.25.6 - checksum: 5a548999db82049a5f7ac6de57576b4ed0d386ce07d058151698836ed411eae6230db12535487caeebb68a2ffc964491e8aead62364a5132ab0ae20e8b68e19f - languageName: node - linkType: hard - "@babel/helpers@npm:^7.26.0": version: 7.26.0 resolution: "@babel/helpers@npm:7.26.0" @@ -644,19 +507,7 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" - dependencies: - "@babel/helper-validator-identifier": ^7.24.7 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - picocolors: ^1.0.0 - checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.6": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.6": version: 7.23.6 resolution: "@babel/parser@npm:7.23.6" bin: @@ -665,17 +516,6 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/parser@npm:7.25.6" - dependencies: - "@babel/types": ^7.25.6 - bin: - parser: ./bin/babel-parser.js - checksum: 85b237ded09ee43cc984493c35f3b1ff8a83e8dbbb8026b8132e692db6567acc5a1659ec928e4baa25499ddd840d7dae9dee3062be7108fe23ec5f94a8066b1e - languageName: node - linkType: hard - "@babel/parser@npm:^7.24.0": version: 7.24.4 resolution: "@babel/parser@npm:7.24.4" @@ -779,18 +619,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -867,7 +696,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -900,18 +729,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7a5ca629d8ca1e1ee78705a78e58c12920d07ed8006d7e7232b31296a384ff5e41d7b649bde5561196041037bbb9f9715be1d1c20975df87ca204f34ad15b965 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -933,7 +751,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -988,7 +806,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -999,7 +817,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.23.3, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" dependencies: @@ -1869,7 +1687,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.22.15": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" dependencies: @@ -1891,17 +1709,6 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/template@npm:7.25.0" - dependencies: - "@babel/code-frame": ^7.24.7 - "@babel/parser": ^7.25.0 - "@babel/types": ^7.25.0 - checksum: 3f2db568718756d0daf2a16927b78f00c425046b654cd30b450006f2e84bdccaf0cbe6dc04994aa1f5f6a4398da2f11f3640a4d3ee31722e43539c4c919c817b - languageName: node - linkType: hard - "@babel/template@npm:^7.25.9": version: 7.25.9 resolution: "@babel/template@npm:7.25.9" @@ -1931,21 +1738,6 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.25.2": - version: 7.25.6 - resolution: "@babel/traverse@npm:7.25.6" - dependencies: - "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.25.6 - "@babel/parser": ^7.25.6 - "@babel/template": ^7.25.0 - "@babel/types": ^7.25.6 - debug: ^4.3.1 - globals: ^11.1.0 - checksum: 11ee47269aa4356f2d6633a05b9af73405b5ed72c09378daf644289b686ef852035a6ac9aa410f601991993c6bbf72006795b5478283b78eb1ca77874ada7737 - languageName: node - linkType: hard - "@babel/traverse@npm:^7.25.9": version: 7.25.9 resolution: "@babel/traverse@npm:7.25.9" @@ -1961,7 +1753,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.23.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.23.6, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.23.6 resolution: "@babel/types@npm:7.23.6" dependencies: @@ -1983,17 +1775,6 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.24.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/types@npm:7.25.6" - dependencies: - "@babel/helper-string-parser": ^7.24.8 - "@babel/helper-validator-identifier": ^7.24.7 - to-fast-properties: ^2.0.0 - checksum: 9b2f84ff3f874ad05b0b9bf06862c56f478b65781801f82296b4cc01bee39e79c20a7c0a06959fed0ee582c8267e1cb21638318655c5e070b0287242a844d1c9 - languageName: node - linkType: hard - "@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0": version: 7.26.0 resolution: "@babel/types@npm:7.26.0" @@ -2004,13 +1785,6 @@ __metadata: languageName: node linkType: hard -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 - languageName: node - linkType: hard - "@cortex-js/compute-engine@npm:0.24.1": version: 0.24.1 resolution: "@cortex-js/compute-engine@npm:0.24.1" @@ -3275,256 +3049,6 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: ^5.3.1 - find-up: ^4.1.0 - get-package-type: ^0.1.0 - js-yaml: ^3.13.1 - resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 - languageName: node - linkType: hard - -"@jest/console@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/console@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - slash: ^3.0.0 - checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 - languageName: node - linkType: hard - -"@jest/core@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/core@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/reporters": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - ci-info: ^3.2.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^29.7.0 - jest-config: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-resolve-dependencies: ^29.7.0 - jest-runner: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - jest-watcher: ^29.7.0 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d - languageName: node - linkType: hard - -"@jest/environment@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/environment@npm:29.7.0" - dependencies: - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.7.0 - checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" - dependencies: - jest-get-type: ^29.6.3 - checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed - languageName: node - linkType: hard - -"@jest/expect@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect@npm:29.7.0" - dependencies: - expect: ^29.7.0 - jest-snapshot: ^29.7.0 - checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/fake-timers@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@sinonjs/fake-timers": ^10.0.2 - "@types/node": "*" - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 - languageName: node - linkType: hard - -"@jest/globals@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/globals@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/types": ^29.6.3 - jest-mock: ^29.7.0 - checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 - languageName: node - linkType: hard - -"@jest/reporters@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/reporters@npm:29.7.0" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - "@types/node": "*" - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^6.0.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - v8-to-istanbul: ^9.0.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": ^0.27.8 - checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 - languageName: node - linkType: hard - -"@jest/source-map@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/source-map@npm:29.6.3" - dependencies: - "@jridgewell/trace-mapping": ^0.3.18 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb - languageName: node - linkType: hard - -"@jest/test-result@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-result@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-sequencer@npm:29.7.0" - dependencies: - "@jest/test-result": ^29.7.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - slash: ^3.0.0 - checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd - languageName: node - linkType: hard - -"@jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^2.0.0 - fast-json-stable-stringify: ^2.1.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.2 - checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab - languageName: node - linkType: hard - -"@jest/types@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/types@npm:29.6.3" - dependencies: - "@jest/schemas": ^29.6.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.3 resolution: "@jridgewell/gen-mapping@npm:0.3.3" @@ -3582,23 +3106,23 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.20 + resolution: "@jridgewell/trace-mapping@npm:0.3.20" dependencies: "@jridgewell/resolve-uri": ^3.1.0 "@jridgewell/sourcemap-codec": ^1.4.14 - checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + checksum: cd1a7353135f385909468ff0cf20bdd37e59f2ee49a13a966dedf921943e222082c583ade2b579ff6cd0d8faafcb5461f253e1bf2a9f48fec439211fdbe788f5 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.20 - resolution: "@jridgewell/trace-mapping@npm:0.3.20" +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: "@jridgewell/resolve-uri": ^3.1.0 "@jridgewell/sourcemap-codec": ^1.4.14 - checksum: cd1a7353135f385909468ff0cf20bdd37e59f2ee49a13a966dedf921943e222082c583ade2b579ff6cd0d8faafcb5461f253e1bf2a9f48fec439211fdbe788f5 + checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 languageName: node linkType: hard @@ -5742,7 +5266,7 @@ __metadata: prettier-plugin-tailwindcss: ^0.6.8 react: ^18.2.0 react-dom: ^18.3.1 - vite: ^5.4.12 + vite: ^5.4.14 vite-plugin-dts: 4.3.0 languageName: unknown linkType: soft @@ -5809,8 +5333,6 @@ __metadata: io-ts: ^2.2.21 is-hotkey: 0.2.0 isomorphic-dompurify: ^2.19.0 - jest: ^29.7.0 - jest-environment-jsdom: ^29.7.0 katex: ^0.16.21 lit: ^3.2.1 mathjs: ^13.2.2 @@ -5844,13 +5366,13 @@ __metadata: slate-react: 0.111.0 tailwindcss: ^3.4.15 ts-debounce: ^4.0.0 - ts-jest: ^29.2.5 ts-key-enum: ^2.0.13 typescript: ^5.6.3 uuid: ^11.0.3 - vite: ^5.4.12 + vite: ^5.4.14 vite-plugin-dts: 4.3.0 vite-plugin-svgr: ^4.3.0 + vitest: ^2.1.9 languageName: unknown linkType: soft @@ -5905,7 +5427,6 @@ __metadata: "@tippyjs/react": ^4.2.6 "@types/canvas-confetti": ^1.6.4 "@types/iframe-resizer": ^3.5.13 - "@types/jest": ^29.5.14 "@types/js-cookie": ^3.0.6 "@types/json-diff": ^1.0.3 "@types/katex": ^0.16.7 @@ -5941,7 +5462,6 @@ __metadata: iframe-resizer: ^4.4.5 io-ts: ^2.2.21 isomorphic-dompurify: ^2.19.0 - jest: ^29.7.0 js-cookie: ^3.0.5 json-diff: ^1.0.6 katex: ^0.16.21 @@ -6141,31 +5661,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^3.0.0": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: 4.0.8 - checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^10.0.2": - version: 10.3.0 - resolution: "@sinonjs/fake-timers@npm:10.3.0" - dependencies: - "@sinonjs/commons": ^3.0.0 - checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 - languageName: node - linkType: hard - "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0": version: 8.0.0 resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0" @@ -6374,13 +5869,6 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - "@trysound/sax@npm:0.2.0": version: 0.2.0 resolution: "@trysound/sax@npm:0.2.0" @@ -6432,7 +5920,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.5": +"@types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -6464,7 +5952,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*": version: 7.20.4 resolution: "@types/babel__traverse@npm:7.20.4" dependencies: @@ -6530,15 +6018,6 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.9 - resolution: "@types/graceful-fs@npm:4.1.9" - dependencies: - "@types/node": "*" - checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 - languageName: node - linkType: hard - "@types/hast@npm:^2.0.0": version: 2.3.8 resolution: "@types/hast@npm:2.3.8" @@ -6572,41 +6051,6 @@ __metadata: languageName: node linkType: hard -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.6 - resolution: "@types/istanbul-lib-coverage@npm:2.0.6" - checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.3 - resolution: "@types/istanbul-lib-report@npm:3.0.3" - dependencies: - "@types/istanbul-lib-coverage": "*" - checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" - dependencies: - "@types/istanbul-lib-report": "*" - checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 - languageName: node - linkType: hard - -"@types/jest@npm:^29.5.14": - version: 29.5.14 - resolution: "@types/jest@npm:29.5.14" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: 18dba4623f26661641d757c63da2db45e9524c9be96a29ef713c703a9a53792df9ecee9f7365a0858ddbd6440d98fe6b65ca67895ca5884b73cbc7ffc11f3838 - languageName: node - linkType: hard - "@types/js-cookie@npm:^3.0.6": version: 3.0.6 resolution: "@types/js-cookie@npm:3.0.6" @@ -6621,17 +6065,6 @@ __metadata: languageName: node linkType: hard -"@types/jsdom@npm:^20.0.0": - version: 20.0.1 - resolution: "@types/jsdom@npm:20.0.1" - dependencies: - "@types/node": "*" - "@types/tough-cookie": "*" - parse5: ^7.0.0 - checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 - languageName: node - linkType: hard - "@types/json-diff@npm:^1.0.3": version: 1.0.3 resolution: "@types/json-diff@npm:1.0.3" @@ -6797,13 +6230,6 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.0": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 - languageName: node - linkType: hard - "@types/tern@npm:*": version: 0.23.9 resolution: "@types/tern@npm:0.23.9" @@ -6820,13 +6246,6 @@ __metadata: languageName: node linkType: hard -"@types/tough-cookie@npm:*": - version: 4.0.5 - resolution: "@types/tough-cookie@npm:4.0.5" - checksum: f19409d0190b179331586365912920d192733112a195e870c7f18d20ac8adb7ad0b0ff69dad430dba8bc2be09593453a719cfea92dc3bda19748fd158fe1498d - languageName: node - linkType: hard - "@types/trusted-types@npm:*, @types/trusted-types@npm:^2.0.2, @types/trusted-types@npm:^2.0.7": version: 2.0.7 resolution: "@types/trusted-types@npm:2.0.7" @@ -6857,22 +6276,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs-parser@npm:*": - version: 21.0.3 - resolution: "@types/yargs-parser@npm:21.0.3" - checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" - dependencies: - "@types/yargs-parser": "*" - checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/eslint-plugin@npm:^8.14.0": version: 8.14.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.14.0" @@ -7017,6 +6420,87 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/expect@npm:2.1.9" + dependencies: + "@vitest/spy": 2.1.9 + "@vitest/utils": 2.1.9 + chai: ^5.1.2 + tinyrainbow: ^1.2.0 + checksum: a234f96dd42c76e20af68b2ad2f00b80a3873501d5daa524bf1405b344e86123716b925f976d8104fd242bfbd0d9cf7084d0eb4a690097e6e5db456d220ed67a + languageName: node + linkType: hard + +"@vitest/mocker@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/mocker@npm:2.1.9" + dependencies: + "@vitest/spy": 2.1.9 + estree-walker: ^3.0.3 + magic-string: ^0.30.12 + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 17de391acc4d899f15356b45cde8202e5d5ca4517c32c0c9dcf32ce0660501773fdc29675b4f7d48c1579a560ac41f8f5181ebe41a7daf675f561d611e8e30dc + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:2.1.9, @vitest/pretty-format@npm:^2.1.9": + version: 2.1.9 + resolution: "@vitest/pretty-format@npm:2.1.9" + dependencies: + tinyrainbow: ^1.2.0 + checksum: 33f7ff0a9d356ddd6534390a0aea260dc04a3022a94901c87d141bacf71d2b3fff2e3bf08a55dd424c5355fd3b41656cb7871c76372fef45ffac1ea89d0dc508 + languageName: node + linkType: hard + +"@vitest/runner@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/runner@npm:2.1.9" + dependencies: + "@vitest/utils": 2.1.9 + pathe: ^1.1.2 + checksum: d8aaadc98bcbe1ee7c832a7d619d3c77d3c67536f10b80a3106d9d6e03ecc0f5467ef7bd4a65a07fe924cc166fe7415d637b2b08ef71e1a208a250543f9f3545 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/snapshot@npm:2.1.9" + dependencies: + "@vitest/pretty-format": 2.1.9 + magic-string: ^0.30.12 + pathe: ^1.1.2 + checksum: fb693dea59709c9df8660e5948c7971d2c3ce74212eafa7d542a578bbb8aed203dc03129dd5e476251e1946b50432e79a4fd59069fd4f950283e188167b9496d + languageName: node + linkType: hard + +"@vitest/spy@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/spy@npm:2.1.9" + dependencies: + tinyspy: ^3.0.2 + checksum: f9279488b5d2a27800e33e8fe51cc685b2a0db49d30b80b2b0cc924f8b1736eb520459c6e8bd09fa4457f5bb86ff073e7bdcf60d36452c11a8a8f9cbc8030237 + languageName: node + linkType: hard + +"@vitest/utils@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/utils@npm:2.1.9" + dependencies: + "@vitest/pretty-format": 2.1.9 + loupe: ^3.1.2 + tinyrainbow: ^1.2.0 + checksum: b24fb9c6765801f2e0578ad5c32fadf9541a833301eaed2877a427096cf05214244b361f94eda80be2b9c841f58ae3c67d37dedc5a902b2cb44041979bae4d8f + languageName: node + linkType: hard + "@volar/language-core@npm:2.4.10, @volar/language-core@npm:~2.4.1": version: 2.4.10 resolution: "@volar/language-core@npm:2.4.10" @@ -7157,13 +6641,6 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.6": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e - languageName: node - linkType: hard - "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -7178,16 +6655,6 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^7.0.0": - version: 7.0.1 - resolution: "acorn-globals@npm:7.0.1" - dependencies: - acorn: ^8.1.0 - acorn-walk: ^8.0.2 - checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 - languageName: node - linkType: hard - "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -7204,15 +6671,6 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.2": - version: 8.3.4 - resolution: "acorn-walk@npm:8.3.4" - dependencies: - acorn: ^8.11.0 - checksum: 4ff03f42323e7cf90f1683e08606b0f460e1e6ac263d2730e3df91c7665b6f64e696db6ea27ee4bed18c2599569be61f28a8399fa170c611161a348c402ca19c - languageName: node - linkType: hard - "acorn@npm:^8.0.4": version: 8.11.2 resolution: "acorn@npm:8.11.2" @@ -7222,15 +6680,6 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.8.1": - version: 8.13.0 - resolution: "acorn@npm:8.13.0" - bin: - acorn: bin/acorn - checksum: f1541f05eb5d6ff67990d1927290809b1ebb663ac96d9c7057c935cf29c5bcaba6d39f37bd007f4bb814f162f142b0f2b2dd4b14128b8fcfaf9f0508a6f05f1c - languageName: node - linkType: hard - "acorn@npm:^8.14.0": version: 8.14.0 resolution: "acorn@npm:8.14.0" @@ -7240,15 +6689,6 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": version: 7.1.0 resolution: "agent-base@npm:7.1.0" @@ -7399,13 +6839,6 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^5.0.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 - languageName: node - linkType: hard - "ansi-styles@npm:^6.1.0": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" @@ -7420,7 +6853,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": +"anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -7451,7 +6884,14 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7, argparse@npm:~1.0.9": +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"argparse@npm:~1.0.9": version: 1.0.10 resolution: "argparse@npm:1.0.10" dependencies: @@ -7460,13 +6900,6 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - "aria-hidden@npm:^1.1.1": version: 1.2.3 resolution: "aria-hidden@npm:1.2.3" @@ -7663,6 +7096,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.8": version: 0.0.8 resolution: "ast-types-flow@npm:0.0.8" @@ -7677,13 +7117,6 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.3": - version: 3.2.6 - resolution: "async@npm:3.2.6" - checksum: ee6eb8cd8a0ab1b58bd2a3ed6c415e93e773573a91d31df9d5ef559baafa9dab37d3b096fa7993e84585cac3697b2af6ddb9086f45d3ac8cae821bb2aab65682 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -7778,23 +7211,6 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "babel-jest@npm:29.7.0" - dependencies: - "@jest/transform": ^29.7.0 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.6.3 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 - languageName: node - linkType: hard - "babel-plugin-emotion@npm:^10.0.27": version: 10.2.2 resolution: "babel-plugin-emotion@npm:10.2.2" @@ -7813,31 +7229,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^5.0.4 - test-exclude: ^6.0.0 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-plugin-jest-hoist@npm:29.6.3" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 - languageName: node - linkType: hard - "babel-plugin-macros@npm:^2.0.0": version: 2.8.0 resolution: "babel-plugin-macros@npm:2.8.0" @@ -7899,28 +7290,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - "babel-preset-fbjs@npm:^3.4.0": version: 3.4.0 resolution: "babel-preset-fbjs@npm:3.4.0" @@ -7958,18 +7327,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-preset-jest@npm:29.6.3" - dependencies: - babel-plugin-jest-hoist: ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -8087,20 +7444,6 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.23.1": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" - dependencies: - caniuse-lite: ^1.0.30001646 - electron-to-chromium: ^1.5.4 - node-releases: ^2.0.18 - update-browserslist-db: ^1.1.0 - bin: - browserslist: cli.js - checksum: 7906064f9970aeb941310b2fcb8b4ace4a1b50aa657c986677c6f1553a8cabcc94ee9c5922f715baffbedaa0e6cf0831b6fed7b059dde6873a4bfadcbe069c7e - languageName: node - linkType: hard - "browserslist@npm:^4.23.3, browserslist@npm:^4.24.0": version: 4.24.2 resolution: "browserslist@npm:4.24.2" @@ -8115,15 +7458,6 @@ __metadata: languageName: node linkType: hard -"bs-logger@npm:^0.2.6": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" - dependencies: - fast-json-stable-stringify: 2.x - checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 - languageName: node - linkType: hard - "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -8133,13 +7467,6 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - "buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -8159,6 +7486,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + "cacache@npm:^18.0.0": version: 18.0.1 resolution: "cacache@npm:18.0.1" @@ -8247,7 +7581,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": +"camelcase@npm:^5.0.0": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b @@ -8300,6 +7634,19 @@ __metadata: languageName: node linkType: hard +"chai@npm:^5.1.2": + version: 5.1.2 + resolution: "chai@npm:5.1.2" + dependencies: + assertion-error: ^2.0.1 + check-error: ^2.1.1 + deep-eql: ^5.0.1 + loupe: ^3.1.0 + pathval: ^2.0.0 + checksum: f2341967ab5632612548d372c27b46219adad3af35021d8cba2ae3c262f588de2c60cb3f004e6ad40e363a9cad6d20d0de51f00e7e9ac31cce17fb05d4efa316 + languageName: node + linkType: hard + "chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -8311,7 +7658,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -8366,13 +7713,6 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - "character-entities-legacy@npm:^1.0.0": version: 1.1.4 resolution: "character-entities-legacy@npm:1.1.4" @@ -8408,6 +7748,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: d785ed17b1d4a4796b6e75c765a9a290098cf52ff9728ce0756e8ffd4293d2e419dd30c67200aee34202463b474306913f2fcfaf1890641026d9fc6966fea27a + languageName: node + linkType: hard + "chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -8441,13 +7788,6 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 - languageName: node - linkType: hard - "ci-info@npm:^4.0.0": version: 4.0.0 resolution: "ci-info@npm:4.0.0" @@ -8464,13 +7804,6 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.3 - resolution: "cjs-module-lexer@npm:1.2.3" - checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a - languageName: node - linkType: hard - "classnames@npm:^2.2.6": version: 2.3.2 resolution: "classnames@npm:2.3.2" @@ -8585,13 +7918,6 @@ __metadata: languageName: node linkType: hard -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - "codemirror-graphql@npm:^2.1.1": version: 2.1.1 resolution: "codemirror-graphql@npm:2.1.1" @@ -8613,13 +7939,6 @@ __metadata: languageName: node linkType: hard -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da - languageName: node - linkType: hard - "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -8865,23 +8184,6 @@ __metadata: languageName: node linkType: hard -"create-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "create-jest@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - prompts: ^2.0.1 - bin: - create-jest: bin/create-jest.js - checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 - languageName: node - linkType: hard - "cross-env@npm:^7.0.3": version: 7.0.3 resolution: "cross-env@npm:7.0.3" @@ -9003,29 +8305,6 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.5.0": - version: 0.5.0 - resolution: "cssom@npm:0.5.0" - checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - "cssstyle@npm:^4.1.0": version: 4.1.0 resolution: "cssstyle@npm:4.1.0" @@ -9065,17 +8344,6 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^3.0.2": - version: 3.0.2 - resolution: "data-urls@npm:3.0.2" - dependencies: - abab: ^2.0.6 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^11.0.0 - checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 - languageName: node - linkType: hard - "data-urls@npm:^5.0.0": version: 5.0.0 resolution: "data-urls@npm:5.0.0" @@ -9180,6 +8448,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.7": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479 + languageName: node + linkType: hard + "decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -9187,7 +8467,7 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": +"decimal.js@npm:^10.4.3": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae @@ -9203,15 +8483,10 @@ __metadata: languageName: node linkType: hard -"dedent@npm:^1.0.0": - version: 1.5.3 - resolution: "dedent@npm:1.5.3" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 045b595557b2a8ea2eb9b0b4623d764e9a87326486fe2b61191b4342ed93dc01245644d8a09f3108a50c0ee7965f1eedd92e4a3a503ed89ea8e810566ea27f9a +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 6aaaadb4c19cbce42e26b2bbe5bd92875f599d2602635dc97f0294bae48da79e89470aedee05f449e0ca8c65e9fd7e7872624d1933a1db02713d99c2ca8d1f24 languageName: node linkType: hard @@ -9222,7 +8497,7 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": +"deepmerge@npm:^4.3.1": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 @@ -9306,13 +8581,6 @@ __metadata: languageName: node linkType: hard -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - "detect-newline@npm:^4.0.0": version: 4.0.1 resolution: "detect-newline@npm:4.0.1" @@ -9343,13 +8611,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa - languageName: node - linkType: hard - "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -9447,15 +8708,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^4.0.0": - version: 4.0.0 - resolution: "domexception@npm:4.0.0" - dependencies: - webidl-conversions: ^7.0.0 - checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 - languageName: node - linkType: hard - "domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": version: 5.0.3 resolution: "domhandler@npm:5.0.3" @@ -9573,17 +8825,6 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.10": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: ^10.8.5 - bin: - ejs: bin/cli.js - checksum: ce90637e9c7538663ae023b8a7a380b2ef7cc4096de70be85abf5a3b9641912dde65353211d05e24d56b1f242d71185c6d00e02cb8860701d571786d92c71f05 - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.4.601": version: 1.4.603 resolution: "electron-to-chromium@npm:1.4.603" @@ -9591,13 +8832,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.4": - version: 1.5.19 - resolution: "electron-to-chromium@npm:1.5.19" - checksum: 459b47ab828cbeb2d09767c93cd181bdccbda008e1d7fc92d078d72ecf4cac3107d2deb424016a63aadc484765ec98c84f339546b0a627892d24eb286f9f0adb - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.5.41": version: 1.5.58 resolution: "electron-to-chromium@npm:1.5.58" @@ -9605,13 +8839,6 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.13.1": - version: 0.13.1 - resolution: "emittery@npm:0.13.1" - checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -9889,6 +9116,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.5.4": + version: 1.6.0 + resolution: "es-module-lexer@npm:1.6.0" + checksum: 4413a9aed9bf581de62b98174f3eea3f23ce2994fb6832df64bdd6504f6977da1a3b5ebd3c10f75e3c2f214dcf1a1d8b54be5e62c71b7110e6ccedbf975d2b7d + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0": version: 1.0.0 resolution: "es-object-atoms@npm:1.0.0" @@ -10027,7 +9261,7 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.1.2, escalade@npm:^3.2.0": +"escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e @@ -10048,13 +9282,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -10062,24 +9289,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.1.0 - resolution: "escodegen@npm:2.1.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 - languageName: node - linkType: hard - "eslint-config-next@npm:^15.0.3": version: 15.0.3 resolution: "eslint-config-next@npm:15.0.3" @@ -10369,16 +9578,6 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - "esquery@npm:^1.5.0": version: 1.6.0 resolution: "esquery@npm:1.6.0" @@ -10411,47 +9610,26 @@ __metadata: languageName: node linkType: hard -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"execa@npm:^5.0.0": - version: 5.1.1 - resolution: "execa@npm:5.1.1" +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.0 - human-signals: ^2.1.0 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.1 - onetime: ^5.1.2 - signal-exit: ^3.0.3 - strip-final-newline: ^2.0.0 - checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + "@types/estree": ^1.0.0 + checksum: a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af languageName: node linkType: hard -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.7.0": - version: 29.7.0 - resolution: "expect@npm:29.7.0" - dependencies: - "@jest/expect-utils": ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c +"expect-type@npm:^1.1.0": + version: 1.1.0 + resolution: "expect-type@npm:1.1.0" + checksum: 65d25ec10bca32bcf650dcfe734532acc4b7a73677c656f299a7cbed273b5c4d6a3dab11af76f452645d54a95c4ef39fc73772f2c8eb6684ba35672958d6f3b3 languageName: node linkType: hard @@ -10541,7 +9719,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -10665,15 +9843,6 @@ __metadata: languageName: node linkType: hard -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: ^5.0.1 - checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 - languageName: node - linkType: hard - "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -10690,7 +9859,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": +"find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" dependencies: @@ -10892,7 +10061,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -10902,7 +10071,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": +"fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -10983,13 +10152,6 @@ __metadata: languageName: node linkType: hard -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - "get-stdin@npm:^9.0.0": version: 9.0.0 resolution: "get-stdin@npm:9.0.0" @@ -10997,13 +10159,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad - languageName: node - linkType: hard - "get-symbol-description@npm:^1.0.0": version: 1.0.0 resolution: "get-symbol-description@npm:1.0.0" @@ -11124,7 +10279,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": +"glob@npm:^7.1.1": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -11216,7 +10371,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 @@ -11547,15 +10702,6 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^3.0.0": - version: 3.0.0 - resolution: "html-encoding-sniffer@npm:3.0.0" - dependencies: - whatwg-encoding: ^2.0.0 - checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 - languageName: node - linkType: hard - "html-encoding-sniffer@npm:^4.0.0": version: 4.0.0 resolution: "html-encoding-sniffer@npm:4.0.0" @@ -11565,7 +10711,7 @@ __metadata: languageName: node linkType: hard -"html-escaper@npm:^2.0.0, html-escaper@npm:^2.0.2": +"html-escaper@npm:^2.0.2": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 @@ -11579,17 +10725,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - "http-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "http-proxy-agent@npm:7.0.0" @@ -11621,16 +10756,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^5.0.1": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - "https-proxy-agent@npm:^7.0.0, https-proxy-agent@npm:^7.0.1": version: 7.0.2 resolution: "https-proxy-agent@npm:7.0.2" @@ -11651,13 +10776,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 - languageName: node - linkType: hard - "iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -11751,18 +10869,6 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -12086,13 +11192,6 @@ __metadata: languageName: node linkType: hard -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - "is-generator-function@npm:^1.0.10": version: 1.0.10 resolution: "is-generator-function@npm:1.0.10" @@ -12266,13 +11365,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -12428,71 +11520,6 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^6.3.0 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.0": - version: 6.0.3 - resolution: "istanbul-lib-instrument@npm:6.0.3" - dependencies: - "@babel/core": ^7.23.9 - "@babel/parser": ^7.23.9 - "@istanbuljs/schema": ^0.1.3 - istanbul-lib-coverage: ^3.2.0 - semver: ^7.5.4 - checksum: 74104c60c65c4fa0e97cc76f039226c356123893929f067bfad5f86fe839e08f5d680354a68fead3bc9c1e2f3fa6f3f53cded70778e821d911e851d349f3545a - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^4.0.0 - supports-color: ^7.1.0 - checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.6 - resolution: "istanbul-reports@npm:3.1.6" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 44c4c0582f287f02341e9720997f9e82c071627e1e862895745d5f52ec72c9b9f38e1d12370015d2a71dcead794f34c7732aaef3fab80a24bc617a21c3d911d6 - languageName: node - linkType: hard - "istextorbinary@npm:6.0.0": version: 6.0.0 resolution: "istextorbinary@npm:6.0.0" @@ -12542,20 +11569,6 @@ __metadata: languageName: node linkType: hard -"jake@npm:^10.8.5": - version: 10.9.2 - resolution: "jake@npm:10.9.2" - dependencies: - async: ^3.2.3 - chalk: ^4.0.2 - filelist: ^1.0.4 - minimatch: ^3.1.2 - bin: - jake: bin/cli.js - checksum: f2dc4a086b4f58446d02cb9be913c39710d9ea570218d7681bb861f7eeaecab7b458256c946aeaa7e548c5e0686cc293e6435501e4047174a3b6a504dcbfcaae - languageName: node - linkType: hard - "javascript-natural-sort@npm:^0.7.1": version: 0.7.1 resolution: "javascript-natural-sort@npm:0.7.1" @@ -12563,466 +11576,6 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-changed-files@npm:29.7.0" - dependencies: - execa: ^5.0.0 - jest-util: ^29.7.0 - p-limit: ^3.1.0 - checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 - languageName: node - linkType: hard - -"jest-circus@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-circus@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^1.0.0 - is-generator-fn: ^2.0.0 - jest-each: ^29.7.0 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - p-limit: ^3.1.0 - pretty-format: ^29.7.0 - pure-rand: ^6.0.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 - languageName: node - linkType: hard - -"jest-cli@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-cli@npm:29.7.0" - dependencies: - "@jest/core": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - create-jest: ^29.7.0 - exit: ^0.1.2 - import-local: ^3.0.2 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 - languageName: node - linkType: hard - -"jest-config@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-config@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.7.0 - "@jest/types": ^29.6.3 - babel-jest: ^29.7.0 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-circus: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-get-type: ^29.6.3 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-runner: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^29.7.0 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff - languageName: node - linkType: hard - -"jest-diff@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.6.3 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 - languageName: node - linkType: hard - -"jest-docblock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-docblock@npm:29.7.0" - dependencies: - detect-newline: ^3.0.0 - checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 - languageName: node - linkType: hard - -"jest-each@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-each@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - jest-get-type: ^29.6.3 - jest-util: ^29.7.0 - pretty-format: ^29.7.0 - checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-jsdom@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/jsdom": ^20.0.0 - "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - jsdom: ^20.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 - languageName: node - linkType: hard - -"jest-environment-node@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-node@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 - languageName: node - linkType: hard - -"jest-haste-map@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-haste-map@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 - languageName: node - linkType: hard - -"jest-leak-detector@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-leak-detector@npm:29.7.0" - dependencies: - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-matcher-utils@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd - languageName: node - linkType: hard - -"jest-message-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-message-util@npm:29.7.0" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.6.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 - languageName: node - linkType: hard - -"jest-mock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-mock@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-util: ^29.7.0 - checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 - languageName: node - linkType: hard - -"jest-regex-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-regex-util@npm:29.6.3" - checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve-dependencies@npm:29.7.0" - dependencies: - jest-regex-util: ^29.6.3 - jest-snapshot: ^29.7.0 - checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 - languageName: node - linkType: hard - -"jest-resolve@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-pnp-resolver: ^1.2.2 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - resolve: ^1.20.0 - resolve.exports: ^2.0.0 - slash: ^3.0.0 - checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 - languageName: node - linkType: hard - -"jest-runner@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runner@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/environment": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.13.1 - graceful-fs: ^4.2.9 - jest-docblock: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-leak-detector: ^29.7.0 - jest-message-util: ^29.7.0 - jest-resolve: ^29.7.0 - jest-runtime: ^29.7.0 - jest-util: ^29.7.0 - jest-watcher: ^29.7.0 - jest-worker: ^29.7.0 - p-limit: ^3.1.0 - source-map-support: 0.5.13 - checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb - languageName: node - linkType: hard - -"jest-runtime@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runtime@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/globals": ^29.7.0 - "@jest/source-map": ^29.6.3 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e - languageName: node - linkType: hard - -"jest-snapshot@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-snapshot@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-jsx": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^29.7.0 - graceful-fs: ^4.2.9 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - natural-compare: ^1.4.0 - pretty-format: ^29.7.0 - semver: ^7.5.3 - checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad - languageName: node - linkType: hard - -"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-util@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca - languageName: node - linkType: hard - -"jest-validate@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-validate@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^29.6.3 - leven: ^3.1.0 - pretty-format: ^29.7.0 - checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae - languageName: node - linkType: hard - -"jest-watcher@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-watcher@npm:29.7.0" - dependencies: - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.13.1 - jest-util: ^29.7.0 - string-length: ^4.0.1 - checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f - languageName: node - linkType: hard - -"jest-worker@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-worker@npm:29.7.0" - dependencies: - "@types/node": "*" - jest-util: ^29.7.0 - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 - languageName: node - linkType: hard - -"jest@npm:^29.7.0": - version: 29.7.0 - resolution: "jest@npm:29.7.0" - dependencies: - "@jest/core": ^29.7.0 - "@jest/types": ^29.6.3 - import-local: ^3.0.2 - jest-cli: ^29.7.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b - languageName: node - linkType: hard - "jiti@npm:^1.17.1": version: 1.21.0 resolution: "jiti@npm:1.21.0" @@ -13078,18 +11631,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c - languageName: node - linkType: hard - "js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -13115,45 +11656,6 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^20.0.0": - version: 20.0.3 - resolution: "jsdom@npm:20.0.3" - dependencies: - abab: ^2.0.6 - acorn: ^8.8.1 - acorn-globals: ^7.0.0 - cssom: ^0.5.0 - cssstyle: ^2.3.0 - data-urls: ^3.0.2 - decimal.js: ^10.4.2 - domexception: ^4.0.0 - escodegen: ^2.0.0 - form-data: ^4.0.0 - html-encoding-sniffer: ^3.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.1 - is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.2 - parse5: ^7.1.1 - saxes: ^6.0.0 - symbol-tree: ^3.2.4 - tough-cookie: ^4.1.2 - w3c-xmlserializer: ^4.0.0 - webidl-conversions: ^7.0.0 - whatwg-encoding: ^2.0.0 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^11.0.0 - ws: ^8.11.0 - xml-name-validator: ^4.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 - languageName: node - linkType: hard - "jsdom@npm:^25.0.1": version: 25.0.1 resolution: "jsdom@npm:25.0.1" @@ -13424,13 +11926,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - "kolorist@npm:^1.8.0": version: 1.8.0 resolution: "kolorist@npm:1.8.0" @@ -13454,13 +11949,6 @@ __metadata: languageName: node linkType: hard -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -13747,13 +12235,6 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:^4.1.2": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 - languageName: node - linkType: hard - "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -13808,6 +12289,13 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.2": + version: 3.1.2 + resolution: "loupe@npm:3.1.2" + checksum: 4a75bbe8877a1ced3603e08b1095cd6f4c987c50fe63719fdc3009029560f91e07a915e7f6eff1322bb62bfb2a2beeef06b13ccb3c12f81bda9f3674434dcab9 + languageName: node + linkType: hard + "lower-case-first@npm:^2.0.2": version: 2.0.2 resolution: "lower-case-first@npm:2.0.2" @@ -13884,6 +12372,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.12": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": ^1.5.0 + checksum: f4b4ed17c5ada64f77fc98491847302ebad64894a905c417c943840c0384662118c9b37f9f68bb86add159fa4749ff6f118c4627d69a470121b46731f8debc6d + languageName: node + linkType: hard + "magic-string@npm:^0.30.3": version: 0.30.10 resolution: "magic-string@npm:0.30.10" @@ -13893,22 +12390,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: ^7.5.3 - checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a - languageName: node - linkType: hard - -"make-error@npm:^1.3.6": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - "make-fetch-happen@npm:^13.0.0": version: 13.0.0 resolution: "make-fetch-happen@npm:13.0.0" @@ -13967,15 +12448,6 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 - languageName: node - linkType: hard - "map-cache@npm:^0.2.0": version: 0.2.2 resolution: "map-cache@npm:0.2.2" @@ -14076,13 +12548,6 @@ __metadata: languageName: node linkType: hard -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 - languageName: node - linkType: hard - "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -14363,17 +12828,8 @@ __metadata: version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a languageName: node linkType: hard @@ -15068,15 +13524,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: ^3.0.0 - checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 - languageName: node - linkType: hard - "npm-user-validate@npm:^3.0.0": version: 3.0.0 resolution: "npm-user-validate@npm:3.0.0" @@ -15193,13 +13640,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.2": - version: 2.2.13 - resolution: "nwsapi@npm:2.2.13" - checksum: d34fb7838517c3c7e8cc824e443275b08b57f6a025a860693d18c56ddcfd176e32df9bf0ae7f5a95c7a32981501caa1f9fda31b59f28aa72a4b9d01f573a8e6b - languageName: node - linkType: hard - "oauth-sign@npm:~0.9.0": version: 0.9.0 resolution: "oauth-sign@npm:0.9.0" @@ -15319,7 +13759,7 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": +"onetime@npm:^5.1.0": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -15382,7 +13822,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:3.1.0, p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": +"p-limit@npm:3.1.0, p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -15579,15 +14019,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0, parse5@npm:^7.1.1": - version: 7.2.0 - resolution: "parse5@npm:7.2.0" - dependencies: - entities: ^4.5.0 - checksum: 78a3286521d5ae09837ed3112a3c817cc718ee444951aced617c46a229b9872b10b7b20941d4d0ca7176c7f37f13dbf013206abe2e5e533563d635d36a9a3dc6 - languageName: node - linkType: hard - "parse5@npm:^7.1.2": version: 7.2.1 resolution: "parse5@npm:7.2.1" @@ -15645,7 +14076,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": +"path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 @@ -15718,6 +14149,13 @@ __metadata: languageName: node linkType: hard +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: 682b6a6289de7990909effef7dae9aa7bb6218c0426727bccf66a35b34e7bfbc65615270c5e44e3c9557a5cb44b1b9ef47fc3cb18bce6ad3ba92bcd28467ed7d + languageName: node + linkType: hard + "performance-now@npm:^2.1.0": version: 2.1.0 resolution: "performance-now@npm:2.1.0" @@ -15746,7 +14184,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf @@ -15783,22 +14221,13 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.1, pirates@npm:^4.0.4": +"pirates@npm:^4.0.1": version: 4.0.6 resolution: "pirates@npm:4.0.6" checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 languageName: node linkType: hard -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 - languageName: node - linkType: hard - "pkg-types@npm:^1.0.3, pkg-types@npm:^1.2.1": version: 1.2.1 resolution: "pkg-types@npm:1.2.1" @@ -16083,17 +14512,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": ^29.6.3 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 - languageName: node - linkType: hard - "prismjs@npm:^1.27.0": version: 1.29.0 resolution: "prismjs@npm:1.29.0" @@ -16176,16 +14594,6 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d - languageName: node - linkType: hard - "promzard@npm:^2.0.0": version: 2.0.0 resolution: "promzard@npm:2.0.0" @@ -16231,13 +14639,6 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d - languageName: node - linkType: hard - "punycode.js@npm:^2.3.1": version: 2.3.1 resolution: "punycode.js@npm:2.3.1" @@ -16259,13 +14660,6 @@ __metadata: languageName: node linkType: hard -"pure-rand@npm:^6.0.0": - version: 6.1.0 - resolution: "pure-rand@npm:6.1.0" - checksum: 8d53bc02bed99eca0b65b505090152ee7e9bd67dd74f8ff32ba1c883b87234067c5bf68d2614759fb217d82594d7a92919e6df80f97885e7b12b42af4bd3316a - languageName: node - linkType: hard - "qrcode-terminal@npm:^0.12.0": version: 0.12.0 resolution: "qrcode-terminal@npm:0.12.0" @@ -16291,13 +14685,6 @@ __metadata: languageName: node linkType: hard -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -16495,13 +14882,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e - languageName: node - linkType: hard - "react-lazyload@npm:^3.2.1": version: 3.2.1 resolution: "react-lazyload@npm:3.2.1" @@ -16982,13 +15362,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff - languageName: node - linkType: hard - "reselect@npm:^5.1.0, reselect@npm:^5.1.1": version: 5.1.1 resolution: "reselect@npm:5.1.1" @@ -16996,16 +15369,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": +"resolve-from@npm:5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf @@ -17026,14 +15390,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"resolve.exports@npm:^2.0.0": - version: 2.0.2 - resolution: "resolve.exports@npm:2.0.2" - checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 - languageName: node - linkType: hard - -"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.4, resolve@npm:^1.22.8, resolve@npm:~1.22.1, resolve@npm:~1.22.2": +"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.22.4, resolve@npm:^1.22.8, resolve@npm:~1.22.1, resolve@npm:~1.22.2": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -17059,7 +15416,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.22.8#~builtin, resolve@patch:resolve@~1.22.1#~builtin, resolve@patch:resolve@~1.22.2#~builtin": +"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.22.8#~builtin, resolve@patch:resolve@~1.22.1#~builtin, resolve@patch:resolve@~1.22.2#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -17332,7 +15689,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"semver@npm:^6.3.0, semver@npm:^6.3.1": +"semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -17341,7 +15698,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:~7.5.4": +"semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:~7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -17532,7 +15889,14 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -17592,13 +15956,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -17781,16 +16138,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 - languageName: node - linkType: hard - "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -17798,7 +16145,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 @@ -17918,12 +16265,17 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + +"std-env@npm:^3.8.0": + version: 3.8.0 + resolution: "std-env@npm:3.8.0" + checksum: ad4554485c2d09138a1d0f03944245e169510e6f5200b7d30fcdd4536e27a2a9a2fd934caff7ef58ebbe21993fa0e2b9e5b1979f431743c925305863b7ff36d5 languageName: node linkType: hard @@ -17948,16 +16300,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -18133,20 +16475,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 - languageName: node - linkType: hard - "strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -18223,7 +16551,14 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"supports-color@npm:^8.0.0, supports-color@npm:~8.1.1": +"supports-color@npm:^9.4.0": + version: 9.4.0 + resolution: "supports-color@npm:9.4.0" + checksum: cb8ff8daeaf1db642156f69a9aa545b6c01dd9c4def4f90a49f46cbf24be0c245d392fcf37acd119cd1819b99dad2cc9b7e3260813f64bcfd7f5b18b5a1eefb8 + languageName: node + linkType: hard + +"supports-color@npm:~8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -18232,13 +16567,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"supports-color@npm:^9.4.0": - version: 9.4.0 - resolution: "supports-color@npm:9.4.0" - checksum: cb8ff8daeaf1db642156f69a9aa545b6c01dd9c4def4f90a49f46cbf24be0c245d392fcf37acd119cd1819b99dad2cc9b7e3260813f64bcfd7f5b18b5a1eefb8 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -18385,17 +16713,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": ^0.1.2 - glob: ^7.1.4 - minimatch: ^3.0.4 - checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 - languageName: node - linkType: hard - "text-table@npm:^0.2.0, text-table@npm:~0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -18481,6 +16798,41 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 1ab00d7dfe0d1f127cbf00822bacd9024f7a50a3ecd1f354a8168e0b7d2b53a639a24414e707c27879d1adc0f5153141d51d76ebd7b4d37fe245e742e5d91fe8 + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.1": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: bd491923020610bdeadb0d8cf5d70e7cbad5a3201620fd01048c9bf3b31ffaa75c33254e1540e13b993ce4e8187852b0b5a93057bb598e7a57afa2ca2048a35c + languageName: node + linkType: hard + +"tinypool@npm:^1.0.1": + version: 1.0.2 + resolution: "tinypool@npm:1.0.2" + checksum: 752f23114d8fc95a9497fc812231d6d0a63728376aa11e6e8499c10423a91112e760e388887ea7854f1b16977c321f07c0eab061ec2f60f6761e58b184aac880 + languageName: node + linkType: hard + +"tinyrainbow@npm:^1.2.0": + version: 1.2.0 + resolution: "tinyrainbow@npm:1.2.0" + checksum: d1e2cb5400032c0092be00e4a3da5450bea8b4fad58bfb5d3c58ca37ff5c5e252f7fcfb9af247914854af79c46014add9d1042fe044358c305a129ed55c8be35 + languageName: node + linkType: hard + +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337 + languageName: node + linkType: hard + "tippy.js@npm:^6.3.1, tippy.js@npm:^6.3.7": version: 6.3.7 resolution: "tippy.js@npm:6.3.7" @@ -18535,13 +16887,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -18572,18 +16917,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"tough-cookie@npm:^4.1.2": - version: 4.1.4 - resolution: "tough-cookie@npm:4.1.4" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c - languageName: node - linkType: hard - "tough-cookie@npm:^5.0.0": version: 5.0.0 resolution: "tough-cookie@npm:5.0.0" @@ -18603,15 +16936,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"tr46@npm:^3.0.0": - version: 3.0.0 - resolution: "tr46@npm:3.0.0" - dependencies: - punycode: ^2.1.1 - checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 - languageName: node - linkType: hard - "tr46@npm:^5.0.0": version: 5.0.0 resolution: "tr46@npm:5.0.0" @@ -18658,43 +16982,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"ts-jest@npm:^29.2.5": - version: 29.2.5 - resolution: "ts-jest@npm:29.2.5" - dependencies: - bs-logger: ^0.2.6 - ejs: ^3.1.10 - fast-json-stable-stringify: ^2.1.0 - jest-util: ^29.0.0 - json5: ^2.2.3 - lodash.memoize: ^4.1.2 - make-error: ^1.3.6 - semver: ^7.6.3 - yargs-parser: ^21.1.1 - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/transform": ^29.0.0 - "@jest/types": ^29.0.0 - babel-jest: ^29.0.0 - jest: ^29.0.0 - typescript: ">=4.3 <6" - peerDependenciesMeta: - "@babel/core": - optional: true - "@jest/transform": - optional: true - "@jest/types": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - bin: - ts-jest: cli.js - checksum: d60d1e1d80936f6002b1bb27f7e062408bc733141b9d666565503f023c340a3196d506c836a4316c5793af81a5f910ab49bb9c13f66e2dc66de4e0f03851dbca - languageName: node - linkType: hard - "ts-key-enum@npm:^2.0.13": version: 2.0.13 resolution: "ts-key-enum@npm:2.0.13" @@ -18829,13 +17116,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 - languageName: node - linkType: hard - "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -19151,13 +17431,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - "unixify@npm:^1.0.0": version: 1.0.0 resolution: "unixify@npm:1.0.0" @@ -19181,20 +17454,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"update-browserslist-db@npm:^1.1.0": - version: 1.1.0 - resolution: "update-browserslist-db@npm:1.1.0" - dependencies: - escalade: ^3.1.2 - picocolors: ^1.0.1 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 7b74694d96f0c360f01b702e72353dc5a49df4fe6663d3ee4e5c628f061576cddf56af35a3a886238c01dd3d8f231b7a86a8ceaa31e7a9220ae31c1c1238e562 - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.1.1": version: 1.1.1 resolution: "update-browserslist-db@npm:1.1.1" @@ -19236,16 +17495,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: ^2.1.1 - requires-port: ^1.0.0 - checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf - languageName: node - linkType: hard - "urlpattern-polyfill@npm:^10.0.0": version: 10.0.0 resolution: "urlpattern-polyfill@npm:10.0.0" @@ -19397,17 +17646,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.1": - version: 9.3.0 - resolution: "v8-to-istanbul@npm:9.3.0" - dependencies: - "@jridgewell/trace-mapping": ^0.3.12 - "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^2.0.0 - checksum: ded42cd535d92b7fd09a71c4c67fb067487ef5551cc227bfbf2a1f159a842e4e4acddaef20b955789b8d3b455b9779d036853f4a27ce15007f6364a4d30317ae - languageName: node - linkType: hard - "validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -19443,6 +17681,21 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard +"vite-node@npm:2.1.9": + version: 2.1.9 + resolution: "vite-node@npm:2.1.9" + dependencies: + cac: ^6.7.14 + debug: ^4.3.7 + es-module-lexer: ^1.5.4 + pathe: ^1.1.2 + vite: ^5.0.0 + bin: + vite-node: vite-node.mjs + checksum: 716d37649834ecea547b43121ee89b2e4f9ca65ff6ce26214770ecfefe070b8c7245c9fdd0f92fb232d266e153629d04af9a4dc4fc350abfa521e5e46434b7b2 + languageName: node + linkType: hard + "vite-plugin-dts@npm:4.3.0": version: 4.3.0 resolution: "vite-plugin-dts@npm:4.3.0" @@ -19479,7 +17732,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"vite@npm:^5.4.12": +"vite@npm:^5.0.0, vite@npm:^5.4.14": version: 5.4.14 resolution: "vite@npm:5.4.14" dependencies: @@ -19522,6 +17775,56 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard +"vitest@npm:^2.1.9": + version: 2.1.9 + resolution: "vitest@npm:2.1.9" + dependencies: + "@vitest/expect": 2.1.9 + "@vitest/mocker": 2.1.9 + "@vitest/pretty-format": ^2.1.9 + "@vitest/runner": 2.1.9 + "@vitest/snapshot": 2.1.9 + "@vitest/spy": 2.1.9 + "@vitest/utils": 2.1.9 + chai: ^5.1.2 + debug: ^4.3.7 + expect-type: ^1.1.0 + magic-string: ^0.30.12 + pathe: ^1.1.2 + std-env: ^3.8.0 + tinybench: ^2.9.0 + tinyexec: ^0.3.1 + tinypool: ^1.0.1 + tinyrainbow: ^1.2.0 + vite: ^5.0.0 + vite-node: 2.1.9 + why-is-node-running: ^2.3.0 + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.9 + "@vitest/ui": 2.1.9 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 20db77529f843930ef1626103c898b27528d6d68d6c44753ec823e318f26bbdeb3bc56e6fb80e3f1ecc34382107d32e1f4e709e23198f414fecc9298ab225fa8 + languageName: node + linkType: hard + "vscode-languageserver-types@npm:^3.17.1": version: 3.17.5 resolution: "vscode-languageserver-types@npm:3.17.5" @@ -19536,15 +17839,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"w3c-xmlserializer@npm:^4.0.0": - version: 4.0.0 - resolution: "w3c-xmlserializer@npm:4.0.0" - dependencies: - xml-name-validator: ^4.0.0 - checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 - languageName: node - linkType: hard - "w3c-xmlserializer@npm:^5.0.0": version: 5.0.0 resolution: "w3c-xmlserializer@npm:5.0.0" @@ -19561,15 +17855,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - "watchpack@npm:2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" @@ -19626,15 +17911,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"whatwg-encoding@npm:^2.0.0": - version: 2.0.0 - resolution: "whatwg-encoding@npm:2.0.0" - dependencies: - iconv-lite: 0.6.3 - checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 - languageName: node - linkType: hard - "whatwg-encoding@npm:^3.1.1": version: 3.1.1 resolution: "whatwg-encoding@npm:3.1.1" @@ -19644,13 +17920,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "whatwg-mimetype@npm:3.0.0" - checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 - languageName: node - linkType: hard - "whatwg-mimetype@npm:^4.0.0": version: 4.0.0 resolution: "whatwg-mimetype@npm:4.0.0" @@ -19658,16 +17927,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"whatwg-url@npm:^11.0.0": - version: 11.0.0 - resolution: "whatwg-url@npm:11.0.0" - dependencies: - tr46: ^3.0.0 - webidl-conversions: ^7.0.0 - checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af - languageName: node - linkType: hard - "whatwg-url@npm:^14.0.0": version: 14.1.0 resolution: "whatwg-url@npm:14.1.0" @@ -19810,6 +18069,18 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 58ebbf406e243ace97083027f0df7ff4c2108baf2595bb29317718ef207cc7a8104e41b711ff65d6fa354f25daa8756b67f2f04931a4fd6ba9d13ae8197496fb + languageName: node + linkType: hard + "wordwrap@npm:>=0.0.2": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" @@ -19857,16 +18128,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.2": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c - languageName: node - linkType: hard - "write-file-atomic@npm:^6.0.0": version: 6.0.0 resolution: "write-file-atomic@npm:6.0.0" @@ -19907,7 +18168,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"ws@npm:^8.11.0, ws@npm:^8.18.0": +"ws@npm:^8.18.0": version: 8.18.0 resolution: "ws@npm:8.18.0" peerDependencies: @@ -19922,13 +18183,6 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"xml-name-validator@npm:^4.0.0": - version: 4.0.0 - resolution: "xml-name-validator@npm:4.0.0" - checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad - languageName: node - linkType: hard - "xml-name-validator@npm:^5.0.0": version: 5.0.0 resolution: "xml-name-validator@npm:5.0.0" @@ -20042,7 +18296,7 @@ react-mathquill@Entkenntnis/tmp-react-mathquill: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.3.1": +"yargs@npm:^17.0.0": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: