diff --git a/.eslintrc.cjs b/.eslintrc.cjs index d03e7400e..c3536e1aa 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,51 +1,45 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ module.exports = { root: true, - parser: '@typescript-eslint/parser', + env: { browser: true, es2020: true }, extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - 'plugin:svelte/recommended', + "eslint:recommended", + "plugin:@typescript-eslint/recommended-type-checked", + "plugin:react-hooks/recommended", + "plugin:react/recommended", + "plugin:react/jsx-runtime", ], + ignorePatterns: [ + "dist", + ".eslintrc.cjs", + "deployment.cjs", + "bin/**/*.js", + "bootstrap-template.js", + "playwright.config.ts", + "CMakeFiles", + ], + parser: "@typescript-eslint/parser", parserOptions: { - ecmaVersion: 2020, - sourceType: 'module', + ecmaVersion: "latest", + sourceType: "module", + project: ["./tsconfig.json", "./tsconfig.node.json"], tsconfigRootDir: __dirname, - project: ['./tsconfig.json'], - extraFileExtensions: ['.svelte'], + }, + plugins: ["react-refresh"], + settings: { + react: { + version: "18", + }, }, rules: { - "@typescript-eslint/no-unused-vars": [ - warn, - { - argsIgnorePattern: "^_" - } + // More trouble than it's worth + "react/no-unescaped-entities": "off", + // False positives from library imports from Chakra UI + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/no-misused-promises": [ + "error", + { + checksVoidReturn: false, + }, ], }, - env: { - browser: true, - es6: true, - node: true, - }, - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser', - }, - }, - ], - plugins: ['@typescript-eslint'], - ignorePatterns: [ - 'node_modules', - 'svelte.config.js', - '.eslintrc.cjs', - 'babel.config.cjs', - ], }; diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2029a1620..9cde5e4c4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ on: types: [created] push: branches: - - '**' + - "**" concurrency: group: ${{ github.workflow }}-${{ startsWith(github.ref, 'refs/tags/v') && 'release' || github.ref }} @@ -30,19 +30,30 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 20 - cache: 'npm' - registry-url: 'https://npm.pkg.github.com' + cache: "npm" + registry-url: "https://npm.pkg.github.com" + - uses: microbit-foundation/npm-package-versioner-action@v1 - run: npm ci - - run: npm install --no-save @microbit-foundation/website-deploy-aws@0.6 @microbit-foundation/website-deploy-aws-config@0.9 @microbit-foundation/npm-package-versioner@2 + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - run: npm install --no-save @microbit-foundation/ml-trainer-microbit@0.2.0-dev.9 @microbit-foundation/website-deploy-aws@0.6 @microbit-foundation/website-deploy-aws-config@0.9 if: github.repository_owner == 'microbit-foundation' env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - run: npx update-ci-version - run: node ./bin/print-ci-env.cjs >> $GITHUB_ENV - - run: npm run test - - run: npm run check - - run: npx prettier --check src - - run: npm run build + - run: npm run ci + - name: Run Playwright tests + if: env.STAGE == 'REVIEW' || env.STAGE == 'STAGING' + uses: docker://mcr.microsoft.com/playwright:v1.45.0-jammy + with: + args: npx playwright test + - name: Store reports + if: (env.STAGE == 'REVIEW' || env.STAGE == 'STAGING') && failure() + uses: actions/upload-artifact@v4 + with: + name: playwright-report + path: playwright-report/ + retention-days: 3 - run: npx website-deploy-aws if: github.repository_owner == 'microbit-foundation' && (env.STAGE == 'REVIEW' || success()) env: diff --git a/.github/workflows/pr-url.yml b/.github/workflows/pr-url.yml index ebef8b41e..b3c8cb449 100644 --- a/.github/workflows/pr-url.yml +++ b/.github/workflows/pr-url.yml @@ -1,4 +1,4 @@ -name: 'pr-url' +name: "pr-url" on: pull_request: types: [opened] @@ -8,5 +8,5 @@ jobs: steps: - uses: microbit-foundation/action-pr-url-template@v0.1.2 with: - uri-template: 'https://review-ml.microbit.org/{branch}' + uri-template: "https://review-createai.microbit.org/{branch}/" repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index d26ae032d..c78e4dcff 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ .env.* /src/.DS_Store +/playwright-report/ +/test-results/ diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..d617cf0a4 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@microbit-foundation:registry=https://npm.pkg.github.com/microbit-foundation diff --git a/.prettierignore b/.prettierignore index 4958c8934..f4752710f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,2 @@ -src/translations.ts \ No newline at end of file +src/translations.ts +src/messages/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/.prettierrc @@ -0,0 +1 @@ +{} diff --git a/.prettierrc.cjs b/.prettierrc.cjs index 476b1aa8e..2c7a883e7 100644 --- a/.prettierrc.cjs +++ b/.prettierrc.cjs @@ -7,12 +7,8 @@ module.exports = { arrowParens: 'avoid', singleQuote: true, printWidth: 90, - plugins: ['prettier-plugin-svelte'], + plugins: [], semi: true, - svelteSortOrder: 'options-styles-scripts-markup', - svelteStrictMode: false, bracketSameLine: true, - svelteAllowShorthand: true, - svelteIndentScriptAndStyle: true, trailingComma: 'all', }; diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index ebb8cfbba..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,141 +0,0 @@ -# Change log - -Notable changes to the project will be archieved here - - -## [1.8.1](https://gitlab.au.dk/au-cs-ceed/ml-microbit-browser/-/releases/v1.8.1) - 11/01 - 2023 -Fixes some problems after reaching feature parity between DR and master release branches - -### Changed -- Removes ID field from menu properties -- Moved management of menus out of svelte components - -### Fixed -- Fixed type errors and warnings for graph components -- Cookie banner can now select language -- Fixed a bug with predictions causing NaN confidence - -## [1.8.0](https://gitlab.au.dk/au-cs-ceed/ml-microbit-browser/-/releases/v1.8.0) - 22/12 - 2022 -Jest has been introduced! And with it comes the promise of stability. In addition, some graphical and translation issues has been addressed. - -### Added -- Jest has been introduced (see `src/__tests__/` for examples on how they work) -- Tests for finding unused translations -- Tests for inconsistencies in the translations, such as having to include both an english and danish translation of a phrase. -- Both english and danish translations must be of equal length - -### Fixed -- Thanks to jest we have found several issues with the translation, which has been addressed, including removing unused/redundant translations -- The highlights on the pattern matrix now disappears when moving outside the drawing area. - -## [1.7.0](https://gitlab.au.dk/au-cs-ceed/ml-microbit-browser/-/releases/v1.2.0) - 1/12 - 2022 -Jest has been introduced! And with it comes the promise of stability. In addition, some graphical and translation issues has been addressed. - -### Added -- Jest has been introduced (see `src/__tests__/` for examples on how they work) -- Tests for finding unused translations -- Tests for inconsistencies in the translations, such as having to include both an english and danish translation of a phrase. -- Both english and danish translations must be of equal length - -### Fixed -- Thanks to jest we have found several issues with the translation, which has been addressed, including removing unused/redundant translations -- The highlights on the pattern matrix now disappears when moving outside the drawing area. - -## [1.6.0](https://gitlab.au.dk/au-cs-ceed/ml-microbit-browser/-/releases/v1.1.0) - 22/11 - 2022 -Introduces a new pairing pattern system -### Added -- Pairing pattern now automatically fills out squares beneath the targeted square. In addition it outlines any squares below the one that is currently being hovered over. -- The ConnectionBehaviour callback promptOpen is now fired when the connection prompt opens. - -### Fixed -- The information icon is now fixed in place on recorded gestures. Before it would move when scrolling the page -- Spinning icon no longer escapes the menu box after a model has been trained. -- Information icons no longer have higher z-index priority over the control-bar -- Failed connectivity errors that would occur when the micro:bit was successfully connected but loses connection before adding the listener to the services such as accelerometer are now caught and display a 'connection failed' message. -- Added some missing translations for prompts when deleting tests/gestsures -- Reduced the overflow issue that would cause the left hand side menu to overflow when testcenter was open on chromebooks. It is still an issue, but now the home button is accessible. -- Swapped the outline on the bottom input graph for a border, since it caused some graphical issues due to it being placed outside the container. - -## [1.5.0](https://gitlab.au.dk/au-cs-ceed/ml-microbit-browser/-/releases/v1.0.1) - 17/11 - 2022 -Welcome Jon, who has joined the project. - -This version was created to improve stability and transitioning the micro:bit firmware from MakeCode to C++. The C++ firmware can be found as a repository under the AU CS CEED group. -### Added -- Added Dialog box component for contact information - -### Changed -- Removed top bar from DataPage -- Many styling changes to support the upcoming DR-release - -### Fixed -- Flashing error handling. Now gives appropriate feedback -- Alignment issues -- Issues only present on chromebook -- Fixed a null pointer exception that was thrown when resizing the overlay on the output page. -- Closed issue where the pairing pattern would sometimes be wrong on the micro:bit. Issue could not be replicated after new HEX file. -- Fixed text alignment issue on the left hand side menus. Text was not align vertically to the center when collapsed. -- Improved solution for handling failed flashes / get friendly name. Now these should be caught with the promise.catch(e) statement. -- Fixed some connectivity issues on the micro:bit. This was caused by using too little power for the transmission component of the BLE. - - - -## [1.4.0] - 6/10 - 2022 -This release signifies the last release before the DR-cooperation project starts -### Added -- Added compatibility checking for USB and bluetooth -- Added connect with USB step -- Added skeletal animations - -### Changed -- Now allows for multi-line information boxes - -### Fixed -- Fixed the model-page no-output overlay issue - - - -## [1.3.0] - 6/10 - 2022 - -### Added -- Cookie banner and cookie manager -- Introduced a standardized button -- Added Generic Modal -- MicrobitUSB now has an event-emitting implementation -- MicrobitBluetooth can now emit events - - -### Changed -- Reduced the usage of z-layer or reduced their values, keeping them from going wild -- Completely overhauled the code structure, using less position: absolute - -### Fixed -- One can no longer close while transferral is in progress - - -## [1.2.0] - 1/09 - 2022 - -### Added - - Added pairing pattern connection - - Added new connection flow - - Added flashing .hex files through USB - - MBSpecs, a microbit specification file for details such as UUIDs for bluetooth services - -### Changed -- Added interfaces that controls input/output seperately through implementation -- Many files converted to TypeScript - -### Fixed -- Fixed a bug, that caused failed data loading from localStorage - -## [1.1.0] - 30/06 - 2022 - -### Added - - Added support for v1 microbits - - Bluetooth wrapper for interacting with microbits - -### Changed -- Magic values replaced by configuration settings - -## [1.0.0] - 15/09 - 2021 - -Initial release of ML-Machine. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8b06b8b08..538b91576 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,67 +1,13 @@ -# Contributing +Thanks for looking here! We'd love your help. The micro:bit project is only +possible through contributions of companies and individuals around the world. -When contributing to this repository, please first discuss the change you wish to make via issue or any other method -with the maintainers of this repository before making a change. +This project is managed on GitHub, and the best way to contribute is to jump in +and fix/file issues. -Please note we have a code of conduct, please follow it in all your interactions with the project. +https://github.com/microbit-foundation/ml-trainer -## Pull Request Process +Significant features are best discussed first to make sure everyone is agreed +on the best direction. -1. Ensure any install or build dependencies are removed and the tests using `npm run test` are running successfully. -2. Update the README.md with details of changes to the interface, this includes new environment - variables and useful file locations, if applicable. -3. Increase the version numbers in any examples files and the README.md to the new version that this - Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). -4. Create a pull request describing the changes you have made, as briefly as possible. Maintainers may require further - detail or request changes. Avoid changing lines of code, that are unrelated to the change to avoid unnecessary code - ownership changes, such as inserting trailing commas or semicolons. -5. The pull request will be merged when at least two maintainers has accepted the changes. - -Thank you for considering contributing to the project! - -## Code of Conduct - -Please see Micro:bit Educational Foundation's [code of conduct](https://microbit.org/safeguarding/) which outlines our expectations for all those that participate in the community and details on how to report any concerns and what would happen should breaches occur. - -### Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -We stride to make learning an empowering experience for all and constantly weigh the balance between accessibility and -complexity on our platform. - -### Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on the empowerment of learning -* Showing empathy towards other users or contributors - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -### Our Responsibilities - -Maintainers of ML-Machine have the responsibility of upholding code quality and interpreting the code of conduct and are -expected to make appropriate and fair decisions in response to behavior and changes. - -Maintainers have the right to remove, edit or reject any changes such as commits, code wiki edits and issues which are -not aligned with our pledge, standards or code of conduct, or to ban temporarily or permanently any contributor for -actions deemed inappropriate or harmful. \ No newline at end of file +The project uses [Prettier](https://prettier.io/) to format code so please +check out their documentation and set it up with your code editor. diff --git a/README.md b/README.md index c03eaa7e1..b7e34b250 100644 --- a/README.md +++ b/README.md @@ -1,174 +1,96 @@ -# ML-Machine +# ml-trainer -ML-Machine is a free and open-source interactive machine-learning platform, utilising external sensors to generate data, -which it can be trained to recognise. This allows for gesture recognition by recording examples of gestures performed by -the user, which the platform can learn and subsequently recognise. The external sensors are provided by the micro:bit -boards, which are communicated with through Bluetooth. When a gesture is recognised an auditory, visual or logical -feedback action is taken. +Train a machine learning model on movement data from the micro:bit's +accelerometer. Run it on your BBC micro:bit, building your own progam that uses +the machine learning model in Microsoft MakeCode. -To learn to recognise a gesture, a label is created for which a set of example movements with the micro:bit -is recorded. These recordings will be processed by a machine-learning algorithm to recognise future examples. To -differentiate the recording and feedback process we allow for two micro:bits to be connected. One will act as a -recording, or input device and another will act as feedback, or output device. +Try it at https://createai.microbit.org -
- -
+## History -## Building ML-Machine +This repository is derived from [ML-Machine](https://ml-machine.org) +([GitHub](https://github.com/microbit-foundation/cctd-ml-machine.)), a free and +open-source interactive machine-learning platform from the [Center for +Computational Thinking and Design at Aarhus University](https://cctd.au.dk/). -ML-Machine can be found at [ML-Machine.org](https://ml-machine.org/) free to use. -Using the platform requires at least one micro:bit, but two is recommended, especially if you are planning on using any -of the I/O feedback. +Significant changes have been made to align with the tech stack of other +Micro:bit Educational Foundation applications, add and remove features, and +revise the user experience for some features also in ML-Machine. We encourage +you to review both projects and see which best fits your needs. -You can find the version on the main branch at [main.ML-Machine.org](https://main.ml-machine.org/). It will have the newest features but may not be stable and features will be removed or changed without any warnings so do not rely on this version. +## Building and running the app -### Running the application locally +Getting up and running: -Alternatively the application can be run locally on your computer without compromising the capabilities of the software. +1. Ensure you have a working [Node.js environment](https://nodejs.org/en/download/). We recommend using the LTS version of Node. +2. Checkout this repository with Git. GitHub have some [learning resources for Git](https://docs.github.com/en/get-started/quickstart/git-and-github-learning-resources) that you may find useful. +3. Install the dependencies by running `npm install` on the command line in the checkout folder. +4. Choose from the NPM scripts documented below. Try `npm start` if you're not sure. -1. Ensure you have [nodejs](https://nodejs.org/) and the package manager [npm](https://www.npmjs.com/) -2. Download or clone this repository -3. In the terminal, run command `npm install` inside the project directory. -4. Once installed, run `npm run dev` to launch the application. -5. Access the application from http://localhost:5173/ +### `npm run dev` -List of commands can be found below. +Runs the app in the development mode. +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. -### ```npm run dev``` +The page will reload if you make edits. -This starts the development environment using Vite. This should be used when developing as it supports hot-reload/live reload. +This does not show TypeScript or lint errors. +Use the eslint plugin for your editor and consider also running `npm run typecheck:watch` to see full type checking errors. -We recommend starting here. +### `npm test` -### ```npm test``` +Launches the [test runner](https://vitest.dev/) in interactive mode (unless the `CI` environment variable is defined). +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. -Runs the test suite. Tests are driven by the framework [Vitest](https://vitest.dev/). Runs all tests inside the folder `./src/__tests__/`. +### `npm run build` -If you do not plan to contribute to the project, you may safely ignore this. +Builds the app for production to the `dist` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. -### ```npm run check``` +## Deployments -Runs the svelte-check procedure. This will check for various usability issues, unused variables and checks types. This is seldom used, and equivalent checks are performed through Vite and Typescript. Use as a supplement when finalizing a commit. +Most users should use the supported Foundation deployment at https://createai.microbit.org/ -### ```npm run build``` +The editor is deployed by [GitHub actions](https://github.com/microbit-foundation/ml-trainer/actions). -Creates a build for the application. Using Vite, the application will be built and placed in the `./dist/` folder. - -Use this if you are going to deploy the application on a webserver, or if you wish to use `npm start` to run the application. - -### ```npm start``` - -This starts a server, hosting the contents of `./dist/`. This folder is built by running `npm run build`. - -This will expose the application to the network on the default port (5173). - - -### Hex files - -Programs on your micro:bit is contained inside the .hex format files. The files we use can be found in `./public/firmware/`. -The file must be uploaded to your micro:bit in order to use the application. - -Note: The application can upload the program to the micro:bit, there is no need for manual installation of hex files prior to launching the application. - -The source code for these programs are written in c++ and can be found in the folder `./microbit/`. - -If you wish to alter the micro:bit programs, you will need a few tools that depends on which micro:bit version you wish to build for. In the folder `./microbit/` lies a README.md with further instructions, which you can visit by clicking [here](./microbit/) - -## Using ML-Machine - -### Connecting your micro:bit - -The micro:bit can be connected via Bluetooth. The micro:bit requires a specific firmware to be able to communicate with -the platform effectively. The firmware can be acquired as a .hex file which can be manually transferred using your PC's -file system, alternatively, if the micro:bit is connected via USB the platform can automatically upload the firmware to -the micro:bit directly. - -### Creating gestures and recording examples - -To create a gesture go to the data tab through the menu on the left side of the page. Then click the big plus icon to -create an empty gesture and give it a title. - -To record an example ensure that a micro:bit has been connected and select the newly created gesture. Press either of -the buttons in the micro:bit and perform the gesture you wish to recognise immediately. You can do this as many times as -you would like. The more example you give for the gesture, the more confident the algorithm will be in recognising the -gesture in the future. - -### Training the model - -To train the predictive model on the given gesture examples, go to the trainer tab of the menu. Select the train model -option and wait until it has finished. The time this takes is dependent on how many examples you gave each gesture and -how many gestures the model has to learn. - -### Recognising gestures - -The model will attempt to predict which gesture is being performed immediately after training. Go to the model tab to -configure the feedback actions, which will be taken when the model makes a prediction. - -### Configuring prediction and feedback - -In the model tab several options become available once the model has been trained. These can be changed to alter the -behaviour of the platform and micro:bits. - -#### Confidence threshold - -Determines how confident the model has to be for a feedback action to be taken for the given gesture. This is a slider -located to the right of the label and can be adjusted to make the model more sensitive, the default value is 80%, and -can be changes for each gesture. - -Immediately besides it, a confidence-meter shows how confident the model currently is and will change as you perform -gestures. - -#### Changing the LEDs for output micro:bit - -Determines which LEDs on the display of the micro:bit will be lit up when the gesture is detected. This is - -#### Sound feedback - -Determines which sound clip will be played when a gesture is recognised. Depending on which version of micro:bit you -have, the sound will be output on the speaker of the micro:bit or on your computer, if the micro:bit doesn't support -speaker audio. - -#### I/O feedback - -Select the I/O pin you wish to turn on in response to a gesture detection. Combine this with circuitry to make gesture -recognition perform actions outside the platform such as turning on motors or LEDs. - -### Dependencies - -ML-Machine utilises several packages, most notable of which are the following: - -- [Svelte](https://github.com/sveltejs/svelte) provides the web-development framework. -- [Windi CSS](https://github.com/windicss/windicss) provides our styling tool. -- [TensorFlow.js](https://github.com/tensorflow/tfjs) provides machine learning capabilities. -- [Smoothie Charts](https://github.com/joewalnes/smoothie) and [chart.js](https://github.com/chartjs/Chart.js) provides - a visualisation kit. - -## Contributions - -#### Issues +## License -If you experience an issue or have a question regarding the platform please do not hesitate to raise an issue. The -maintainers will answer to any issues raised as quickly as possible. +This software is under the MIT open source license. -#### Code contributions +[SPDX-License-Identifier: MIT](LICENSE) -If you have an improvement on you wish to share with please read the [contributing](CONTRIBUTING.md) page. There you -will find information about how to contribute. The maintainers will review the changes as soon as possible. +Significant code is derived from ML-Machine (also MIT licensed) and is (c) +Center for Computational Thinking and Design at Aarhus University and +contributors. See individual file copyright notices for more details. -### Credits +Conceptually this project draws heavily on the work done by the Center for Computational Thinking and Design at Aarhus University (see [CCTD.dk](https://cctd.au.dk)) and we're hugely grateful for their ongoing support and collaboration. -ML-Machine is a platform created by the Center for Computational Thinking and Design (see [CCTD.dk](https://cctd.au.dk)) at Aarhus University for empowering education in the emerging fields of technology and computation. +We use dependencies via the NPM registry as specified by the package.json file +under common Open Source licenses. -## License +Full details of each package can be found by running `license-checker`: -[MIT](LICENSE) © Center for Computational Thinking and Design at Aarhus University and contributors. +```bash +$ npx license-checker --direct --summary --production +``` -We use dependencies via the NPM registry as specified by the package.json file under common Open Source licenses. +Omit the flags as desired to obtain more detail. -The repository includes forks of Lancaster's micro:bit-samples repositories for micro:bit [V1](https://github.com/lancaster-university/microbit-samples) and [V2](https://github.com/lancaster-university/microbit-v2-samples). They are MIT licensed. +The repository includes forks of Lancaster's micro:bit-samples repositories for +micro:bit [V1](https://github.com/lancaster-university/microbit-samples) and +[V2](https://github.com/lancaster-university/microbit-v2-samples). They are MIT +licensed. ## Code of Conduct -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. Please see our code of conduct on the [contributing](CONTRIBUTING.md) page and Micro:bit Educational Foundation's [code of conduct](https://microbit.org/safeguarding/) which outlines our expectations for all those that participate in the community and details on how to report any concerns and what would happen should breaches occur. +Trust, partnership, simplicity and passion are our core values we live and +breathe in our daily work life and within our projects. Our open-source +projects are no exception. We have an active community which spans the globe +and we welcome and encourage participation and contributions to our projects +by everyone. We work to foster a positive, open, inclusive and supportive +environment and trust that our community respects the micro:bit code of +conduct. Please see our [code of conduct](https://microbit.org/safeguarding/) +which outlines our expectations for all those that participate in our +community and details on how to report any concerns and what would happen +should breaches occur. diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 6cb65a983..000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,15 +0,0 @@ -trigger: - - main - -pool: - vmImage: ubuntu-latest - -steps: - - checkout: self - submodules: true - - task: AzureStaticWebApp@0 - inputs: - app_location: '/' - api_location: 'api' - output_location: '/public' - azure_static_web_apps_api_token: $(deployment_token) \ No newline at end of file diff --git a/babel.config.cjs b/babel.config.cjs deleted file mode 100644 index 49d6c2a62..000000000 --- a/babel.config.cjs +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - presets: [ - ['@babel/preset-env', {targets: {node: 'current'}}], - ], - }; \ No newline at end of file diff --git a/bin/tidy-lang.cjs b/bin/tidy-lang.cjs new file mode 100644 index 000000000..37751f279 --- /dev/null +++ b/bin/tidy-lang.cjs @@ -0,0 +1,67 @@ +/** + * Sorts the strings in the lang/*.json source files so we + * don't have to care about where we add new strings. + */ +const fs = require("fs"); +const path = require("path"); + +// This is just a best effort check that variables haven't been changed. +const areTranslationsValid = (file, enJson, translatedJson) => { + let valid = true; + const keys = Object.keys(enJson); + for (const k of keys) { + const en = enJson[k].defaultMessage; + const translated = translatedJson[k].defaultMessage; + if (en.match(/, plural/)) { + // Skip ICU strings as we don't understand them. + continue; + } + const variablesEn = new Set(en.match(variableRegExp) ?? []); + const variablesTranslated = new Set(translated.match(variableRegExp) ?? []); + const areSetsEqual = (a, b) => + a.size === b.size && Array.from(a).every((value) => b.has(value)); + if (!areSetsEqual(variablesEn, variablesTranslated)) { + if (valid) { + console.error(file); + valid = false; + } + console.error(` ${en}`); + console.error(` ${translated}`); + console.error(` Differing variables!`); + console.error(); + } + } + return valid; +}; + +const variableRegExp = /({[a-zA-Z0-9]+})/g; + +const valid = fs + .readdirSync("lang") + .filter((f) => f.endsWith(".json")) + .map((messages) => { + const file = path.join("lang", messages); + const enFile = file.replace(/\.[a-z-]+\.json/, ".en.json"); + const en = JSON.parse(fs.readFileSync(enFile)); + const validKeys = new Set(Object.keys(en)); + const data = { + // Ensure we fallback to English even if we haven't roundtripped via Crowdin yet. + ...en, + ...JSON.parse(fs.readFileSync(file)), + }; + Object.keys(data).forEach((k) => { + if (!validKeys.has(k)) { + delete data[k]; + } + }); + const sortedKeys = Object.keys(data).sort(); + const result = Object.create(null); + sortedKeys.forEach((k) => (result[k] = data[k])); + fs.writeFileSync(file, JSON.stringify(result, null, 2)); + return areTranslationsValid(file, en, result); + }) + .reduce((prev, curr) => prev && curr, true); + +const okExitStatus = 0; +const seriousTroubleExistStatus = 2; +process.exit(valid ? okExitStatus : seriousTroubleExistStatus); diff --git a/ci.sh b/ci.sh deleted file mode 100755 index 2140b2e8a..000000000 --- a/ci.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -# This script is used to run the CloudFlare pages CI build. -# CloudFlare will automatically install the NPM dependencies. - -set -euxo pipefail - -# This lint step fails so disabled for now. Does it work upstream? -npm run check || echo "Temporarily allowed to fail" - -# This is very close to passing. Two files need fixing to enable it. -npx prettier --check src || echo "Temporarily allowed to fail" - -npm run test -npm run build \ No newline at end of file diff --git a/deployment.cjs b/deployment.cjs index bb23bad1c..aec317135 100644 --- a/deployment.cjs +++ b/deployment.cjs @@ -1,53 +1,51 @@ const { createDeploymentDetailsFromOptions, -} = require('@microbit-foundation/website-deploy-aws-config'); -const posixPath = require('path/posix'); +} = require("@microbit-foundation/website-deploy-aws-config"); const { s3Config } = createDeploymentDetailsFromOptions({ production: { - bucket: 'ml.microbit.org', - mode: 'root', + bucket: "createai.microbit.org", + mode: "root", allowPrerelease: false, }, staging: { - bucket: 'stage-ml.microbit.org', + bucket: "stage-createai.microbit.org", }, review: { - bucket: 'review-ml.microbit.org', - mode: 'branch-prefix', + bucket: "review-createai.microbit.org", + mode: "branch-prefix", }, }); module.exports = { - deploymentDir: './dist', + deploymentDir: "./dist", ...s3Config, - // For non-review versions deploy to the prototype URL - bucketPrefix: s3Config.bucketPrefix ?? 'v/prototype', - region: 'eu-west-1', + region: "eu-west-1", removeNonexistentObjects: true, enableS3StaticWebsiteHosting: true, - errorDocumentKey: 'index.html', + errorDocumentKey: "index.html", redirects: [], params: { - '**/**.html': { - CacheControl: 'public, max-age=0, must-revalidate', + "**/**.html": { + CacheControl: "public, max-age=0, must-revalidate", }, - '**/assets/**': { CacheControl: 'public, max-age=31536000, immutable' }, + "**/assets/**": { CacheControl: "public, max-age=31536000, immutable" }, // There's lots in public/ that we'd ideally use the bundler for to improve caching - 'css/**': { - CacheControl: 'public, max-age=0, must-revalidate', + // TODO: this might no longer be true, or at least be an easy fix + "css/**": { + CacheControl: "public, max-age=0, must-revalidate", }, - 'firmware/**': { - CacheControl: 'public, max-age=0, must-revalidate', + "firmware/**": { + CacheControl: "public, max-age=0, must-revalidate", }, - 'imgs/**': { - CacheControl: 'public, max-age=0, must-revalidate', + "imgs/**": { + CacheControl: "public, max-age=0, must-revalidate", }, - 'sounds/**': { - CacheControl: 'public, max-age=0, must-revalidate', + "sounds/**": { + CacheControl: "public, max-age=0, must-revalidate", }, - 'webfonts/**': { - CacheControl: 'public, max-age=0, must-revalidate', + "webfonts/**": { + CacheControl: "public, max-age=0, must-revalidate", }, }, }; diff --git a/index.html b/index.html index 893a90f74..4d21ebbaf 100644 --- a/index.html +++ b/index.html @@ -3,34 +3,37 @@ SPDX-License-Identifier: MIT --> - + - - micro:bit machine learning tool - + micro:bit CreateAI + + content="Create AI by training a machine learning model with your movement data, testing it to see if it works, then writing your own code to use it on a BBC micro:bit" + /> + content="Create AI on your BBC micro:bit using movement and machine learning" + /> - - - - + + - + diff --git a/lang/ui.en.json b/lang/ui.en.json new file mode 100644 index 000000000..433834b2b --- /dev/null +++ b/lang/ui.en.json @@ -0,0 +1,1134 @@ +{ + "about": { + "defaultMessage": "About", + "description": "Menu item link to view information about app" + }, + "about-dialog-alt": { + "defaultMessage": "micro:bit board showing a heart on the LED display", + "description": "Alt text for image in about dialog" + }, + "about-dialog-title": { + "defaultMessage": "Developed in partnership with Center for Computational Thinking and Design, Aarhus University", + "description": "Title of about dialog" + }, + "accelerometer-image-alt": { + "defaultMessage": "micro:bit showing X axis going across the front, Y axis going down and up, Z axis going back to front", + "description": "Alt text for image showing the board-relative directions of the X/Y/Z dimensions of the micro:bit accelerometer" + }, + "actions-label": { + "defaultMessage": "Actions", + "description": "Label for Actions" + }, + "actions.reconnect": { + "defaultMessage": "Reconnect", + "description": "" + }, + "add-data-intro-description": { + "defaultMessage": "Add samples of the actions you would like your model to recognise (e.g. ‘waving’ and ‘clapping’).", + "description": "Add data step home page description" + }, + "add-data-title": { + "defaultMessage": "Add data", + "description": "Add data step title" + }, + "alert.data.classNameLengthAlert": { + "defaultMessage": "Action names cannot be longer than {maxLen} characters.", + "description": "" + }, + "alert.deleteGestureConfirm": { + "defaultMessage": "Are you sure you want to delete the action \"{action}\"?", + "description": "" + }, + "alert.deleteGestureConfirmHeading": { + "defaultMessage": "Confirm delete action", + "description": "" + }, + "alert.recording.disconnectedDuringRecording": { + "defaultMessage": "micro:bit disconnected during recording", + "description": "" + }, + "back-action": { + "defaultMessage": "Back", + "description": "Back button text" + }, + "back-to-data-samples-action": { + "defaultMessage": "Back to data samples", + "description": "Back button text" + }, + "cancel-action": { + "defaultMessage": "Cancel", + "description": "Cancel button text" + }, + "close-action": { + "defaultMessage": "Close", + "description": "Close button text or label" + }, + "coming-soon": { + "defaultMessage": "Coming soon", + "description": "Placeholder text for future projects" + }, + "confirm-action": { + "defaultMessage": "Confirm", + "description": "Confirm button text" + }, + "confirm-save-action": { + "defaultMessage": "Confirm and save", + "description": "Confirm and save action label" + }, + "connect-help-alt": { + "defaultMessage": "WebUSB connection dialog with BBC micro:bit entry labelled 1 and Connect button labelled 2", + "description": "Alt text for image in connect help dialog" + }, + "connect-or-import": { + "defaultMessage": "Connect a data collection micro:bit or import data samples", + "description": "Empty data samples page text" + }, + "connect-radio-data-collection-microbit-description": { + "defaultMessage": "Connect the data collection micro:bit to this computer to download your machine learning MakeCode program to it. If you're wearing the data collection micro:bit, you may need to remove it.", + "description": "Connect radio data collection micro:bit dialog description" + }, + "connect-radio-data-collection-microbit-title": { + "defaultMessage": "Connect USB cable to the data collection micro:bit", + "description": "Connect radio data collection micro:bit dialog title" + }, + "connect-to-record-body": { + "defaultMessage": "Connect a micro:bit to record a data sample.", + "description": "Insufficient data modal content" + }, + "connect-to-record-title": { + "defaultMessage": "You don't have a micro:bit connected", + "description": "Connect to record modal title" + }, + "connectFailed.bluetooth1": { + "defaultMessage": "The connection to the micro:bit could not be established.", + "description": "" + }, + "connectFailed.bluetoothHeading": { + "defaultMessage": "Failed to connect to micro:bit", + "description": "" + }, + "connectFailed.bridge1": { + "defaultMessage": "The connection to the micro:bit connected to your computer could not be established.", + "description": "" + }, + "connectFailed.bridgeHeading": { + "defaultMessage": "Failed to connect to radio link micro:bit", + "description": "" + }, + "connectFailed.remote1": { + "defaultMessage": "The connection to the data collection micro:bit could not be established.", + "description": "" + }, + "connectFailed.remoteHeading": { + "defaultMessage": "Failed to connect to data collection micro:bit", + "description": "" + }, + "connectMB.bluetooth.cancelledConnection": { + "defaultMessage": "You didn't choose a micro:bit. Do you want to try again?", + "description": "" + }, + "connectMB.bluetooth.heading": { + "defaultMessage": "Connect using Web Bluetooth", + "description": "" + }, + "connectMB.bluetooth.invalidPattern": { + "defaultMessage": "The pattern you have drawn is invalid.", + "description": "" + }, + "connectMB.bluetoothStart.heading": { + "defaultMessage": "What you need to connect using Web Bluetooth", + "description": "" + }, + "connectMB.bluetoothStart.requirements1": { + "defaultMessage": "1 micro:bit", + "description": "" + }, + "connectMB.bluetoothStart.requirements2": { + "defaultMessage": "Computer", + "description": "" + }, + "connectMB.bluetoothStart.requirements2.subtitle": { + "defaultMessage": "with Internet, a USB port & Web Bluetooth", + "description": "" + }, + "connectMB.bluetoothStart.requirements3": { + "defaultMessage": "Micro USB cable", + "description": "" + }, + "connectMB.bluetoothStart.requirements4": { + "defaultMessage": "Battery holder", + "description": "" + }, + "connectMB.bluetoothStart.requirements4.subtitle": { + "defaultMessage": "with batteries", + "description": "" + }, + "connectMB.bluetoothStart.switchRadio": { + "defaultMessage": "Connect using micro:bit radio instead", + "description": "" + }, + "connectMB.connectBattery.heading": { + "defaultMessage": "Connect battery pack and disconnect USB", + "description": "" + }, + "connectMB.connectBattery.link": { + "defaultMessage": "You can attach the micro:bit to your wrist or an object", + "description": "" + }, + "connectMB.connectBattery.subtitle": { + "defaultMessage": "Disconnect the micro:bit from the computer and connect the battery pack.", + "description": "" + }, + "connectMB.connectCable.altText": { + "defaultMessage": "animation showing a USB cable being connected to the top of a micro:bit", + "description": "" + }, + "connectMB.connectCable.downloadProject.subtitle": { + "defaultMessage": "Connect a micro:bit to this computer with a USB cable to download your machine learning MakeCode program to it.", + "description": "" + }, + "connectMB.connectCable.heading": { + "defaultMessage": "Connect USB cable to micro:bit", + "description": "" + }, + "connectMB.connectCable.skip": { + "defaultMessage": "Skip: program already downloaded?", + "description": "" + }, + "connectMB.connectCable.subtitle": { + "defaultMessage": "Connect the micro:bit to this computer with a USB cable so that the data collection program can be downloaded to it.", + "description": "" + }, + "connectMB.connectCableMB1.heading": { + "defaultMessage": "Connect USB cable to micro:bit 1", + "description": "" + }, + "connectMB.connectCableMB1.subtitle": { + "defaultMessage": "Connect the first micro:bit to this computer with a USB cable so that the data collection program can be downloaded to it. This is the micro:bit you will use to collect data samples.", + "description": "" + }, + "connectMB.connectCableMB2.heading": { + "defaultMessage": "Connect USB cable to micro:bit 2", + "description": "" + }, + "connectMB.connectCableMB2.subtitle": { + "defaultMessage": "Connect a second micro:bit to this computer with a USB cable so that the radio link program can be downloaded to it. This radio link micro:bit will communicate with the data collection micro:bit.", + "description": "" + }, + "connectMB.connecting": { + "defaultMessage": "Connecting…", + "description": "" + }, + "connectMB.nextButton": { + "defaultMessage": "Next", + "description": "" + }, + "connectMB.outputMB.different": { + "defaultMessage": "Connect another micro:bit", + "description": "" + }, + "connectMB.outputMB.otherButton": { + "defaultMessage": "Other", + "description": "" + }, + "connectMB.outputMB.same": { + "defaultMessage": "Use the same micro:bit", + "description": "" + }, + "connectMB.outputMB.sameButton": { + "defaultMessage": "Same", + "description": "" + }, + "connectMB.pattern.heading": { + "defaultMessage": "Copy pattern", + "description": "" + }, + "connectMB.pattern.inputLabel": { + "defaultMessage": "Number of LEDs lit in column {colNum} on the micro:bit display", + "description": "" + }, + "connectMB.pattern.subtitle": { + "defaultMessage": "Copy the pattern displayed on the micro:bit.", + "description": "" + }, + "connectMB.radio.heading": { + "defaultMessage": "Connecting micro:bits", + "description": "" + }, + "connectMB.radioStart.heading": { + "defaultMessage": "What you need to connect using micro:bit radio", + "description": "" + }, + "connectMB.radioStart.requirements1": { + "defaultMessage": "2 micro:bits", + "description": "" + }, + "connectMB.radioStart.requirements1.subtitle": { + "defaultMessage": "V2 only", + "description": "" + }, + "connectMB.radioStart.requirements2": { + "defaultMessage": "Computer", + "description": "" + }, + "connectMB.radioStart.requirements2.subtitle": { + "defaultMessage": "with Internet & a USB port", + "description": "" + }, + "connectMB.radioStart.requirements3": { + "defaultMessage": "Micro USB cable", + "description": "" + }, + "connectMB.radioStart.requirements4": { + "defaultMessage": "Battery holder", + "description": "" + }, + "connectMB.radioStart.requirements4.subtitle": { + "defaultMessage": "with batteries", + "description": "" + }, + "connectMB.radioStart.switchBluetooth": { + "defaultMessage": "Connect using Web Bluetooth instead", + "description": "" + }, + "connectMB.reconnecting": { + "defaultMessage": "Reconnecting…", + "description": "" + }, + "connectMB.transferHex.altText": { + "defaultMessage": "animation of dragging a hex file from the downloads folder onto the micro:bit drive or device listed in the file explorer", + "description": "" + }, + "connectMB.transferHex.heading": { + "defaultMessage": "Transfer saved hex file to micro:bit", + "description": "" + }, + "connectMB.transferHex.manualDownload": { + "defaultMessage": "If the file did not automatically download then please download the file here.", + "description": "" + }, + "connectMB.transferHex.message": { + "defaultMessage": "Drag the hex file from your Downloads folder to the MICROBIT drive.", + "description": "" + }, + "connectMB.troubleshoot": { + "defaultMessage": "Troubleshoot problems with connecting to your micro:bit", + "description": "" + }, + "connectMB.troubleshooting": { + "defaultMessage": "Troubleshooting", + "description": "" + }, + "connectMB.tryAgain": { + "defaultMessage": "Try again", + "description": "" + }, + "connectMB.unsupportedMicrobit.ctaWithBluetooth": { + "defaultMessage": "Connect with Web Bluetooth", + "description": "" + }, + "connectMB.unsupportedMicrobit.explain": { + "defaultMessage": "Unfortunately, we only support using micro:bit V2 when connecting two micro:bits. You have connected a micro:bit V1.", + "description": "" + }, + "connectMB.unsupportedMicrobit.header": { + "defaultMessage": "micro:bit V1 is not supported for connecting two micro:bits", + "description": "" + }, + "connectMB.unsupportedMicrobit.withBluetooth": { + "defaultMessage": "Please use Web Bluetooth to connect to your micro:bit V1 instead.", + "description": "" + }, + "connectMB.unsupportedMicrobit.withoutBluetooth": { + "defaultMessage": "You can connect to micro:bit V1 using Web Bluetooth, however, this browser or device does not have Bluetooth enabled. How to enable Bluetooth.", + "description": "" + }, + "connectMB.usb.firmwareBroken.content1": { + "defaultMessage": "Connecting to the micro:bit failed because the firmware on your micro:bit is too old.", + "description": "" + }, + "connectMB.usb.firmwareBroken.content2": { + "defaultMessage": "You must update your firmware before you can connect to this micro:bit.", + "description": "" + }, + "connectMB.usb.firmwareBroken.content3": { + "defaultMessage": "Troubleshoot problems with connecting to your micro:bit", + "description": "" + }, + "connectMB.usb.firmwareBroken.heading": { + "defaultMessage": "Firmware update required", + "description": "" + }, + "connectMB.usb.firmwareBroken.skip": { + "defaultMessage": "Skip and transfer manually", + "description": "" + }, + "connectMB.usbDownloading.header": { + "defaultMessage": "Downloading program to micro:bit", + "description": "" + }, + "connectMB.usbDownloading.subtitle": { + "defaultMessage": "Please wait. Downloading program to micro:bit.", + "description": "" + }, + "connectMB.usbDownloadingMB1.header": { + "defaultMessage": "Downloading the data collection program", + "description": "" + }, + "connectMB.usbDownloadingMB2.header": { + "defaultMessage": "Downloading the radio link program", + "description": "" + }, + "connectMB.usbTryAgain.closeTabs1": { + "defaultMessage": "Another process is connected to this device.", + "description": "" + }, + "connectMB.usbTryAgain.closeTabs2": { + "defaultMessage": "Close any other tabs that may be using WebUSB (e.g. MakeCode, Python Editor, {appNameShort}), or unplug and replug the micro:bit before trying again.", + "description": "" + }, + "connectMB.usbTryAgain.heading": { + "defaultMessage": "Connect using WebUSB", + "description": "" + }, + "connectMB.usbTryAgain.replugMicrobit1": { + "defaultMessage": "A WebUSB error occurred.", + "description": "" + }, + "connectMB.usbTryAgain.replugMicrobit2": { + "defaultMessage": "Please:", + "description": "" + }, + "connectMB.usbTryAgain.replugMicrobit3": { + "defaultMessage": "check that this micro:bit does not have a battery pack connected", + "description": "" + }, + "connectMB.usbTryAgain.replugMicrobit4": { + "defaultMessage": "unplug and replug the USB cable", + "description": "" + }, + "connectMB.usbTryAgain.selectMicrobit": { + "defaultMessage": "You didn't select a micro:bit. Do you want to try again?", + "description": "" + }, + "connectMB.webPopup": { + "defaultMessage": "Select micro:bit", + "description": "" + }, + "connectMB.webPopup.instruction.heading": { + "defaultMessage": "In the next popup", + "description": "" + }, + "connectMB.webPopup.instruction1": { + "defaultMessage": "Choose your micro:bit", + "description": "" + }, + "connectMB.webPopup.webBluetooth.altText": { + "defaultMessage": "Web Bluetooth connection dialog with BBC micro:bit entry labelled 1 and Pair button labelled 2", + "description": "" + }, + "connectMB.webPopup.webBluetooth.instruction2": { + "defaultMessage": "Select 'Pair'", + "description": "" + }, + "connectMB.webPopup.webUsb.instruction2": { + "defaultMessage": "Select 'Connect'", + "description": "" + }, + "content.data.addAction": { + "defaultMessage": "Add action", + "description": "" + }, + "content.data.addActionWalkThrough": { + "defaultMessage": "Name an action you want the micro:bit to recognise", + "description": "" + }, + "content.data.addRecordingWalkThrough": { + "defaultMessage": "Press to record a data sample or press button B on your micro:bit.", + "description": "" + }, + "content.data.classHelpBody": { + "defaultMessage": "The type of movement you want {appNameFull} to recognise e.g. ‘waving’ or ‘clapping’.", + "description": "" + }, + "content.data.classPlaceholderNewClass": { + "defaultMessage": "Name of action", + "description": "" + }, + "content.data.classification": { + "defaultMessage": "Action", + "description": "" + }, + "content.data.controlbar.button.clearData": { + "defaultMessage": "Delete all data samples", + "description": "" + }, + "content.data.controlbar.button.downloadData": { + "defaultMessage": "Download all data samples", + "description": "" + }, + "content.data.controlbar.button.menu": { + "defaultMessage": "Data actions", + "description": "" + }, + "content.data.controlbar.button.uploadData": { + "defaultMessage": "Import data samples", + "description": "" + }, + "content.data.data": { + "defaultMessage": "Data samples", + "description": "" + }, + "content.data.dataDescription": { + "defaultMessage": "Short collections of movement data lasting approximately 2 seconds. Your data samples are only stored on your computer, they do not get sent to anyone else.", + "description": "" + }, + "content.data.deleteAction": { + "defaultMessage": "Delete action \"{action}\"", + "description": "" + }, + "content.data.deleteRecording": { + "defaultMessage": "Delete recording", + "description": "" + }, + "content.data.recordAction": { + "defaultMessage": "Record data for action \"{action}\"", + "description": "" + }, + "content.data.recording.button.cancel": { + "defaultMessage": "Cancel recording", + "description": "" + }, + "content.data.recordingDialog.go": { + "defaultMessage": "Go", + "description": "" + }, + "content.data.recordingDialog.recording": { + "defaultMessage": "Recording", + "description": "" + }, + "content.data.recordingDialog.title": { + "defaultMessage": "Record data for action \"{action}\"", + "description": "" + }, + "content.index.dataWarning.subtitleOne": { + "defaultMessage": "You have existing data samples and code that will be lost when you start a new session.", + "description": "" + }, + "content.index.dataWarning.subtitleTwo": { + "defaultMessage": "To save your work, download a hex file containing your data samples and code before continuing.", + "description": "" + }, + "content.index.dataWarning.title": { + "defaultMessage": "Existing data samples and code will be lost", + "description": "" + }, + "content.model.output.action.descriptionBody": { + "defaultMessage": "The type of movement you want {appNameFull} to recognise e.g. ‘waving’ or ‘clapping’.", + "description": "" + }, + "content.model.output.action.descriptionTitle": { + "defaultMessage": "Action", + "description": "" + }, + "content.model.output.certainty.descriptionBody": { + "defaultMessage": "How confident the model is that you are currently doing each action.", + "description": "" + }, + "content.model.output.certainty.descriptionTitle": { + "defaultMessage": "Certainty", + "description": "" + }, + "content.model.output.estimatedGesture.descriptionBody": { + "defaultMessage": "This is the action the model thinks you are currently doing.", + "description": "" + }, + "content.model.output.estimatedGesture.descriptionTitle": { + "defaultMessage": "Estimated action", + "description": "" + }, + "content.model.output.estimatedGesture.iconTitle": { + "defaultMessage": "Estimated action", + "description": "" + }, + "content.model.output.estimatedGesture.label": { + "defaultMessage": "Estimated action: \"{action}\"", + "description": "" + }, + "content.model.output.output.descriptionBody": { + "defaultMessage": "These MakeCode blocks will show icons for each action detected when you transfer your code and model to a micro:bit.", + "description": "" + }, + "content.model.output.output.descriptionTitle": { + "defaultMessage": "Output", + "description": "" + }, + "content.model.output.recognitionPoint": { + "defaultMessage": "Recognition point:", + "description": "" + }, + "content.trainer.description": { + "defaultMessage": "The computer program spots patterns or differences in your data samples, and uses these to build a mathematical model that allows {appNameFull} to recognise different actions when you move your micro:bit.", + "description": "" + }, + "content.trainer.failure.body": { + "defaultMessage": "The training did not result in a usable model. The reason for this is most likely the data used for training. If the data samples for different actions are too similar, this can result in issues in the training process.", + "description": "" + }, + "content.trainer.failure.header": { + "defaultMessage": "Training failed", + "description": "" + }, + "content.trainer.failure.todo": { + "defaultMessage": "Return to the Add data page and change your data.", + "description": "" + }, + "content.trainer.header": { + "defaultMessage": "Training a model", + "description": "" + }, + "content.trainer.training.title": { + "defaultMessage": "Training model…", + "description": "Progress title" + }, + "cookies-action": { + "defaultMessage": "Cookies", + "description": "Action to show dialog to choose website cookie preferences" + }, + "copied": { + "defaultMessage": "Copied", + "description": "Displayed as copy button text briefly after successful copy action" + }, + "copy-action": { + "defaultMessage": "Copy", + "description": "Copy button text" + }, + "data-collection-microbit": { + "defaultMessage": "Data collection micro:bit", + "description": "Data collection micro:bit image caption" + }, + "data-collection-microbit-label": { + "defaultMessage": "diagram showing data collection micro:bit being connected to a person's wrist", + "description": "Aria label for data collection image" + }, + "data-samples-title": { + "defaultMessage": "Data samples", + "description": "Data samples page title" + }, + "disconnectedWarning.bluetooth1": { + "defaultMessage": "The connection to the micro:bit has been lost.", + "description": "" + }, + "disconnectedWarning.bluetooth2": { + "defaultMessage": "Please check that the micro:bit:", + "description": "" + }, + "disconnectedWarning.bluetooth3": { + "defaultMessage": "is powered on (the red light on the back of the micro:bit should be on)", + "description": "" + }, + "disconnectedWarning.bluetooth4": { + "defaultMessage": "is close to the computer", + "description": "" + }, + "disconnectedWarning.bluetoothHeading": { + "defaultMessage": "micro:bit connection lost", + "description": "" + }, + "disconnectedWarning.bridge1": { + "defaultMessage": "The connection to the micro:bit connected to your computer has been lost.", + "description": "" + }, + "disconnectedWarning.bridgeHeading": { + "defaultMessage": "radio link micro:bit connection lost", + "description": "" + }, + "disconnectedWarning.remote1": { + "defaultMessage": "The connection to the data connection micro:bit has been lost.", + "description": "" + }, + "disconnectedWarning.remoteHeading": { + "defaultMessage": "data collection micro:bit connection lost", + "description": "" + }, + "dont-show-again": { + "defaultMessage": "Don't show this again", + "description": "Text to never show a dialog again" + }, + "download-project-choose-microbit-subtitle": { + "defaultMessage": "Downloading your project on to the same micro:bit will disconnect the micro:bit from the tool. You will need to reconnect the micro:bit if you want to record more data samples.", + "description": "Download project choose micro:bit dialog subtitle" + }, + "download-project-choose-microbit-title": { + "defaultMessage": "Which micro:bit do you want to use?", + "description": "Download project choose micro:bit dialog title" + }, + "download-project-different-microbit-option": { + "defaultMessage": "Different micro:bit", + "description": "Download project different micro:bit option" + }, + "download-project-intro-description": { + "defaultMessage": "Your program includes the machine learning model you created. The model runs on the micro:bit so you can use it without being connected to {appNameFull}.", + "description": "Download project intro dialog description" + }, + "download-project-intro-title": { + "defaultMessage": "Download your machine learning MakeCode project", + "description": "Download project intro dialog title" + }, + "download-project-same-microbit-option": { + "defaultMessage": "Same micro:bit", + "description": "Download project same micro:bit option" + }, + "edit-in-makecode-action": { + "defaultMessage": "Edit in MakeCode", + "description": "Edit in MakeCode button text" + }, + "feedback": { + "defaultMessage": "Feedback", + "description": "Action to open a feedback dialog" + }, + "footer.connectButton": { + "defaultMessage": "Connect", + "description": "" + }, + "footer.disconnectButton": { + "defaultMessage": "Disconnect", + "description": "" + }, + "footer.helpContent": { + "defaultMessage": "This graph shows movement data from the micro:bit's accelerometer in real time. Try moving your data collection micro:bit to see the X, Y and Z axes change. Each coloured line represents a different direction (dimension) you are moving the micro:bit in.", + "description": "" + }, + "footer.helpHeader": { + "defaultMessage": "Live graph", + "description": "" + }, + "get-started-action": { + "defaultMessage": "Get started", + "description": "Get started action" + }, + "help-label": { + "defaultMessage": "Help", + "description": "Help icon aria label" + }, + "help-support": { + "defaultMessage": "Help & support", + "description": "Link or menu item link to support site" + }, + "home-action": { + "defaultMessage": "Home", + "description": "Home button text" + }, + "homepage-description": { + "defaultMessage": "Train a machine learning model on your own movement data and run it on your micro:bit.", + "description": "Home page description" + }, + "homepage-how-it-works": { + "defaultMessage": "How it works", + "description": "Home page section heading" + }, + "homepage-projects": { + "defaultMessage": "Projects", + "description": "Home page section heading" + }, + "homepage-step-by-step": { + "defaultMessage": "Step by step", + "description": "Home page section heading" + }, + "homepage-subtitle": { + "defaultMessage": "Create AI on your BBC micro:bit using movement and machine learning.", + "description": "Home page subtitle" + }, + "homepage-video-alt": { + "defaultMessage": "Introductory video", + "description": "Home page video alt text" + }, + "homepage-video-prompt": { + "defaultMessage": "Watch the video to learn how to use {appNameFull}.", + "description": "Prompt to watch the video on the home page" + }, + "homepage.Link": { + "defaultMessage": "Home page", + "description": "" + }, + "insufficient-data-body": { + "defaultMessage": "You need at least 3 data samples for 2 actions to train the model.", + "description": "Insufficient data modal content" + }, + "insufficient-data-title": { + "defaultMessage": "You don't have enough data", + "description": "Insufficient data modal title" + }, + "language": { + "defaultMessage": "Language", + "description": "Language option text" + }, + "live-data-graph": { + "defaultMessage": "Live data graph", + "description": "Title for live data graph" + }, + "main-menu": { + "defaultMessage": "Main menu", + "description": "Main menu label" + }, + "menu.trainer.notConnected1": { + "defaultMessage": "You do not have a micro:bit connected", + "description": "" + }, + "menu.trainer.notConnected2": { + "defaultMessage": " Select the ‘Connect’ button to connect a micro:bit.", + "description": "" + }, + "menu.trainer.trainModelButton": { + "defaultMessage": "Train model", + "description": "" + }, + "more-edit-in-makecode-options": { + "defaultMessage": "More edit in MakeCode options", + "description": "Aria label for the additional actions menu to the right of the Edit in MakeCode button" + }, + "name-project": { + "defaultMessage": "Name your project", + "description": "Name your project header" + }, + "name-text": { + "defaultMessage": "Name", + "description": "Header for name field" + }, + "name-used-when": { + "defaultMessage": "The name is used when you save a file.", + "description": "Text under project name field" + }, + "newpage-continue-session-instruction": { + "defaultMessage": "To continue a saved session from a file please select a file.", + "description": "Instruction to users to continue a saved session from a file" + }, + "newpage-continue-session-subtitle": { + "defaultMessage": "Use a hex file or data samples file you saved to your computer to continue a session.", + "description": "Continue session subtitle" + }, + "newpage-continue-session-title": { + "defaultMessage": "Continue a saved session", + "description": "Continue session title" + }, + "newpage-heading-subtitle": { + "defaultMessage": "Run whole class sessions, easily share code with students and save progress", + "description": "Homepage heading subtitle" + }, + "newpage-last-session-date": { + "defaultMessage": "Date: {date}", + "description": "Last session date label" + }, + "newpage-last-session-name": { + "defaultMessage": "Name: {name}", + "description": "Last session name label" + }, + "newpage-last-session-none": { + "defaultMessage": "No session found", + "description": "Last session not found text" + }, + "newpage-last-session-title": { + "defaultMessage": "Open last session", + "description": "Open last session title" + }, + "newpage-new-session-subtitle": { + "defaultMessage": "Connect your micro:bit and collect movement data to build a machine learning model", + "description": "Start new session subtitle" + }, + "newpage-new-session-title": { + "defaultMessage": "New session", + "description": "Start new session title" + }, + "newpage-section-one-title": { + "defaultMessage": "Pick up where you left off", + "description": "Homepage section one title" + }, + "newpage-section-two-title": { + "defaultMessage": "Start something new", + "description": "Homepage section two title" + }, + "newpage-subtitle": { + "defaultMessage": "Introduce students to machine learning concepts through physical movement and data", + "description": "Subtitle of micro:bit AI creator home page" + }, + "newpage-title": { + "defaultMessage": "New session", + "description": "New page title" + }, + "no-data-samples": { + "defaultMessage": "No data samples", + "description": "Empty data samples page status text" + }, + "not-found": { + "defaultMessage": "{appNameFull} home page", + "description": "Page not found link text" + }, + "not-found-title": { + "defaultMessage": "Page not found", + "description": "Page not found page title" + }, + "open-file-action": { + "defaultMessage": "Open…", + "description": "Open file button text" + }, + "open-file-dropped": { + "defaultMessage": "Open file when dropped", + "description": "Aria label for file drop target" + }, + "popup.compatibility.advice": { + "defaultMessage": "We recommend Google Chrome or Microsoft Edge so you can connect directly to your micro:bit.", + "description": "" + }, + "popup.compatibility.explain": { + "defaultMessage": "Unfortunately, WebUSB and Web Bluetooth are not supported by this browser. This means you cannot connect to a micro:bit to record the data samples needed to train a machine learning model.", + "description": "" + }, + "popup.compatibility.header": { + "defaultMessage": "This browser is not supported", + "description": "" + }, + "privacy": { + "defaultMessage": "Privacy policy", + "description": "Link to view privacy policy" + }, + "project-loaded": { + "defaultMessage": "Project loaded", + "description": "Toast when a new project is loaded" + }, + "project-name-not-empty": { + "defaultMessage": "The project name cannot be empty", + "description": "Validation message for project name" + }, + "radio-link-microbit": { + "defaultMessage": "Radio link micro:bit", + "description": "Radio link micro:bit image caption" + }, + "radio-link-microbit-label": { + "defaultMessage": "diagram showing radio link micro:bit being connected with a computer", + "description": "Aria label for radio link image" + }, + "reconnectFailed.bluetooth1": { + "defaultMessage": "The connection to the micro:bit could not be re-established.", + "description": "" + }, + "reconnectFailed.bluetoothHeading": { + "defaultMessage": "Failed to reconnect to micro:bit", + "description": "" + }, + "reconnectFailed.bridge1": { + "defaultMessage": "The connection to the micro:bit connected to your computer could not be re-established.", + "description": "" + }, + "reconnectFailed.bridgeHeading": { + "defaultMessage": "Failed to reconnect to radio link micro:bit", + "description": "" + }, + "reconnectFailed.radioHeading": { + "defaultMessage": "Failed to reconnect to micro:bits", + "description": "" + }, + "reconnectFailed.remote1": { + "defaultMessage": "The connection to the data collection micro:bit could not be re-established.", + "description": "" + }, + "reconnectFailed.remoteHeading": { + "defaultMessage": "Failed to reconnect to data collection micro:bit", + "description": "" + }, + "reconnectFailed.subtitle": { + "defaultMessage": "Follow these instructions to restart the connection process.", + "description": "" + }, + "reload-action": { + "defaultMessage": "Click to reload the page", + "description": "Reload page button text" + }, + "reset-to-default-action": { + "defaultMessage": "Reset to default blocks", + "description": "Reset to default blocks button text" + }, + "save-action": { + "defaultMessage": "Save", + "description": "Label for action that saves the project as a file the user downloads" + }, + "save-hex-dialog-heading": { + "defaultMessage": "Save project as a hex file", + "description": "Heading for the dialog shown when saving a hex file" + }, + "save-hex-dialog-message1": { + "defaultMessage": "The download contains your actions, data samples and your MakeCode project. Open it in {appNameFull} to continue working.", + "description": "Text in the dialog shown when saving a hex file" + }, + "save-hex-dialog-message2": { + "defaultMessage": "You can also open it with Microsoft MakeCode if you don't need to change the actions and data samples.", + "description": "Text in the dialog shown when saving a hex file" + }, + "saving-description": { + "defaultMessage": "Your download will be ready soon.", + "description": "Saving progress dialog text" + }, + "saving-title": { + "defaultMessage": "Saving…", + "description": "Saving progress title" + }, + "saving-toast-title": { + "defaultMessage": "Your hex file has been downloaded", + "description": "Notification after a hex file has been downloaded" + }, + "settings-menu-action": { + "defaultMessage": "Settings actions menu", + "description": "Label for settings actions menu button" + }, + "skip-tour-action": { + "defaultMessage": "Skip tour", + "description": "Skip tour button text" + }, + "software-versions": { + "defaultMessage": "Software versions", + "description": "Software versions text" + }, + "start-training-action": { + "defaultMessage": "Start training", + "description": "Start training button text" + }, + "steps-code": { + "defaultMessage": "Code", + "description": "Step in home page diagram" + }, + "steps-collect-data": { + "defaultMessage": "Collect data", + "description": "Step in home page diagram" + }, + "steps-improve": { + "defaultMessage": "Improve", + "description": "Step in home page diagram" + }, + "steps-test-model": { + "defaultMessage": "Test model", + "description": "Step in home page diagram" + }, + "steps-train": { + "defaultMessage": "Train", + "description": "Step in home page diagram" + }, + "support-request": { + "defaultMessage": "Please consider raising a support request.", + "description": "Support request link text" + }, + "terms": { + "defaultMessage": "Terms of use", + "description": "Link or menu item link to view terms of use" + }, + "test-model-intro-description": { + "defaultMessage": "Find out if it correctly recognises each action. Add more data to improve the model.", + "description": "Test model step home page description" + }, + "test-model-title": { + "defaultMessage": "Test model", + "description": "Test model step title" + }, + "testing-model-title": { + "defaultMessage": "Testing model", + "description": "Testing model page title" + }, + "tour-collectData-addActions-content": { + "defaultMessage": "Decide what your other actions will be and what you will name them. You need at least 2 actions with 3 data samples to train the model. Your data samples are only stored on your computer, they do not get sent to anyone else.", + "description": "Tour step description" + }, + "tour-collectData-addActions-title": { + "defaultMessage": "Add more actions", + "description": "Tour step title" + }, + "tour-collectData-afterFirst-content": { + "defaultMessage": "To train the machine learning model you need at least 3 data samples for 2 different actions.", + "description": "Tour step description" + }, + "tour-collectData-afterFirst-title": { + "defaultMessage": "You’ve recorded your first sample!", + "description": "Tour step title" + }, + "tour-collectData-collectMore-content": { + "defaultMessage": "Record more samples for this action. Collecting more samples should result in a better machine learning model.", + "description": "Tour step description" + }, + "tour-collectData-collectMore-title": { + "defaultMessage": "Collect more data samples", + "description": "Tour step title" + }, + "tour-collectData-trainModel-content": { + "defaultMessage": "When you have collected enough data samples you can train the machine learning model. You can come back later to remove or add more data and re-train to make the model more reliable.", + "description": "Tour step description" + }, + "tour-dataSamples-actions-content": { + "defaultMessage": "An action is the type of movement you want the machine learning tool to recognise e.g. ‘waving’ or ‘clapping’. Decide what your first action will be, name it and then start recording data samples.", + "description": "Tour step content" + }, + "tour-dataSamples-connected-content": { + "defaultMessage": "Now you can start collecting data samples to train a machine learning (ML) model to recognise different movements.", + "description": "Tour step content" + }, + "tour-dataSamples-connected-title": { + "defaultMessage": "Your data collection micro:bit is connected!", + "description": "Tour step title" + }, + "tour-dataSamples-liveGraph-content": { + "defaultMessage": "The graph shows movement data from the micro:bit’s accelerometer. Move your data collection micro:bit and see how the graph changes.", + "description": "Tour step content" + }, + "tour-testModel-afterTrain-content": { + "defaultMessage": "Now test your machine learning model. Try each action by moving your data collection micro:bit. Does the model detect each action?", + "description": "Tour step description" + }, + "tour-testModel-afterTrain-title": { + "defaultMessage": "You’ve trained an ML model!", + "description": "Tour step title" + }, + "tour-testModel-certaintyRecognition-content": { + "defaultMessage": "The meter shows how confident the model is that you are doing each action. Move the slider to adjust the recognition point, or threshold.", + "description": "Tour step description" + }, + "tour-testModel-certaintyRecognition-title": { + "defaultMessage": "Certainty and recognition point", + "description": "Tour step title" + }, + "tour-testModel-editInMakeCode-content": { + "defaultMessage": "Open your project in MakeCode to download the program and your machine learning model to a micro:bit. You can add more blocks to create your own programs using your model.", + "description": "Tour step description" + }, + "tour-testModel-estimatedAction-content": { + "defaultMessage": "The action the model estimates you are currently doing is shown above the micro:bit icon for that action.", + "description": "Tour step description" + }, + "tour-testModel-makeCodeBlocks-content": { + "defaultMessage": "These MakeCode blocks will show icons for each action detected when you transfer your code and model to a micro:bit.", + "description": "Tour step description" + }, + "tour-testModel-makeCodeBlocks-title": { + "defaultMessage": "Microsoft MakeCode blocks", + "description": "Tour step title" + }, + "train-model-intro-description": { + "defaultMessage": "Ask the computer to use your training samples to train the machine learning model to recognise different actions.", + "description": "Train model step home page description" + }, + "train-model-title": { + "defaultMessage": "Train model", + "description": "Train model step title" + }, + "unknown": { + "defaultMessage": "unknown", + "description": "Label for unknown ML event" + }, + "unplug-radio-link-microbit-description": { + "defaultMessage": "Unplug the radio link micro:bit from the computer. You will need to reconnect the micro:bit if you want to record more data samples.", + "description": "Unplug radio link micro:bit dialog description" + }, + "unplug-radio-link-microbit-label": { + "defaultMessage": "animation showing a USB cable being disconnected from the top of a micro:bit", + "description": "Unplug radio link micro:bit dialog aria label" + }, + "unplug-radio-link-microbit-title": { + "defaultMessage": "Unplug the radio link micro:bit", + "description": "Unplug radio link micro:bit dialog title" + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0e5d43ab4..f3b9162a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,80 +1,75 @@ { - "name": "ml-machine", + "name": "ai-creator", "version": "0.6.0-local", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "ml-machine", + "name": "ai-creator", "version": "0.6.0-local", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-web": "^3.0.0", - "@sentry/svelte": "^7.100.1", - "@tensorflow/tfjs": "^4.4.0", + "@chakra-ui/icons": "^2.1.1", + "@chakra-ui/react": "^2.8.2", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@microbit/makecode-embed": "^0.0.0-alpha.7", + "@microbit/microbit-connection": "^0.0.0-alpha.21", + "@microbit/ml-header-generator": "^0.4.3", + "@tensorflow/tfjs": "^4.20.0", "@types/w3c-web-serial": "^1.0.6", "@types/w3c-web-usb": "^1.0.6", + "@vitejs/plugin-react": "^4.3.1", "bowser": "^2.11.0", - "browser-lang": "^0.2.1", "chart.js": "^4.2.1", - "d3": "^7.8.5", - "dapjs": "^2.3.0", - "js-cookie": "^3.0.4", - "postcss": "^8.4.23", + "framer-motion": "^10.2.4", + "lodash.camelcase": "^4.3.0", + "lodash.upperfirst": "^4.3.1", + "ml4f": "git://github.com/microsoft/ml4f#v1.10.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^4.12.0", + "react-intl": "^6.6.8", + "react-router": "^6.24.0", + "react-router-dom": "^6.24.0", "smoothie": "^1.36.1", - "svelte-i18n": "^4.0.0", - "svelte-skeleton": "^1.3.1", - "svelte-transition": "^0.0.10", - "three": "^0.152.2", - "uuid4": "^2.0.3" + "zustand": "^4.5.5" }, "devDependencies": { - "@babel/preset-env": "^7.23.5", - "@bulatdashiev/svelte-slider": "^1.0.3", - "@iconify-json/mdi": "^1.1.63", - "@iconify-json/ri": "^1.1.17", - "@melt-ui/pp": "^0.3.0", - "@melt-ui/svelte": "^0.70.0", - "@sveltejs/vite-plugin-svelte": "^3.0.1", - "@testing-library/jest-dom": "^6.2.0", - "@testing-library/svelte": "^4.0.5", - "@tsconfig/svelte": "^4.0.1", - "@types/browser-lang": "^0.1.1", + "@chakra-ui/cli": "^2.4.1", + "@formatjs/cli": "^6.2.7", + "@playwright/test": "^1.42.1", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.0.0", "@types/d3": "^7.4.1", - "@types/js-cookie": "^3.0.3", + "@types/ejs": "^3.1.5", + "@types/lodash.camelcase": "^4.3.9", + "@types/lodash.upperfirst": "^4.3.9", "@types/node": "^18.16.0", - "@types/three": "^0.152.0", - "@types/w3c-web-usb": "^1.0.6", - "@types/web-bluetooth": "^0.0.17", - "@typescript-eslint/eslint-plugin": "^5.59.0", - "@typescript-eslint/parser": "^5.59.0", - "eslint": "^8.43.0", - "eslint-plugin-svelte": "^2.32.1", - "jsdom": "^23.2.0", - "prettier": "^3.1.0", - "prettier-plugin-svelte": "^3.1.2", - "svelte": "^4.0.0", - "svelte-check": "^3.6.2", - "svelte-preprocess": "^5.0.3", - "svelte-windicss-preprocess": "^4.2.2", - "tslib": "^2.5.0", - "typescript": "^5.0.4", - "unplugin-icons": "^0.18.1", - "vite": "^5.0.7", - "vite-plugin-windicss": "^1.9.3", - "vitest": "^1.0.4", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react": "^4.2.1", + "cross-env": "^7.0.3", + "ejs": "^3.1.9", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "jsdom": "^24.0.0", + "playwright": "^1.42.1", + "prettier": "2.8.8", + "typescript": "^5.4.2", + "vite": "^5.1.5", + "vite-plugin-pwa": "^0.19.8", + "vite-plugin-svgr": "^4.2.0", + "vitest": "^1.3.1", "vitest-dom": "^0.1.1" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@adobe/css-tools": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", @@ -85,6 +80,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -93,80 +89,43 @@ "node": ">=6.0.0" } }, - "node_modules/@antfu/install-pkg": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.3.1.tgz", - "integrity": "sha512-A3zWY9VeTPnxlMiZtsGHw2lSd3ghwvL8s9RiGOtqvDxhhFfZ781ynsGBa/iUnDJ5zBrmTFQrJDud3TGgRISaxw==", - "dev": true, - "dependencies": { - "execa": "^8.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@antfu/utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.3.0.tgz", - "integrity": "sha512-UU8TLr/EoXdg7OjMp0h9oDoIAVr+Z/oW9cpOxQQyrsz6Qzd2ms/1CdWx8fl2OQdFpxGmq5Vc4TwfLHId6nAZjA==", - "dev": true, - "dependencies": { - "@types/throttle-debounce": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@asamuzakjp/dom-selector": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.1.tgz", - "integrity": "sha512-QJAJffmCiymkv6YyQ7voyQb5caCth6jzZsQncYCpHXrJ7RqdYG5y43+is8mnFcYubdOkr7cn1+na9BdFMxqw7w==", - "dev": true, - "dependencies": { - "bidi-js": "^1.0.3", - "css-tree": "^2.3.1", - "is-potential-custom-element-name": "^1.0.1" - } - }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", - "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dev": true, - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.6", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -182,15 +141,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, - "peer": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -222,13 +179,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -294,34 +251,34 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -340,28 +297,28 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -383,9 +340,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -426,12 +383,13 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -450,39 +408,36 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "dev": true, "engines": { "node": ">=6.9.0" @@ -503,39 +458,36 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", - "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", "dev": true, - "peer": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1441,6 +1393,36 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", @@ -1729,7 +1711,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", - "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1740,38 +1721,34 @@ "node_modules/@babel/runtime/node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1780,32 +1757,169 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@bulatdashiev/svelte-slider": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@bulatdashiev/svelte-slider/-/svelte-slider-1.0.3.tgz", - "integrity": "sha512-GkVyqIjzQnqy0FQIm8wqRLIOFQBQ/Ewd381Y7KwABsSwiSu0eMYO0/8s4q/wlMDDb2/+U66rXlalaUokUfw8Vg==", - "dev": true + "node_modules/@chakra-ui/accordion": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.3.1.tgz", + "integrity": "sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==", + "dependencies": { + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz", - "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==", + "node_modules/@chakra-ui/alert": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/alert/-/alert-2.2.2.tgz", + "integrity": "sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/spinner": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/anatomy": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.2.2.tgz", + "integrity": "sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg==" + }, + "node_modules/@chakra-ui/avatar": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/avatar/-/avatar-2.3.0.tgz", + "integrity": "sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==", + "dependencies": { + "@chakra-ui/image": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/breadcrumb": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/breadcrumb/-/breadcrumb-2.2.0.tgz", + "integrity": "sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==", + "dependencies": { + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/breakpoint-utils": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.8.tgz", + "integrity": "sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + } + }, + "node_modules/@chakra-ui/button": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/button/-/button-2.1.0.tgz", + "integrity": "sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/spinner": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/card": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/card/-/card-2.2.0.tgz", + "integrity": "sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/checkbox": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/checkbox/-/checkbox-2.3.2.tgz", + "integrity": "sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/visually-hidden": "2.2.0", + "@zag-js/focus-visible": "0.16.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/cli": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/cli/-/cli-2.4.1.tgz", + "integrity": "sha512-GZZuHUA1cXJWpmYNiVTLPihvY4VhIssRl+AXgw/0IbeodTMop3jWlIioPKLAQeXu5CwvRA6iESyGjnu1V8Zykg==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "cli-check-node": "^1.3.4", + "cli-handle-unhandled": "^1.1.1", + "cli-welcome": "^2.2.2", + "commander": "^9.3.0", + "esbuild": "^0.17.18", + "prettier": "^2.8.8" + }, + "bin": { + "chakra-cli": "bin/index.js" + } + }, + "node_modules/@chakra-ui/cli/node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "android" @@ -1814,13 +1928,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz", - "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "android" @@ -1829,13 +1944,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz", - "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "android" @@ -1844,13 +1960,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", - "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -1859,13 +1976,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", - "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -1874,13 +1992,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz", - "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -1889,13 +2008,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz", - "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -1904,13 +2024,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz", - "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -1919,13 +2040,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", - "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -1934,13 +2056,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", - "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "linux" @@ -1949,13 +2072,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz", - "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", "cpu": [ "loong64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -1964,13 +2088,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz", - "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", "cpu": [ "mips64el" ], + "dev": true, "optional": true, "os": [ "linux" @@ -1979,13 +2104,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz", - "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -1994,13 +2120,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz", - "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", "cpu": [ "riscv64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -2009,13 +2136,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz", - "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -2024,13 +2152,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz", - "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -2039,13 +2168,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz", - "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "netbsd" @@ -2054,13 +2184,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz", - "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "openbsd" @@ -2069,13 +2200,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz", - "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "sunos" @@ -2084,13 +2216,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz", - "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -2099,13 +2232,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz", - "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -2114,13 +2248,14 @@ "node": ">=12" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz", - "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==", + "node_modules/@chakra-ui/cli/node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -2129,680 +2264,1268 @@ "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@chakra-ui/cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": "^12.20.0 || >=14" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "node_modules/@chakra-ui/cli/node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/@chakra-ui/clickable": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/clickable/-/clickable-2.1.0.tgz", + "integrity": "sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==", + "dependencies": { + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, + "node_modules/@chakra-ui/close-button": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/close-button/-/close-button-2.1.1.tgz", + "integrity": "sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@chakra-ui/icon": "3.2.0" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, + "node_modules/@chakra-ui/color-mode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/color-mode/-/color-mode-2.2.0.tgz", + "integrity": "sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node_modules/@chakra-ui/control-box": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/control-box/-/control-box-2.1.0.tgz", + "integrity": "sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@floating-ui/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", - "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", - "dev": true, + "node_modules/@chakra-ui/counter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/counter/-/counter-2.1.0.tgz", + "integrity": "sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==", "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@chakra-ui/number-utils": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@floating-ui/dom": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", - "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", - "dev": true, + "node_modules/@chakra-ui/css-reset": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/css-reset/-/css-reset-2.3.0.tgz", + "integrity": "sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==", + "peerDependencies": { + "@emotion/react": ">=10.0.35", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/descendant": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/descendant/-/descendant-3.1.0.tgz", + "integrity": "sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==", "dependencies": { - "@floating-ui/core": "^1.5.3", - "@floating-ui/utils": "^0.2.0" + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@floating-ui/utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==", - "dev": true + "node_modules/@chakra-ui/dom-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/dom-utils/-/dom-utils-2.1.0.tgz", + "integrity": "sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==" }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.0.tgz", - "integrity": "sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==", + "node_modules/@chakra-ui/editable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/editable/-/editable-3.1.0.tgz", + "integrity": "sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==", "dependencies": { - "@formatjs/intl-localematcher": "0.5.2", - "tslib": "^2.4.0" + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@formatjs/fast-memoize": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", - "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", + "node_modules/@chakra-ui/event-utils": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@chakra-ui/event-utils/-/event-utils-2.0.8.tgz", + "integrity": "sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==" + }, + "node_modules/@chakra-ui/focus-lock": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/focus-lock/-/focus-lock-2.1.0.tgz", + "integrity": "sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==", "dependencies": { - "tslib": "^2.4.0" + "@chakra-ui/dom-utils": "2.1.0", + "react-focus-lock": "^2.9.4" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.3.tgz", - "integrity": "sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw==", + "node_modules/@chakra-ui/form-control": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-2.2.0.tgz", + "integrity": "sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.0", - "@formatjs/icu-skeleton-parser": "1.7.0", - "tslib": "^2.4.0" + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.7.0.tgz", - "integrity": "sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A==", + "node_modules/@chakra-ui/hooks": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.2.1.tgz", + "integrity": "sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ==", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.0", - "tslib": "^2.4.0" + "@chakra-ui/react-utils": "2.0.12", + "@chakra-ui/utils": "2.0.15", + "compute-scroll-into-view": "3.0.3", + "copy-to-clipboard": "3.3.3" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.2.tgz", - "integrity": "sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw==", + "node_modules/@chakra-ui/icon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.2.0.tgz", + "integrity": "sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==", "dependencies": { - "tslib": "^2.4.0" + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dev": true, + "node_modules/@chakra-ui/icons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/icons/-/icons-2.1.1.tgz", + "integrity": "sha512-3p30hdo4LlRZTT5CwoAJq3G9fHI0wDc0pBaMHj4SUn0yomO+RcDRlzhdXqdr5cVnzax44sqXJVnf3oQG0eI+4g==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "@chakra-ui/icon": "3.2.0" }, - "engines": { - "node": ">=10.10.0" + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" + "node_modules/@chakra-ui/image": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/image/-/image-2.1.0.tgz", + "integrity": "sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true - }, - "node_modules/@iconify-json/mdi": { - "version": "1.1.63", - "resolved": "https://registry.npmjs.org/@iconify-json/mdi/-/mdi-1.1.63.tgz", - "integrity": "sha512-b07dRM5LYdwJqd/lm+1+JDNDNSWHvpZ7ujb73oJxx3lmK1J0giDS0BSc4yia0hixNV0Z2q/4GyxAu/A8XqDnbg==", - "dev": true, + "node_modules/@chakra-ui/input": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/input/-/input-2.1.2.tgz", + "integrity": "sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==", "dependencies": { - "@iconify/types": "*" + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@iconify-json/ri": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/@iconify-json/ri/-/ri-1.1.17.tgz", - "integrity": "sha512-FN6dynUF7GjVsDU9twvzreN+3gpWiJwpD7FJelHFVPjHNW7U4CDAnw4mEWLaqscB7npJVXLidYKdI03Mh0apTQ==", - "dev": true, + "node_modules/@chakra-ui/layout": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/layout/-/layout-2.3.1.tgz", + "integrity": "sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==", "dependencies": { - "@iconify/types": "*" + "@chakra-ui/breakpoint-utils": "2.0.8", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@iconify/json": { - "version": "1.1.432", - "resolved": "https://registry.npmjs.org/@iconify/json/-/json-1.1.432.tgz", - "integrity": "sha512-ZcQKCnJXmeKDKxSu4vOFCYkCv8sjX1OASTMQpzqVzt3ivBBDudAYyXJlO4hgk0X4B2R0IMHRNvRgCAYkKDa2eQ==", - "dev": true + "node_modules/@chakra-ui/lazy-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@chakra-ui/lazy-utils/-/lazy-utils-2.0.5.tgz", + "integrity": "sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg==" }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "dev": true + "node_modules/@chakra-ui/live-region": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/live-region/-/live-region-2.1.0.tgz", + "integrity": "sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==", + "peerDependencies": { + "react": ">=18" + } }, - "node_modules/@iconify/utils": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.13.tgz", - "integrity": "sha512-6uWvJIo715xYRy1KmCCyZYW0YYkLjaojEExoEkxpOHKhi9cyHW8hVKo+m8zrxzNVSqjUx9OuVRa2BWXeXfkp5A==", - "dev": true, + "node_modules/@chakra-ui/media-query": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-3.3.0.tgz", + "integrity": "sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==", "dependencies": { - "@antfu/install-pkg": "^0.1.1", - "@antfu/utils": "^0.7.5", - "@iconify/types": "^2.0.0", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "local-pkg": "^0.4.3" + "@chakra-ui/breakpoint-utils": "2.0.8", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/@antfu/install-pkg": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.1.1.tgz", - "integrity": "sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==", - "dev": true, + "node_modules/@chakra-ui/menu": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/menu/-/menu-2.2.1.tgz", + "integrity": "sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==", + "dependencies": { + "@chakra-ui/clickable": "2.1.0", + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-animation-state": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-focus-effect": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-outside-click": "2.2.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/modal": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/modal/-/modal-2.3.1.tgz", + "integrity": "sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==", "dependencies": { - "execa": "^5.1.1", - "find-up": "^5.0.0" + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/focus-lock": "2.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0", + "aria-hidden": "^1.2.3", + "react-remove-scroll": "^2.5.6" }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@iconify/utils/node_modules/@antfu/utils": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.7.tgz", - "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" + "node_modules/@chakra-ui/number-input": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/number-input/-/number-input-2.1.2.tgz", + "integrity": "sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==", + "dependencies": { + "@chakra-ui/counter": "2.1.0", + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-interval": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "node_modules/@chakra-ui/number-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@chakra-ui/number-utils/-/number-utils-2.0.7.tgz", + "integrity": "sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg==" + }, + "node_modules/@chakra-ui/object-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/object-utils/-/object-utils-2.1.0.tgz", + "integrity": "sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==" + }, + "node_modules/@chakra-ui/pin-input": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/pin-input/-/pin-input-2.1.0.tgz", + "integrity": "sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==", "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" + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/popover": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/popover/-/popover-2.2.1.tgz", + "integrity": "sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==", + "dependencies": { + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-animation-state": "2.1.0", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-focus-effect": "2.1.0", + "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/@chakra-ui/popper": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/popper/-/popper-3.1.0.tgz", + "integrity": "sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==", + "dependencies": { + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@popperjs/core": "^2.9.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/human-signals": { + "node_modules/@chakra-ui/portal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" + "resolved": "https://registry.npmjs.org/@chakra-ui/portal/-/portal-2.1.0.tgz", + "integrity": "sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@iconify/utils/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@chakra-ui/progress": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/progress/-/progress-2.2.0.tgz", + "integrity": "sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "engines": { - "node": ">=14" + "node_modules/@chakra-ui/provider": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/provider/-/provider-2.4.2.tgz", + "integrity": "sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==", + "dependencies": { + "@chakra-ui/css-reset": "2.3.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/system": "2.6.2", + "@chakra-ui/utils": "2.0.15" }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/radio": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/radio/-/radio-2.1.2.tgz", + "integrity": "sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@zag-js/focus-visible": "0.16.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.8.2.tgz", + "integrity": "sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==", + "dependencies": { + "@chakra-ui/accordion": "2.3.1", + "@chakra-ui/alert": "2.2.2", + "@chakra-ui/avatar": "2.3.0", + "@chakra-ui/breadcrumb": "2.2.0", + "@chakra-ui/button": "2.1.0", + "@chakra-ui/card": "2.2.0", + "@chakra-ui/checkbox": "2.3.2", + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/control-box": "2.1.0", + "@chakra-ui/counter": "2.1.0", + "@chakra-ui/css-reset": "2.3.0", + "@chakra-ui/editable": "3.1.0", + "@chakra-ui/focus-lock": "2.1.0", + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/hooks": "2.2.1", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/image": "2.1.0", + "@chakra-ui/input": "2.1.2", + "@chakra-ui/layout": "2.3.1", + "@chakra-ui/live-region": "2.1.0", + "@chakra-ui/media-query": "3.3.0", + "@chakra-ui/menu": "2.2.1", + "@chakra-ui/modal": "2.3.1", + "@chakra-ui/number-input": "2.1.2", + "@chakra-ui/pin-input": "2.1.0", + "@chakra-ui/popover": "2.2.1", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/progress": "2.2.0", + "@chakra-ui/provider": "2.4.2", + "@chakra-ui/radio": "2.1.2", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/select": "2.1.2", + "@chakra-ui/skeleton": "2.1.0", + "@chakra-ui/skip-nav": "2.1.0", + "@chakra-ui/slider": "2.1.0", + "@chakra-ui/spinner": "2.1.0", + "@chakra-ui/stat": "2.1.1", + "@chakra-ui/stepper": "2.3.1", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/switch": "2.1.2", + "@chakra-ui/system": "2.6.2", + "@chakra-ui/table": "2.1.0", + "@chakra-ui/tabs": "3.0.0", + "@chakra-ui/tag": "3.1.1", + "@chakra-ui/textarea": "2.1.2", + "@chakra-ui/theme": "3.3.1", + "@chakra-ui/theme-utils": "2.0.21", + "@chakra-ui/toast": "7.0.2", + "@chakra-ui/tooltip": "2.3.1", + "@chakra-ui/transition": "2.1.0", + "@chakra-ui/utils": "2.0.15", + "@chakra-ui/visually-hidden": "2.2.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/react-children-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-children-utils/-/react-children-utils-2.0.6.tgz", + "integrity": "sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==", + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/mimic-fn": { + "node_modules/@chakra-ui/react-context": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" + "resolved": "https://registry.npmjs.org/@chakra-ui/react-context/-/react-context-2.1.0.tgz", + "integrity": "sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==", + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, + "node_modules/@chakra-ui/react-env": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-env/-/react-env-3.1.0.tgz", + "integrity": "sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==", "dependencies": { - "path-key": "^3.0.0" + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, + "node_modules/@chakra-ui/react-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-types/-/react-types-2.0.7.tgz", + "integrity": "sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-animation-state": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.1.0.tgz", + "integrity": "sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==", "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@iconify/utils/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/@iconify/utils/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@chakra-ui/react-use-callback-ref": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.1.0.tgz", + "integrity": "sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==", + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@internationalized/date": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.1.tgz", - "integrity": "sha512-LUQIfwU9e+Fmutc/DpRTGXSdgYZLBegi4wygCWDSVmUdLTaMHsQyASDiJtREwanwKuQLq0hY76fCJ9J/9I2xOQ==", - "dev": true, + "node_modules/@chakra-ui/react-use-controllable-state": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.1.0.tgz", + "integrity": "sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==", "dependencies": { - "@swc/helpers": "^0.5.0" + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, + "node_modules/@chakra-ui/react-use-disclosure": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.1.0.tgz", + "integrity": "sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@chakra-ui/react-use-callback-ref": "2.1.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@chakra-ui/react-use-event-listener": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.1.0.tgz", + "integrity": "sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@chakra-ui/react-use-callback-ref": "2.1.0" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" + "node_modules/@chakra-ui/react-use-focus-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.1.0.tgz", + "integrity": "sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" + "node_modules/@chakra-ui/react-use-focus-on-pointer-down": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.1.0.tgz", + "integrity": "sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==", + "dependencies": { + "@chakra-ui/react-use-event-listener": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "node_modules/@chakra-ui/react-use-interval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-interval/-/react-use-interval-2.1.0.tgz", + "integrity": "sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "node_modules/@chakra-ui/react-use-latest-ref": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.1.0.tgz", + "integrity": "sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-merge-refs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.1.0.tgz", + "integrity": "sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-outside-click": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.2.0.tgz", + "integrity": "sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" } }, - "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + "node_modules/@chakra-ui/react-use-pan-event": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.1.0.tgz", + "integrity": "sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==", + "dependencies": { + "@chakra-ui/event-utils": "2.0.8", + "@chakra-ui/react-use-latest-ref": "2.1.0", + "framesync": "6.1.2" + }, + "peerDependencies": { + "react": ">=18" + } }, - "node_modules/@melt-ui/pp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@melt-ui/pp/-/pp-0.3.0.tgz", - "integrity": "sha512-b07Bdh8l2KcwKVCXOY+SoBw1dk9eWvQfMSi6SoacpRVyVmmfpi0kV4oGt3HYF0tUCB3sEmVicxse50ZzZxEzEA==", - "dev": true, + "node_modules/@chakra-ui/react-use-previous": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-previous/-/react-use-previous-2.1.0.tgz", + "integrity": "sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-safe-layout-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.1.0.tgz", + "integrity": "sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-size": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-size/-/react-use-size-2.1.0.tgz", + "integrity": "sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==", "dependencies": { - "estree-walker": "^3.0.3", - "magic-string": "^0.30.5" + "@zag-js/element-size": "0.10.5" }, - "engines": { - "pnpm": ">=8.6.3" + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-timeout": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-timeout/-/react-use-timeout-2.1.0.tgz", + "integrity": "sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" }, "peerDependencies": { - "@melt-ui/svelte": ">= 0.29.0", - "svelte": "^3.55.0 || ^4.0.0 || ^5.0.0-next.1" + "react": ">=18" } }, - "node_modules/@melt-ui/svelte": { - "version": "0.70.0", - "resolved": "https://registry.npmjs.org/@melt-ui/svelte/-/svelte-0.70.0.tgz", - "integrity": "sha512-ni14892MHJMAxSl2cz1pcgfnLR7fee1nNDJmx47hV19ewxSs8eQ8iguPrfx1ONtgjbp2YYVZhlpERi7szd30cA==", - "dev": true, + "node_modules/@chakra-ui/react-use-update-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.1.0.tgz", + "integrity": "sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-utils": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-utils/-/react-utils-2.0.12.tgz", + "integrity": "sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==", "dependencies": { - "@floating-ui/core": "^1.3.1", - "@floating-ui/dom": "^1.4.5", - "@internationalized/date": "^3.5.0", - "dequal": "^2.0.3", - "focus-trap": "^7.5.2", - "nanoid": "^5.0.4" + "@chakra-ui/utils": "2.0.15" }, "peerDependencies": { - "svelte": ">=3 <5" + "react": ">=18" } }, - "node_modules/@melt-ui/svelte/node_modules/nanoid": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.4.tgz", - "integrity": "sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.js" + "node_modules/@chakra-ui/select": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/select/-/select-2.1.2.tgz", + "integrity": "sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/shared-utils": "2.0.5" }, - "engines": { - "node": "^18 || >=20" + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-analytics-js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-analytics-js/-/applicationinsights-analytics-js-3.0.7.tgz", - "integrity": "sha512-HOcFA4JJUTz+KOqVQoE5g1ExL7Wm+sL2czLKQq1hDkmU4PeO4Oq/pi9SeR6iHDQpXCenMTvAkzvZ9A41ZKIOQA==", + "node_modules/@chakra-ui/shared-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@chakra-ui/shared-utils/-/shared-utils-2.0.5.tgz", + "integrity": "sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==" + }, + "node_modules/@chakra-ui/skeleton": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/skeleton/-/skeleton-2.1.0.tgz", + "integrity": "sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==", "dependencies": { - "@microsoft/applicationinsights-common": "3.0.7", - "@microsoft/applicationinsights-core-js": "3.0.7", - "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/dynamicproto-js": "^2.0.2", - "@nevware21/ts-utils": ">= 0.10.1 < 2.x" + "@chakra-ui/media-query": "3.3.0", + "@chakra-ui/react-use-previous": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" }, "peerDependencies": { - "tslib": "*" + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-cfgsync-js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-cfgsync-js/-/applicationinsights-cfgsync-js-3.0.7.tgz", - "integrity": "sha512-lp+FP5mg35KO1LuCss2wEOR3dYTFLeDbBkqIoQ9TnJje7Yt3gNKHANl9/b8nMmJyL9u2Lp0pc3wzM+InfO5xHw==", + "node_modules/@chakra-ui/skip-nav": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/skip-nav/-/skip-nav-2.1.0.tgz", + "integrity": "sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/slider": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/slider/-/slider-2.1.0.tgz", + "integrity": "sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==", "dependencies": { - "@microsoft/applicationinsights-common": "3.0.7", - "@microsoft/applicationinsights-core-js": "3.0.7", - "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/dynamicproto-js": "^2.0.2", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.10.1 < 2.x" + "@chakra-ui/number-utils": "2.0.7", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-latest-ref": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-pan-event": "2.1.0", + "@chakra-ui/react-use-size": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0" }, "peerDependencies": { - "tslib": "*" + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-channel-js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.0.7.tgz", - "integrity": "sha512-3y8ct8V2bGo7QaYVrfQcWZeOci2tUZhXkme3k7nKa2P7upSX/1d+dPF12EelxrtWVLxtfCQJkk+2W4M1AyejGQ==", + "node_modules/@chakra-ui/spinner": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-2.1.0.tgz", + "integrity": "sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==", "dependencies": { - "@microsoft/applicationinsights-common": "3.0.7", - "@microsoft/applicationinsights-core-js": "3.0.7", - "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/dynamicproto-js": "^2.0.2", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.10.1 < 2.x" + "@chakra-ui/shared-utils": "2.0.5" }, "peerDependencies": { - "tslib": "*" + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-common": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.0.7.tgz", - "integrity": "sha512-boumvLA7LZu0NmwT9ThpTAI64BNYUlOkFNcjUbYeKNEaE6CBPGX/z25XXlYu+j4hHldDaCn9zC1LuN7AuoMJSA==", + "node_modules/@chakra-ui/stat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/stat/-/stat-2.1.1.tgz", + "integrity": "sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==", "dependencies": { - "@microsoft/applicationinsights-core-js": "3.0.7", - "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/dynamicproto-js": "^2.0.2", - "@nevware21/ts-utils": ">= 0.10.1 < 2.x" + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" }, "peerDependencies": { - "tslib": "*" + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-core-js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.7.tgz", - "integrity": "sha512-sVnnVW4fWXzZdtUTVjuwH3xGa1cj+tW7r72voMZzyuNOZ41fBOCK9AqoV0nKP5VCgNjySwn6Rpbw82I4TKKosQ==", + "node_modules/@chakra-ui/stepper": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/stepper/-/stepper-2.3.1.tgz", + "integrity": "sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==", "dependencies": { - "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/dynamicproto-js": "^2.0.2", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.10.1 < 2.x" + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" }, "peerDependencies": { - "tslib": "*" + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-dependencies-js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-dependencies-js/-/applicationinsights-dependencies-js-3.0.7.tgz", - "integrity": "sha512-nylC373IWXHUoz3FS9LclMIvGvX/KEeFFCPzZ0i1vjEsBwIB4LJ/5XwvtEk4F/kAXPZr6wFNoxecMhS9nKOfNg==", + "node_modules/@chakra-ui/styled-system": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.2.tgz", + "integrity": "sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "csstype": "^3.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/switch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/switch/-/switch-2.1.2.tgz", + "integrity": "sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==", "dependencies": { - "@microsoft/applicationinsights-common": "3.0.7", - "@microsoft/applicationinsights-core-js": "3.0.7", - "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/dynamicproto-js": "^2.0.2", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.10.1 < 2.x" + "@chakra-ui/checkbox": "2.3.2", + "@chakra-ui/shared-utils": "2.0.5" }, "peerDependencies": { - "tslib": "*" + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-properties-js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-properties-js/-/applicationinsights-properties-js-3.0.7.tgz", - "integrity": "sha512-vWSs16AJ7bsZxsT34Cv81d/5+SjjniNxNhI+XNzKSBnjhxITrhmRTEbhBbYQAP9118qQsEYW9liQBeLnxg6QSg==", + "node_modules/@chakra-ui/system": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/system/-/system-2.6.2.tgz", + "integrity": "sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==", "dependencies": { - "@microsoft/applicationinsights-common": "3.0.7", - "@microsoft/applicationinsights-core-js": "3.0.7", - "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/dynamicproto-js": "^2.0.2", - "@nevware21/ts-utils": ">= 0.10.1 < 2.x" + "@chakra-ui/color-mode": "2.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-utils": "2.0.12", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme-utils": "2.0.21", + "@chakra-ui/utils": "2.0.15", + "react-fast-compare": "3.2.2" }, "peerDependencies": { - "tslib": "*" + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-shims": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", - "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", + "node_modules/@chakra-ui/table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/table/-/table-2.1.0.tgz", + "integrity": "sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==", "dependencies": { - "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/applicationinsights-web": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web/-/applicationinsights-web-3.0.7.tgz", - "integrity": "sha512-UfX/Fl4Fe2Q72/MXJLCb5MBwTGdMBXmB/JW+eF2dDt6zDZa2OOe8u7daGXjh2ewFdBqb4feb02PDCSDg+nsBeA==", + "node_modules/@chakra-ui/tabs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/tabs/-/tabs-3.0.0.tgz", + "integrity": "sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==", "dependencies": { - "@microsoft/applicationinsights-analytics-js": "3.0.7", - "@microsoft/applicationinsights-cfgsync-js": "3.0.7", - "@microsoft/applicationinsights-channel-js": "3.0.7", - "@microsoft/applicationinsights-common": "3.0.7", - "@microsoft/applicationinsights-core-js": "3.0.7", - "@microsoft/applicationinsights-dependencies-js": "3.0.7", - "@microsoft/applicationinsights-properties-js": "3.0.7", - "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/dynamicproto-js": "^2.0.2", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.10.1 < 2.x" + "@chakra-ui/clickable": "2.1.0", + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" }, "peerDependencies": { - "tslib": "*" + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@microsoft/dynamicproto-js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz", - "integrity": "sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg==", + "node_modules/@chakra-ui/tag": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/tag/-/tag-3.1.1.tgz", + "integrity": "sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==", "dependencies": { - "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@nevware21/ts-async": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.4.0.tgz", - "integrity": "sha512-dbV826TTehQIBIJjh8GDSbwn1Z6+cnkyNbRlpcpdBPH8mROD2zabIUKqWcw9WRdTjjUIm21K+OR4DXWlAyOVTQ==", + "node_modules/@chakra-ui/textarea": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/textarea/-/textarea-2.1.2.tgz", + "integrity": "sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==", "dependencies": { - "@nevware21/ts-utils": ">= 0.10.0 < 2.x" + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" } }, - "node_modules/@nevware21/ts-utils": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.10.1.tgz", - "integrity": "sha512-pMny25NnF2/MJwdqC3Iyjm2pGIXNxni4AROpcqDeWa+td9JMUY4bUS9uU9XW+BoBRqTLUL+WURF9SOd/6OQzRg==" + "node_modules/@chakra-ui/theme": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-3.3.1.tgz", + "integrity": "sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==", + "dependencies": { + "@chakra-ui/anatomy": "2.2.2", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/theme-tools": "2.1.2" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.8.0" + } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@chakra-ui/theme-tools": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.1.2.tgz", + "integrity": "sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@chakra-ui/anatomy": "2.2.2", + "@chakra-ui/shared-utils": "2.0.5", + "color2k": "^2.0.2" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, + "node_modules/@chakra-ui/theme-utils": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-utils/-/theme-utils-2.0.21.tgz", + "integrity": "sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme": "3.3.1", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/toast": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/toast/-/toast-7.0.2.tgz", + "integrity": "sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==", + "dependencies": { + "@chakra-ui/alert": "2.2.2", + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-timeout": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme": "3.3.1" + }, + "peerDependencies": { + "@chakra-ui/system": "2.6.2", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/tooltip": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/tooltip/-/tooltip-2.3.1.tgz", + "integrity": "sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/transition": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/transition/-/transition-2.1.0.tgz", + "integrity": "sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/utils": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.0.15.tgz", + "integrity": "sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==", + "dependencies": { + "@types/lodash.mergewith": "4.6.7", + "css-box-model": "1.2.1", + "framesync": "6.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/visually-hidden": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/visually-hidden/-/visually-hidden-2.2.0.tgz", + "integrity": "sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", + "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/serialize": "^1.1.4", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.0.tgz", - "integrity": "sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==", + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -2810,12 +3533,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.0.tgz", - "integrity": "sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==", + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -2823,38 +3549,95 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.0.tgz", - "integrity": "sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==", + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ - "arm64" + "x64" ], "dev": true, "optional": true, "os": [ - "darwin" - ] + "android" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.0.tgz", - "integrity": "sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ - "x64" + "arm64" ], "dev": true, "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.0.tgz", - "integrity": "sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -2862,12 +3645,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.0.tgz", - "integrity": "sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -2875,462 +3661,557 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.0.tgz", - "integrity": "sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.0.tgz", - "integrity": "sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ - "riscv64" + "loong64" ], "dev": true, "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.0.tgz", - "integrity": "sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ - "x64" + "mips64el" ], "dev": true, "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.0.tgz", - "integrity": "sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.0.tgz", - "integrity": "sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ - "arm64" + "riscv64" ], "dev": true, "optional": true, "os": [ - "win32" - ] + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.0.tgz", - "integrity": "sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ - "ia32" + "s390x" ], "dev": true, "optional": true, "os": [ - "win32" - ] + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.0.tgz", - "integrity": "sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==", + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "win32" - ] + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@sentry-internal/feedback": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.100.1.tgz", - "integrity": "sha512-yqcRVnjf+qS+tC4NxOKLJOaSJ+csHmh/dHUzvCTkf5rLsplwXYRnny2r0tqGTQ4tuXMxwgSMKPYwicg81P+xuw==", - "dependencies": { - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], "engines": { "node": ">=12" } }, - "node_modules/@sentry-internal/replay-canvas": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.100.1.tgz", - "integrity": "sha512-TnqxqJGhbFhhYRhTG2WLFer+lVieV7mNGeIxFBiw1L4kuj8KGl+C0sknssKyZSRVJFSahhHIosHJGRMkkD//7g==", - "dependencies": { - "@sentry/core": "7.100.1", - "@sentry/replay": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], "engines": { "node": ">=12" } }, - "node_modules/@sentry-internal/tracing": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.100.1.tgz", - "integrity": "sha512-+u9RRf5eL3StiyiRyAHZmdkAR7GTSGx4Mt4Lmi5NEtCcWlTGZ1QgW2r8ZbhouVmTiJkjhQgYCyej3cojtazeJg==", - "dependencies": { - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@sentry/browser": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.100.1.tgz", - "integrity": "sha512-IxHQ08ixf0bmaWpe4yt1J4UUsOpg02fxax9z3tOQYXw5MSzz5pDXn8M8DFUVJB3wWuyXhHXTub9yD3VIP9fnoA==", - "dependencies": { - "@sentry-internal/feedback": "7.100.1", - "@sentry-internal/replay-canvas": "7.100.1", - "@sentry-internal/tracing": "7.100.1", - "@sentry/core": "7.100.1", - "@sentry/replay": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@sentry/core": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.100.1.tgz", - "integrity": "sha512-f+ItUge/o9AjlveQq0ZUbQauKlPH1FIJbC1TRaYLJ4KNfOdrsh8yZ29RmWv0cFJ/e+FGTr603gWpRPObF5rM8Q==", - "dependencies": { - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@sentry/replay": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.100.1.tgz", - "integrity": "sha512-B1NFjzGEFaqejxBRdUyEzH8ChXc2kfiqlA/W/Lg0aoWIl2/7nuMk+l4ld9gW5F5bIAXDTVd5vYltb1lWEbpr7w==", - "dependencies": { - "@sentry-internal/tracing": "7.100.1", - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1" - }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=12" } }, - "node_modules/@sentry/svelte": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/svelte/-/svelte-7.100.1.tgz", - "integrity": "sha512-2oZJNFZYfXeDX05mvBBLtve1KRfCI0DgrxZYe9qbYQIe7snobNSydTK+wIHX/SJeVUz3Z+qyovPqFzjkJPTFnw==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { - "@sentry/browser": "7.100.1", - "@sentry/core": "7.100.1", - "@sentry/types": "7.100.1", - "@sentry/utils": "7.100.1", - "magic-string": "^0.30.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "svelte": "3.x || 4.x" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@sentry/types": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.100.1.tgz", - "integrity": "sha512-fLM+LedHuKzOd8IhXBqaQuym+AA519MGjeczBa5kGakes/BbAsUMwsNfjsKQedp7Kh44RgYF99jwoRPK2oDrXw==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "dev": true, "engines": { - "node": ">=8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@sentry/utils": { - "version": "7.100.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.100.1.tgz", - "integrity": "sha512-Ve6dXr1o6xiBe3VCoJgiutmBKrugryI65EZAbYto5XI+t+PjiLLf9wXtEMF24ZrwImo4Lv3E9Uqza+fWkEbw6A==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, "dependencies": { - "@sentry/types": "7.100.1" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.1.tgz", - "integrity": "sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0-next.0 || ^2.0.0", - "debug": "^4.3.4", - "deepmerge": "^4.3.1", - "kleur": "^4.1.5", - "magic-string": "^0.30.5", - "svelte-hmr": "^0.15.3", - "vitefu": "^0.2.5" - }, - "engines": { - "node": "^18.0.0 || >=20" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0-next.0", - "vite": "^5.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz", - "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "debug": "^4.3.4" + "type-fest": "^0.20.2" }, "engines": { - "node": "^18.0.0 || >=20" + "node": ">=8" }, - "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "svelte": "^4.0.0 || ^5.0.0-next.0", - "vite": "^5.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@swc/helpers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", - "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "tslib": "^2.4.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/@tensorflow/tfjs": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-4.15.0.tgz", - "integrity": "sha512-SdhKYAx/UiMJuKYxf3aXMOuK4j+rwEGRNlwAMIYPYJAFMySdqZ7hC4ZV6mB8D4LAjkgk35y3zOJ/3MWamstKdg==", - "dependencies": { - "@tensorflow/tfjs-backend-cpu": "4.15.0", - "@tensorflow/tfjs-backend-webgl": "4.15.0", - "@tensorflow/tfjs-converter": "4.15.0", - "@tensorflow/tfjs-core": "4.15.0", - "@tensorflow/tfjs-data": "4.15.0", - "@tensorflow/tfjs-layers": "4.15.0", - "argparse": "^1.0.10", - "chalk": "^4.1.0", - "core-js": "3.29.1", - "regenerator-runtime": "^0.13.5", - "yargs": "^16.0.3" + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" }, - "bin": { - "tfjs-custom-module": "dist/tools/custom_module/cli.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@tensorflow/tfjs-backend-cpu": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.15.0.tgz", - "integrity": "sha512-w3ecwXOdp+usf0s8lkLVl7+hCkKJY5Fm4LxqJ2Oy5MeeMNbwka8fDt8xyW5gOf0/gAaeG3qMKkh0lo6rr9fRlw==", - "dependencies": { - "@types/seedrandom": "^2.4.28", - "seedrandom": "^3.0.5" - }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, "engines": { - "yarn": ">= 1.3.2" - }, - "peerDependencies": { - "@tensorflow/tfjs-core": "4.15.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@tensorflow/tfjs-backend-webgl": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.15.0.tgz", - "integrity": "sha512-FoOva3KjKvWVHAXWAW5Ojboz1IbM1K9i8ggNG7czJgE0La4JHMo814UHSoE6Rc0hkRoOpvDUa+FxsqYOBEhuzQ==", - "dependencies": { - "@tensorflow/tfjs-backend-cpu": "4.15.0", - "@types/offscreencanvas": "~2019.3.0", - "@types/seedrandom": "^2.4.28", - "seedrandom": "^3.0.5" + "node_modules/@formatjs/cli": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.2.12.tgz", + "integrity": "sha512-bt1NEgkeYN8N9zWcpsPu3fZ57vv+biA+NtIQBlyOZnCp1bcvh+vNTXvmwF4C5qxqDtCylpOIb3yi3Ktgp4v0JQ==", + "dev": true, + "bin": { + "formatjs": "bin/formatjs" }, "engines": { - "yarn": ">= 1.3.2" + "node": ">= 16" }, "peerDependencies": { - "@tensorflow/tfjs-core": "4.15.0" + "@glimmer/env": "^0.1.7", + "@glimmer/reference": "^0.91.1 || ^0.92.0", + "@glimmer/syntax": "^0.92.0", + "@glimmer/validator": "^0.92.0", + "@vue/compiler-core": "^3.4.0", + "content-tag": "^2.0.1", + "ember-template-recast": "^6.1.4", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "@glimmer/env": { + "optional": true + }, + "@glimmer/reference": { + "optional": true + }, + "@glimmer/syntax": { + "optional": true + }, + "@glimmer/validator": { + "optional": true + }, + "@vue/compiler-core": { + "optional": true + }, + "content-tag": { + "optional": true + }, + "ember-template-recast": { + "optional": true + }, + "vue": { + "optional": true + } } }, - "node_modules/@tensorflow/tfjs-converter": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.15.0.tgz", - "integrity": "sha512-694igyzRcJYf/l6F12l3Sz6hw0xPjihlxXEpIpypYieoq/8WBIoDgigMA/gv0NylkJSfPwwuYs7GF2/zKH2Tmg==", - "peerDependencies": { - "@tensorflow/tfjs-core": "4.15.0" + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz", + "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==", + "dependencies": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" } }, - "node_modules/@tensorflow/tfjs-core": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-4.15.0.tgz", - "integrity": "sha512-0D9olf5cdMNvJKpmY4yiN0Br1pabOyYDwRyBpl02/Hf6MxiOAi+pXqs/Xa1342g9H2CzqeL1oNxz7nRKa71GyA==", + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", + "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", "dependencies": { - "@types/long": "^4.0.1", - "@types/offscreencanvas": "~2019.7.0", - "@types/seedrandom": "^2.4.28", - "@webgpu/types": "0.1.38", - "long": "4.0.0", - "node-fetch": "~2.6.1", - "seedrandom": "^3.0.5" - }, - "engines": { - "yarn": ">= 1.3.2" + "tslib": "^2.4.0" } }, - "node_modules/@tensorflow/tfjs-core/node_modules/@types/offscreencanvas": { - "version": "2019.7.3", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", - "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==" + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz", + "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-skeleton-parser": "1.8.2", + "tslib": "^2.4.0" + } }, - "node_modules/@tensorflow/tfjs-data": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-4.15.0.tgz", - "integrity": "sha512-9iDWloyW/tfw11UlVhsAan+ekfGDoPYg2yS5f+43ixdwbfe0jWc/azDhIXoJALMfe7TTLmbMsx3A64e43RoeOw==", + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz", + "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==", "dependencies": { - "@types/node-fetch": "^2.1.2", - "node-fetch": "~2.6.1", - "string_decoder": "^1.3.0" + "@formatjs/ecma402-abstract": "2.0.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.4.tgz", + "integrity": "sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "@formatjs/intl-displaynames": "6.6.8", + "@formatjs/intl-listformat": "7.5.7", + "intl-messageformat": "10.5.14", + "tslib": "^2.4.0" }, "peerDependencies": { - "@tensorflow/tfjs-core": "4.15.0", - "seedrandom": "^3.0.5" + "typescript": "^4.7 || 5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@tensorflow/tfjs-layers": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-4.15.0.tgz", - "integrity": "sha512-PwIXB7UtGyKVmIcbonqdtArcBgva8DOxeZqklyvb/zfg17GpWeh2++eUHKSpAl5K0mdO5Y2pL4ssD9p6AQqk9w==", - "peerDependencies": { - "@tensorflow/tfjs-core": "4.15.0" + "node_modules/@formatjs/intl-displaynames": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz", + "integrity": "sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" } }, - "node_modules/@tensorflow/tfjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@formatjs/intl-listformat": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz", + "integrity": "sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" } }, - "node_modules/@tensorflow/tfjs/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "tslib": "^2.4.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=10.10.0" } }, - "node_modules/@tensorflow/tfjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=7.0.0" + "node": "*" } }, - "node_modules/@tensorflow/tfjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, - "node_modules/@tensorflow/tfjs/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@tensorflow/tfjs/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" + "@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" }, "engines": { - "node": ">=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -3345,7 +4226,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@testing-library/dom/node_modules/chalk": { + "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -3361,7 +4242,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@testing-library/dom/node_modules/color-convert": { + "node_modules/@jest/types/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -3373,13 +4254,13 @@ "node": ">=7.0.0" } }, - "node_modules/@testing-library/dom/node_modules/color-name": { + "node_modules/@jest/types/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/@testing-library/dom/node_modules/has-flag": { + "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -3388,7 +4269,7 @@ "node": ">=8" } }, - "node_modules/@testing-library/dom/node_modules/supports-color": { + "node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -3400,2596 +4281,6244 @@ "node": ">=8" } }, - "node_modules/@testing-library/jest-dom": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.2.0.tgz", - "integrity": "sha512-+BVQlJ9cmEn5RDMUS8c2+TU6giLvzaHZ8sU/x0Jj7fk+6/46wPdwlgOPcpxS17CjcanBi/3VmGMqVr2rmbUmNw==", - "dev": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@adobe/css-tools": "^4.3.2", - "@babel/runtime": "^7.9.2", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.15", - "redent": "^3.0.0" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" - }, - "peerDependencies": { - "@jest/globals": ">= 28", - "@types/jest": ">= 28", - "jest": ">= 28", - "vitest": ">= 0.32" - }, - "peerDependenciesMeta": { - "@jest/globals": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "jest": { - "optional": true - }, - "vitest": { - "optional": true - } + "node": ">=6.0.0" } }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "node_modules/@microbit/makecode-embed": { + "version": "0.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@microbit/makecode-embed/-/makecode-embed-0.0.0-alpha.7.tgz", + "integrity": "sha512-tQPLXfQFRCIMpl80OCyZ4c7UlBiSasZb2gl8hUiFG+Q7Rb9Q8Zan9dQ4dNPueEAzn1Osykhekd9wrYhdnn2FDg==", + "dependencies": { + "tslib": ">=2.0.0" }, "engines": { - "node": ">=8" + "node": ">=20", + "npm": ">=10" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" } }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, + "node_modules/@microbit/microbit-connection": { + "version": "0.0.0-alpha.21", + "resolved": "https://registry.npmjs.org/@microbit/microbit-connection/-/microbit-connection-0.0.0-alpha.21.tgz", + "integrity": "sha512-qIyGL+yas89w5/sHIvTRIfT+1iDFe19MBzDCWSpYg18Vjv+6pcTdai/2qLvtzYrr6uODvlZJSpaW9LEoSFl1Eg==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "@microbit/microbit-universal-hex": "^0.2.2", + "@types/web-bluetooth": "^0.0.20", + "crelt": "^1.0.6", + "dapjs": "github:microbit-matt-hillsdon/dapjs#v2.3.0-microbit.2", + "nrf-intel-hex": "^1.4.0" + } + }, + "node_modules/@microbit/microbit-universal-hex": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@microbit/microbit-universal-hex/-/microbit-universal-hex-0.2.2.tgz", + "integrity": "sha512-qyFt8ATgxAyPkNz9Yado4HXEeCctwP/8L1/v2hFLeVUqw/HFqVqV4piJbqRMmyOefMcQ9OyVPhLXjtbKn9063Q==", "engines": { - "node": ">=8" + "node": ">=8.5", + "npm": ">=6.0", + "yarn": "^1.0" + }, + "peerDependencies": { + "tslib": ">=1.11.1" } }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@microbit/ml-header-generator": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@microbit/ml-header-generator/-/ml-header-generator-0.4.3.tgz", + "integrity": "sha512-aMdo074VvHr4Ol1ctx8zvvaqX/FjOBD7bv2I+CLyV051OeZ24PdYB6FMf5nH6ULJVyUgKGNjIadAxRbieaPauA==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true - }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@testing-library/jest-dom/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@testing-library/jest-dom/node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "node_modules/@playwright/test": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0.tgz", + "integrity": "sha512-TVYsfMlGAaxeUllNkywbwek67Ncf8FRGn8ZlRdO291OL3NjG9oMbfVhyP82HQF0CZLMrYsvesqoUekxdWuF9Qw==", "dev": true, "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "playwright": "1.45.0" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@remix-run/router": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", + "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@testing-library/svelte": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-4.0.5.tgz", - "integrity": "sha512-P7X3mpYv/My4hBZfxVxTFV5KcA+EoWfRCguWP7WQdYj6HMdg/L+LiwG4ocvLe+hupedrC7dwcy85JlxKplJp2g==", + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, "dependencies": { - "@testing-library/dom": "^9.3.1" + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" }, "engines": { - "node": ">= 10" + "node": ">=14.0.0" }, "peerDependencies": { - "svelte": "^3 || ^4" + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@tsconfig/svelte": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-4.0.1.tgz", - "integrity": "sha512-B+XlGpmuAQzJqDoBATNCvEPqQg0HkO7S8pM14QDI5NsmtymzRexQ1N+nX2H6RTtFbuFgaZD4I8AAi8voGg0GLg==", - "dev": true - }, - "node_modules/@tweenjs/tween.js": { - "version": "18.6.4", - "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.4.tgz", - "integrity": "sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==", - "dev": true - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true - }, - "node_modules/@types/browser-lang": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/browser-lang/-/browser-lang-0.1.2.tgz", - "integrity": "sha512-F6UrLn++11o967g8+G4c0mILIuSuyhpE9N989T4Rr+sgHqYpdrAbPgp3KOPPf4AA2A09dQDUB8/3K1GBG9Daeg==", - "dev": true - }, - "node_modules/@types/d3": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", - "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, "dependencies": { - "@types/d3-array": "*", - "@types/d3-axis": "*", - "@types/d3-brush": "*", - "@types/d3-chord": "*", - "@types/d3-color": "*", - "@types/d3-contour": "*", - "@types/d3-delaunay": "*", - "@types/d3-dispatch": "*", - "@types/d3-drag": "*", - "@types/d3-dsv": "*", - "@types/d3-ease": "*", - "@types/d3-fetch": "*", - "@types/d3-force": "*", - "@types/d3-format": "*", - "@types/d3-geo": "*", - "@types/d3-hierarchy": "*", - "@types/d3-interpolate": "*", - "@types/d3-path": "*", - "@types/d3-polygon": "*", - "@types/d3-quadtree": "*", - "@types/d3-random": "*", - "@types/d3-scale": "*", - "@types/d3-scale-chromatic": "*", - "@types/d3-selection": "*", - "@types/d3-shape": "*", - "@types/d3-time": "*", - "@types/d3-time-format": "*", - "@types/d3-timer": "*", - "@types/d3-transition": "*", - "@types/d3-zoom": "*" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@types/d3-array": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", - "dev": true + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@types/d3-axis": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", - "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/d3-selection": "*" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@types/d3-brush": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", - "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/d3-selection": "*" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@types/d3-chord": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@tensorflow/tfjs": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-4.20.0.tgz", + "integrity": "sha512-+ZLfJq2jyIOE2/+yKPoyD/gfy3RZypbfMrlzvBDgodTK5jnexprihhX38hxilh9HPWvWQXJqiUjKJP5ECCikrw==", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "4.20.0", + "@tensorflow/tfjs-backend-webgl": "4.20.0", + "@tensorflow/tfjs-converter": "4.20.0", + "@tensorflow/tfjs-core": "4.20.0", + "@tensorflow/tfjs-data": "4.20.0", + "@tensorflow/tfjs-layers": "4.20.0", + "argparse": "^1.0.10", + "chalk": "^4.1.0", + "core-js": "3.29.1", + "regenerator-runtime": "^0.13.5", + "yargs": "^16.0.3" + }, + "bin": { + "tfjs-custom-module": "dist/tools/custom_module/cli.js" + } + }, + "node_modules/@tensorflow/tfjs-backend-cpu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.20.0.tgz", + "integrity": "sha512-1QRQ6AqAa/VB8JOArf5nY3Dc/QQHXbfuxgdIdQhKrABEHgvlaWt2Vv696UhIlVl75YoNY+vWlCwBdGQIKYfFGw==", + "dependencies": { + "@types/seedrandom": "^2.4.28", + "seedrandom": "^3.0.5" + }, + "engines": { + "yarn": ">= 1.3.2" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "4.20.0" + } + }, + "node_modules/@tensorflow/tfjs-backend-webgl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.20.0.tgz", + "integrity": "sha512-M03fJonJGxm2u3SCzRNA2JLh0gxaAye64SEmGAXOehizowxy42l+lMsPWU8xU7r7mN6PEilBNkuKAf5YJ7Xumg==", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "4.20.0", + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "^2.4.28", + "seedrandom": "^3.0.5" + }, + "engines": { + "yarn": ">= 1.3.2" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "4.20.0" + } + }, + "node_modules/@tensorflow/tfjs-converter": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.20.0.tgz", + "integrity": "sha512-UJ2ntQ1TNtVHB5qGMwB0j306bs3KH1E1HKJ9Dxvrc6PUaivOV+CPKqmbidOFG5LylXeRC36JBdhe+gVT2nFHNw==", + "peerDependencies": { + "@tensorflow/tfjs-core": "4.20.0" + } + }, + "node_modules/@tensorflow/tfjs-core": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-4.20.0.tgz", + "integrity": "sha512-m/cc9qDc63al9UhdbXRUYTLGfJJlhuN5tylAX/2pJMLj32c8a6ThGDJYoKzpf32n5g3MQGYLchjClDxeGdXMPQ==", + "dependencies": { + "@types/long": "^4.0.1", + "@types/offscreencanvas": "~2019.7.0", + "@types/seedrandom": "^2.4.28", + "@webgpu/types": "0.1.38", + "long": "4.0.0", + "node-fetch": "~2.6.1", + "seedrandom": "^3.0.5" + }, + "engines": { + "yarn": ">= 1.3.2" + } + }, + "node_modules/@tensorflow/tfjs-core/node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==" + }, + "node_modules/@tensorflow/tfjs-data": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-4.20.0.tgz", + "integrity": "sha512-k6S8joXhoXkatcoT6mYCxBzRCsnrLfnl6xjLe46SnXO0oEEy4Vuzbmp5Ydl1uU2hHr73zL91EdAC1k8Hng/+oA==", + "dependencies": { + "@types/node-fetch": "^2.1.2", + "node-fetch": "~2.6.1", + "string_decoder": "^1.3.0" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "4.20.0", + "seedrandom": "^3.0.5" + } + }, + "node_modules/@tensorflow/tfjs-layers": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-4.20.0.tgz", + "integrity": "sha512-SCHZH29Vyw+Y9eoaJHiaNo6yqM9vD3XCKncoczonRRywejm3FFqddg1AuWAfSE9XoNPE21o9PsknvKLl/Uh+Cg==", + "peerDependencies": { + "@tensorflow/tfjs-core": "4.20.0" + } + }, + "node_modules/@tensorflow/tfjs-vis": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-vis/-/tfjs-vis-1.5.1.tgz", + "integrity": "sha512-oNithKiR7VZaE+xUvz6Leww4TYEPhKi8j5xnEYvT3j7brK2Njdvril7UgFtZ8EYZBdeX6XNim5Eu3/23gTQ1dA==", + "dependencies": { + "d3-format": "~1.3.0", + "d3-selection": "~1.3.0", + "glamor": "~2.20.40", + "preact": "~8.2.9", + "vega": "5.20.0", + "vega-embed": "6.17.0", + "vega-lite": "4.13.1" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": ">= 1.0.0" + } + }, + "node_modules/@tensorflow/tfjs-vis/node_modules/d3-format": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", + "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==" + }, + "node_modules/@tensorflow/tfjs-vis/node_modules/d3-selection": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.2.tgz", + "integrity": "sha512-OoXdv1nZ7h2aKMVg3kaUFbLLK5jXUFAMLD/Tu5JA96mjf8f2a9ZUESGY+C36t8R1WFeWk/e55hy54Ml2I62CRQ==" + }, + "node_modules/@tensorflow/tfjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@tensorflow/tfjs/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.2.0.tgz", + "integrity": "sha512-CytIvb6tVOADRngTHGWNxH8LPgO/3hi/BdCEHOf7Qd2GvZVClhVP0Wo/QHzWhpki49Bk0b4VT6xpt3fx8HTSIw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", + "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/react/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/react/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/react/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/clone": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz", + "integrity": "sha512-vcxBr+ybljeSiasmdke1cQ9ICxoEwaBgM1OQ/P5h4MPj/kRyLcDl5L8PrftlbyV1kBbJIs3M3x1A1+rcWd4mEA==" + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "dev": true, + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "dev": true + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", "dev": true }, - "node_modules/@types/d3-color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "dev": true + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "dev": true, + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "dev": true + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", + "dev": true + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "dev": true + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "dev": true + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "dev": true, + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz", + "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==", + "dev": true + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "dev": true + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "dev": true, + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.6.tgz", + "integrity": "sha512-qlmD/8aMk5xGorUvTUWHCiumvgaUXYldYjNVOWtYoTYY/L+WwIEAmJxUmTgr9LoGNG0PPAOmqMDJVDPc7DOpPw==", + "dev": true + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dev": true, + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.2.tgz", + "integrity": "sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA==", + "dev": true + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "dev": true + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "dev": true + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "dev": true + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dev": true, + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz", + "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==", + "dev": true + }, + "node_modules/@types/d3-selection": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", + "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==", + "dev": true + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "dev": true, + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", + "dev": true + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "dev": true + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "dev": true + }, + "node_modules/@types/d3-transition": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", + "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "dev": true, + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-IyNhGHu71jH1jCXTHmafuoAAdsbBON3kDh7u/UUhLmjYgN5TYB54e1R8ckTCiIevl2UuZaCsi9XRxineY5yUjw==", + "deprecated": "This is a stub types definition. fast-json-stable-stringify provides its own type definitions, so you do not need this installed.", + "dependencies": { + "fast-json-stable-stringify": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.13", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", + "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==", + "dev": true + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==" + }, + "node_modules/@types/lodash.camelcase": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@types/lodash.camelcase/-/lodash.camelcase-4.3.9.tgz", + "integrity": "sha512-ys9/hGBfsKxzmFI8hckII40V0ASQ83UM2pxfQRghHAwekhH4/jWtjz/3/9YDy7ZpUd/H0k2STSqmPR28dnj7Zg==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/lodash.mergewith": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz", + "integrity": "sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/lodash.upperfirst": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@types/lodash.upperfirst/-/lodash.upperfirst-4.3.9.tgz", + "integrity": "sha512-bYhT1QEsk9/ggrFjK86Pb5bnKJgTBbpVA77Ygbb1aW1oiWJNGRbVjSlQ9We/ihB9vVpX5WqDJvbISXlukGR+dQ==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/node": { + "version": "18.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", + "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/node-hid": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/node-hid/-/node-hid-1.3.4.tgz", + "integrity": "sha512-0ootpsYetN9vjqkDSwm/cA4fk/9yGM/PO0X8SLPE/BzXlUaBelImMWMymtF9QEoEzxY0pnhcROIJM0CNSUqO8w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.3.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", + "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/seedrandom": { + "version": "2.4.34", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.34.tgz", + "integrity": "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true + }, + "node_modules/@types/usb": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/usb/-/usb-1.5.4.tgz", + "integrity": "sha512-NOUza/8yuswu6RoECQyPHEjA34qpDaeONQ72fm+bCnnN2DJjDePAY+NsmV17H88oIlq4JlJ2mD5Kh5d6R2MwTQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/w3c-web-serial": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/w3c-web-serial/-/w3c-web-serial-1.0.6.tgz", + "integrity": "sha512-5IlDdQ2C56sCVwc7CUlqT9Axxw+0V/FbWRbErklYIzZ5mKL9s4l7epXHygn+4X7L2nmAPnVvRl55XUVo0760Rg==" + }, + "node_modules/@types/w3c-web-usb": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", + "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz", + "integrity": "sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/type-utils": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz", + "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz", + "integrity": "sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz", + "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz", + "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz", + "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz", + "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", + "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", + "dev": true, + "dependencies": { + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", + "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", + "dev": true, + "dependencies": { + "@vitest/utils": "1.6.0", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", + "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/@vitest/spy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", + "dev": true, + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/utils/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/@webgpu/types": { + "version": "0.1.38", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.38.tgz", + "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==" + }, + "node_modules/@zag-js/dom-query": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.16.0.tgz", + "integrity": "sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==" + }, + "node_modules/@zag-js/element-size": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.10.5.tgz", + "integrity": "sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w==" + }, + "node_modules/@zag-js/focus-visible": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.16.0.tgz", + "integrity": "sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA==", + "dependencies": { + "@zag-js/dom-query": "0.16.0" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flat-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz", + "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", + "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4", + "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", + "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chart.js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.1.tgz", + "integrity": "sha512-C74QN1bxwV1v2PEujhmKjOZ7iUM4w6BWs23Md/6aOZZSlwMzeCIDGuZay++rBgChYru7/+QFeoQW0fQoP534Dg==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=7" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clear-any-console": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/clear-any-console/-/clear-any-console-1.16.2.tgz", + "integrity": "sha512-OL/7wZpNy9x0GBSzz3poWja84Nr7iaH8aYNsJ5Uet2BVLj6Lm1zvWpZN/yH46Vv3ae7YfHmLLMmfHj911fshJg==", + "dev": true + }, + "node_modules/cli-check-node": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/cli-check-node/-/cli-check-node-1.3.4.tgz", + "integrity": "sha512-iLGgQXm82iP8eH3R67qbOWs5qqUOLmNnMy5Lzl/RybcMh3y+H2zWU5POzuQ6oDUOdz4XWuxcFhP75szqd6frLg==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "log-symbols": "^3.0.0" + } + }, + "node_modules/cli-check-node/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-check-node/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-check-node/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-check-node/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cli-check-node/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-check-node/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-handle-error": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cli-handle-error/-/cli-handle-error-4.4.0.tgz", + "integrity": "sha512-RyBCnKlc7xVr79cKb9RfBq+4fjwQeX8HKeNzIPnI/W+DWWIUUKh2ur576DpwJ3kZt2UGHlIAOF7N9txy+mgZsA==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "log-symbols": "^3.0.0" + } + }, + "node_modules/cli-handle-error/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-handle-error/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-handle-error/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-handle-error/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cli-handle-error/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-handle-error/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-handle-unhandled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-handle-unhandled/-/cli-handle-unhandled-1.1.1.tgz", + "integrity": "sha512-Em91mJvU7VdgT2MxQpyY633vW1tDzRjPDbii6ZjEBHHLLh0xDoVkFt/wjvi9nSvJcz9rJmvtJSK8KL/hvF0Stg==", + "dev": true, + "dependencies": { + "cli-handle-error": "^4.1.0" + } + }, + "node_modules/cli-welcome": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/cli-welcome/-/cli-welcome-2.2.3.tgz", + "integrity": "sha512-hxaOpahLk5PAYJj4tOcv8vaNMaBQHeMzeLQTAHq2EoGGTKVYV/MPCSlg5EEsKZ7y8WDGS2ScQtnITw02ZNukMQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "clear-any-console": "^1.16.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color2k": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", + "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz", + "integrity": "sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js": { + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.1.tgz", + "integrity": "sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/css-in-js-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", + "dependencies": { + "hyphenate-style-name": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "dev": true, + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo-projection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-3.0.0.tgz", + "integrity": "sha512-1JE+filVbkEX2bT25dJdQ05iA4QHvUwev6o0nIQHOSrNlHCAKfVss/U10vEM3pA4j5v7uQoFdQ4KLbx9BlEbWA==", + "dependencies": { + "commander": "2", + "d3-array": "1 - 2", + "d3-geo": "1.12.0 - 2", + "resolve": "^1.1.10" + }, + "bin": { + "geo2svg": "bin/geo2svg", + "geograticule": "bin/geograticule", + "geoproject": "bin/geoproject", + "geoquantize": "bin/geoquantize", + "geostitch": "bin/geostitch" + } + }, + "node_modules/d3-geo-projection/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/d3-geo-projection/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-geo-projection/node_modules/d3-geo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-2.0.2.tgz", + "integrity": "sha512-8pM1WGMLGFuhq9S+FpPURxic+gKzjluCD/CHTuUF3mXMeiCo0i6R0tO1s4+GArRFde96SLcW/kOFRjoAosPsFA==", + "dependencies": { + "d3-array": "^2.5.0" + } + }, + "node_modules/d3-geo-projection/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dapjs": { + "version": "2.3.0-microbit.2", + "resolved": "git+ssh://git@github.com/microbit-matt-hillsdon/dapjs.git#4529bf7a8dcb124b0a7be2bd87a5655557796456", + "license": "MIT", + "dependencies": { + "@types/node-hid": "^1.2.0", + "@types/usb": "^1.5.1", + "@types/w3c-web-usb": "^1.0.10" + }, + "engines": { + "node": ">=8.14.0" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.613", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz", + "integrity": "sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==", "dev": true }, - "node_modules/@types/d3-contour": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", - "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", + "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", "dev": true, "dependencies": { - "@types/d3-array": "*", - "@types/geojson": "*" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/@types/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", - "dev": true + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } }, - "node_modules/@types/d3-dispatch": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", - "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", - "dev": true + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz", + "integrity": "sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } }, - "node_modules/@types/d3-drag": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", - "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "@types/d3-selection": "*" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@types/d3-dsv": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", - "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", - "dev": true - }, - "node_modules/@types/d3-ease": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", - "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", - "dev": true - }, - "node_modules/@types/d3-fetch": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", - "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "@types/d3-dsv": "*" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/d3-force": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz", - "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==", - "dev": true - }, - "node_modules/@types/d3-format": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", - "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", - "dev": true - }, - "node_modules/@types/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "@types/geojson": "*" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/@types/d3-hierarchy": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.6.tgz", - "integrity": "sha512-qlmD/8aMk5xGorUvTUWHCiumvgaUXYldYjNVOWtYoTYY/L+WwIEAmJxUmTgr9LoGNG0PPAOmqMDJVDPc7DOpPw==", - "dev": true - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", - "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "@types/d3-color": "*" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/d3-path": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.2.tgz", - "integrity": "sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA==", - "dev": true - }, - "node_modules/@types/d3-polygon": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", - "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", - "dev": true - }, - "node_modules/@types/d3-quadtree": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", - "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", - "dev": true - }, - "node_modules/@types/d3-random": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", - "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", - "dev": true - }, - "node_modules/@types/d3-scale": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", - "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "@types/d3-time": "*" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz", - "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==", - "dev": true - }, - "node_modules/@types/d3-selection": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", - "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==", - "dev": true + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/@types/d3-shape": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", - "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@types/d3-path": "*" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/d3-time": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", - "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", - "dev": true - }, - "node_modules/@types/d3-time-format": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", - "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", - "dev": true - }, - "node_modules/@types/d3-timer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", - "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", - "dev": true + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/@types/d3-transition": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", - "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@types/d3-selection": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/d3-zoom": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", - "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "node_modules/@types/geojson": { - "version": "7946.0.13", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", - "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==", - "dev": true - }, - "node_modules/@types/js-cookie": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", - "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", - "dependencies": { - "undici-types": "~5.26.4" + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@types/node-hid": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/node-hid/-/node-hid-1.3.4.tgz", - "integrity": "sha512-0ootpsYetN9vjqkDSwm/cA4fk/9yGM/PO0X8SLPE/BzXlUaBelImMWMymtF9QEoEzxY0pnhcROIJM0CNSUqO8w==", + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { - "@types/node": "*" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/offscreencanvas": { - "version": "2019.3.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", - "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" - }, - "node_modules/@types/pug": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", - "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", - "dev": true - }, - "node_modules/@types/seedrandom": { - "version": "2.4.34", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.34.tgz", - "integrity": "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==" - }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, - "node_modules/@types/stats.js": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", - "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==", - "dev": true + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/@types/three": { - "version": "0.152.1", - "resolved": "https://registry.npmjs.org/@types/three/-/three-0.152.1.tgz", - "integrity": "sha512-PMOCQnx9JRmq+2OUGTPoY9h1hTWD2L7/nmuW/SyNq1Vbq3Lwt3MNdl3wYSa4DvLTGv62NmIXD9jYdAOwohwJyw==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "@tweenjs/tween.js": "~18.6.4", - "@types/stats.js": "*", - "@types/webxr": "*", - "fflate": "~0.6.9", - "lil-gui": "~0.17.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/@types/throttle-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz", - "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==", - "dev": true - }, - "node_modules/@types/usb": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/usb/-/usb-1.5.4.tgz", - "integrity": "sha512-NOUza/8yuswu6RoECQyPHEjA34qpDaeONQ72fm+bCnnN2DJjDePAY+NsmV17H88oIlq4JlJ2mD5Kh5d6R2MwTQ==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "@types/node": "*" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/w3c-web-serial": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/w3c-web-serial/-/w3c-web-serial-1.0.6.tgz", - "integrity": "sha512-5IlDdQ2C56sCVwc7CUlqT9Axxw+0V/FbWRbErklYIzZ5mKL9s4l7epXHygn+4X7L2nmAPnVvRl55XUVo0760Rg==" - }, - "node_modules/@types/w3c-web-usb": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", - "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.17", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", - "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", - "dev": true - }, - "node_modules/@types/webxr": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.10.tgz", - "integrity": "sha512-n3u5sqXQJhf1CS68mw3Wf16FQ4cRPNBBwdYLFzq3UddiADOim1Pn3Y6PBdDilz1vOJF3ybLxJ8ZEDlLIzrOQZg==", - "dev": true + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://opencollective.com/eslint" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">=0.10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" + "node": ">=4.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@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" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8.6.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/fbjs": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", + "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "dependencies": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, + "node_modules/fbjs/node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js." + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "minimatch": "^5.0.1" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "to-regex-range": "^5.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">=8" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=10" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, + "node_modules/focus-lock": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.5.tgz", + "integrity": "sha512-QFaHbhv9WPUeLYBDe/PAuLKJ4Dd9OPvKs9xZBr3yLXnUrDNaVXKu2baDBXe3naPY30hgHYSsf2JW4jzas2mDEQ==", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "tslib": "^2.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=10" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@vitest/expect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.0.4.tgz", - "integrity": "sha512-/NRN9N88qjg3dkhmFcCBwhn/Ie4h064pY3iv7WLRsDJW7dXnEgeoa8W9zy7gIPluhz6CkgqiB3HmpIXgmEY5dQ==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "@vitest/spy": "1.0.4", - "@vitest/utils": "1.0.4", - "chai": "^4.3.10" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "is-callable": "^1.1.3" } }, - "node_modules/@vitest/runner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.0.4.tgz", - "integrity": "sha512-rhOQ9FZTEkV41JWXozFM8YgOqaG9zA7QXbhg5gy6mFOVqh4PcupirIJ+wN7QjeJt8S8nJRYuZH1OjJjsbxAXTQ==", - "dev": true, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "@vitest/utils": "1.0.4", - "p-limit": "^5.0.0", - "pathe": "^1.1.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">= 6" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", - "dev": true, + "node_modules/framer-motion": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz", + "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==", "dependencies": { - "yocto-queue": "^1.0.0" + "tslib": "^2.4.0" }, - "engines": { - "node": ">=18" + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" } }, - "node_modules/@vitest/snapshot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.0.4.tgz", - "integrity": "sha512-vkfXUrNyNRA/Gzsp2lpyJxh94vU2OHT1amoD6WuvUAA12n32xeVZQ0KjjQIf8F6u7bcq2A2k969fMVxEsxeKYA==", + "node_modules/framer-motion/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "optional": true + }, + "node_modules/framesync": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", + "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "dependencies": { + "tslib": "2.4.0" + } + }, + "node_modules/framesync/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "pretty-format": "^29.7.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=10" } }, - "node_modules/@vitest/snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 10.0.0" } }, - "node_modules/@vitest/snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/@vitest/snapshot/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/@vitest/spy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.0.4.tgz", - "integrity": "sha512-9ojTFRL1AJVh0hvfzAQpm0QS6xIS+1HFIw94kl/1ucTfGCaj1LV/iuJU4Y6cdR03EzPDygxTHwE1JOm+5RCcvA==", - "dev": true, - "dependencies": { - "tinyspy": "^2.2.0" - }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@vitest/utils": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.0.4.tgz", - "integrity": "sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { - "diff-sequences": "^29.6.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@vitest/utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@vitest/utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.9.0" } }, - "node_modules/@vitest/utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/@webgpu/types": { - "version": "0.1.38", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.38.tgz", - "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==" - }, - "node_modules/@windicss/config": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@windicss/config/-/config-1.9.3.tgz", - "integrity": "sha512-u8GUjsfC9r5X1AGYhzb1lX3zZj8wqk6SH1DYex8XUGmZ1M2UpvnUPOFi63XFViduspQ6l2xTX84QtG+lUzhEoQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "jiti": "^1.18.2", - "windicss": "^3.5.6" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/@windicss/config/node_modules/windicss": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/windicss/-/windicss-3.5.6.tgz", - "integrity": "sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==", + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "bin": { - "windicss": "cli/index.js" - }, "engines": { - "node": ">= 12" + "node": "*" } }, - "node_modules/@windicss/plugin-utils": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.9.3.tgz", - "integrity": "sha512-3VG5HEGeuIfG/9iTwLyzWWm/aGKNTbtSVkpkAabdRuDP/2lEmf6Hpo4uo5drwE+2O9gXfc6nSYgAwBjotx5CfQ==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "@antfu/utils": "^0.7.2", - "@windicss/config": "1.9.3", - "debug": "^4.3.4", - "fast-glob": "^3.2.12", - "magic-string": "^0.30.0", - "micromatch": "^4.0.5", - "windicss": "^3.5.6" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@windicss/plugin-utils/node_modules/@antfu/utils": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.7.tgz", - "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" } }, - "node_modules/@windicss/plugin-utils/node_modules/windicss": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/windicss/-/windicss-3.5.6.tgz", - "integrity": "sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==", + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "bin": { - "windicss": "cli/index.js" - }, "engines": { - "node": ">= 12" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=0.4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/glamor": { + "version": "2.20.40", + "resolved": "https://registry.npmjs.org/glamor/-/glamor-2.20.40.tgz", + "integrity": "sha512-DNXCd+c14N9QF8aAKrfl4xakPk5FdcFwmH7sD0qnC0Pr7xoZ5W9yovhUrY/dJc3psfGGXC58vqQyRtuskyUJxA==", + "dependencies": { + "fbjs": "^0.8.12", + "inline-style-prefixer": "^3.0.6", + "object-assign": "^4.1.1", + "prop-types": "^15.5.10", + "through": "^2.3.8" } }, - "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=0.4.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "debug": "^4.3.4" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 14" + "node": ">= 6" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "brace-expansion": "^1.1.7" }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { "node": ">=4" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "get-intrinsic": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dependencies": { - "dequal": "^2.0.3" + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", - "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.4", - "semver": "^6.3.1" + "es-define-property": "^1.0.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", - "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4", - "core-js-compat": "^3.33.1" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", - "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/balanced-match": { + "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "require-from-string": "^2.0.2" + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "react-is": "^16.7.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/browser-lang": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/browser-lang/-/browser-lang-0.2.1.tgz", - "integrity": "sha512-+xmtsTxVZKWrKHoNUQp4Tm7BEXlnMwOMAHZAh1SSot1+n04qHLFIH0K5anX52k5BkcauggbaNlWT8f3bVwDh/Q==" - }, - "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">= 14" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, "engines": { - "node": "*" + "node": ">= 14" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=16.17.0" } }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dev": true, + "node_modules/hyphenate-style-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", + "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 4" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "optional": true, + "peer": true }, - "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", - "dev": true, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=0.8.19" } }, - "node_modules/chart.js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.1.tgz", - "integrity": "sha512-C74QN1bxwV1v2PEujhmKjOZ7iUM4w6BWs23Md/6aOZZSlwMzeCIDGuZay++rBgChYru7/+QFeoQW0fQoP534Dg==", - "dependencies": { - "@kurkle/color": "^0.3.0" - }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, "engines": { - "pnpm": ">=7" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inline-style-prefixer": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz", + "integrity": "sha512-ne8XIyyqkRaNJ1JfL1NYzNdCNxq+MCBQhC8NgOQlzNm2vv3XxlP0VSLQUbSRCF6KPEoveCVEpayHoHzcMyZsMQ==", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "bowser": "^1.7.3", + "css-in-js-utils": "^2.0.0" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/inline-style-prefixer/node_modules/bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/cli-color": { + "node_modules/internmap": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - }, + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", "engines": { - "node": ">=0.10" + "node": ">=12" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/intl-messageformat": { + "version": "10.5.14", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz", + "integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "tslib": "^2.4.0" } }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" + "loose-envify": "^1.0.0" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, "engines": { - "node": ">= 10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/convert-source-map": { + "node_modules/is-async-function": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, - "peer": true - }, - "node_modules/core-js": { - "version": "3.29.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.1.tgz", - "integrity": "sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==", - "hasInstallScript": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/core-js-compat": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", - "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "browserslist": "^4.22.2" + "has-bigints": "^1.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "rrweb-cssom": "^0.6.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, "dependencies": { - "internmap": "1 - 2" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-axis": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { - "d3-path": "1 - 3" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "dependencies": { - "d3-array": "^3.2.0" + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=0.12.0" } }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { - "delaunator": "5" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, "dependencies": { - "d3-dsv": "1 - 3" + "call-bind": "^1.0.7" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-force": { + "node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, "dependencies": { - "d3-array": "2.5.0 - 3" + "which-typed-array": "^1.1.14" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, "dependencies": { - "d3-color": "1 - 3" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, - "node_modules/d3-polygon": { + "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "node_modules/isomorphic-fetch/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "node_modules/isomorphic-fetch/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "node_modules/jake": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "d3-path": "^3.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "d3-time": "1 - 3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" + "node": ">=8" } }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/dapjs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/dapjs/-/dapjs-2.3.0.tgz", - "integrity": "sha512-quanzq7+2xnqgGqqYgARz9o3iBcZ3Ir5r5mTA7WPsjrp9ilEqqCToSFGTL+8HuGP35dUIL7O+yMBloYHhHgZDA==", + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "@types/node-hid": "^1.2.0", - "@types/usb": "^1.5.1", - "@types/w3c-web-usb": "^1.0.4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8.14.0" + "node": ">=8" } }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "ms": "2.1.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "type-detect": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/defu": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/defu/-/defu-5.0.1.tgz", - "integrity": "sha512-EPS1carKg+dkEVy3qNTqIdp2qV7mUP08nIsupfwQpz++slCVRw7qbQyWvSTig+kFPwz2XXp5/kIIkH+CwrJKkQ==", + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/diff-sequences": { + "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.613", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz", - "integrity": "sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" + "node": ">=8" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "node": ">=7.0.0" } }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/esbuild": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", - "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.9", - "@esbuild/android-arm64": "0.19.9", - "@esbuild/android-x64": "0.19.9", - "@esbuild/darwin-arm64": "0.19.9", - "@esbuild/darwin-x64": "0.19.9", - "@esbuild/freebsd-arm64": "0.19.9", - "@esbuild/freebsd-x64": "0.19.9", - "@esbuild/linux-arm": "0.19.9", - "@esbuild/linux-arm64": "0.19.9", - "@esbuild/linux-ia32": "0.19.9", - "@esbuild/linux-loong64": "0.19.9", - "@esbuild/linux-mips64el": "0.19.9", - "@esbuild/linux-ppc64": "0.19.9", - "@esbuild/linux-riscv64": "0.19.9", - "@esbuild/linux-s390x": "0.19.9", - "@esbuild/linux-x64": "0.19.9", - "@esbuild/netbsd-x64": "0.19.9", - "@esbuild/openbsd-x64": "0.19.9", - "@esbuild/sunos-x64": "0.19.9", - "@esbuild/win32-arm64": "0.19.9", - "@esbuild/win32-ia32": "0.19.9", - "@esbuild/win32-x64": "0.19.9" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, - "peerDependencies": { - "eslint": ">=6.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-plugin-svelte": { - "version": "2.35.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.35.1.tgz", - "integrity": "sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==", + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@jridgewell/sourcemap-codec": "^1.4.14", - "debug": "^4.3.1", - "eslint-compat-utils": "^0.1.2", - "esutils": "^2.0.3", - "known-css-properties": "^0.29.0", - "postcss": "^8.4.5", - "postcss-load-config": "^3.1.4", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.11", - "semver": "^7.5.3", - "svelte-eslint-parser": ">=0.33.0 <1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0-0", - "svelte": "^3.37.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-plugin-svelte/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-svelte/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-plugin-svelte/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.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" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint/node_modules/ansi-styles": { + "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -6004,7 +10533,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/chalk": { + "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -6020,7 +10549,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/color-convert": { + "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -6032,601 +10561,732 @@ "node": ">=7.0.0" } }, - "node_modules/eslint/node_modules/color-name": { + "node_modules/jest-util/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/eslint/node_modules/escape-string-regexp": { + "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/jsdom": { + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz", + "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==", + "dev": true, + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.4", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.10", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.4", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.17.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/jsdom/node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-pretty-compact": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", + "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=4.0" + "node": ">=6" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.0.0" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "node_modules/esrecurse": { + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true + }, + "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==" + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "chalk": "^2.4.2" }, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, "dependencies": { - "@types/estree": "^1.0.0" + "get-func-name": "^2.0.1" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "tslib": "^2.0.3" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" + "yallist": "^3.0.2" } }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "bin": { + "lz-string": "bin/bin.js" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dev": true, "dependencies": { - "type": "^2.7.2" + "@jridgewell/sourcemap-codec": "^1.4.15" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, "engines": { - "node": ">=8.6.0" + "node": ">= 8" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 6" + "node": ">=8.6" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/fflate": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", - "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", - "dev": true - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "flat-cache": "^3.0.4" + "mime-db": "1.52.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.6" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, + "node_modules/ml4f": { + "version": "1.10.1", + "resolved": "git+ssh://git@github.com/microsoft/ml4f.git#ec901a2378827139c4e422ecc196fc4759d397ca", + "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "@tensorflow/tfjs": "^4.10.0", + "@tensorflow/tfjs-vis": "^1.5.1", + "commander": "^6.1.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "bin": { + "ml4f": "ml4f" } }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true - }, - "node_modules/focus-trap": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", - "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", - "dev": true, - "dependencies": { - "tabbable": "^6.2.0" + "node_modules/ml4f/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", "dev": true, "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "peer": true, + "node_modules/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { - "node": ">=6.9.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dev": true, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": "*" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, "engines": { - "node": ">=10.13.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, + "node_modules/nrf-intel-hex": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/nrf-intel-hex/-/nrf-intel-hex-1.4.0.tgz", + "integrity": "sha512-q3+GGRIpe0VvCjUP1zaqW5rk6IpCZzhD0lu7Sguo1bgWwFcA9kZRjsaKUb0jBQMnefyOl5o0BBGAxvqMqYx8Sg==", "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" + "node_modules/nwsapi": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", + "dev": true }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6634,13 +11294,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6649,456 +11311,709 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { - "whatwg-encoding": "^3.1.1" + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">= 14" + "node": ">= 0.8.0" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/human-signals": { + "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=16.17.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/playwright": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0.tgz", + "integrity": "sha512-4z3ac3plDfYzGB6r0Q3LF8POPR20Z8D0aXcxbJvmfMgSSq1hkcgvFRXJk9rUq5H/MJ0Ktal869hhOdI/zUTeLA==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "playwright-core": "1.45.0" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/playwright-core": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0.tgz", + "integrity": "sha512-lZmHlFQ0VYSpAs43dRq1/nJ9G/6SiTI7VPqidld9TDefL9tX87bTKExWZZUF5PeRyqtXqd8fQi2qmfIedkwsNQ==", "dev": true, + "bin": { + "playwright-core": "cli.js" + }, "engines": { - "node": ">=0.8.19" + "node": ">=18" } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" + "node": "^10 || ^12 || >=14" } }, - "node_modules/intl-messageformat": { - "version": "10.5.8", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.8.tgz", - "integrity": "sha512-NRf0jpBWV0vd671G5b06wNofAN8tp7WWDogMZyaU8GUAsmbouyvgwmFJI7zLjfAMpm3zK+vSwRP3jzaoIcMbaA==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.0", - "@formatjs/fast-memoize": "2.2.0", - "@formatjs/icu-messageformat-parser": "2.7.3", - "tslib": "^2.4.0" - } + "node_modules/preact": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.9.tgz", + "integrity": "sha512-ThuGXBmJS3VsT+jIP+eQufD3L8pRw/PY3FoCys6O9Pu6aF12Pn9zAJDX99TfwRAFOCEKm/P0lwiPTbqKMJp0fA==", + "hasInstallScript": true }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" + "engines": { + "node": "^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "safe-buffer": "^5.1.0" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { - "has-tostringtag": "^1.0.0" + "loose-envify": "^1.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" + } + }, + "node_modules/react-clientside-effect": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", + "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", + "dependencies": { + "@babel/runtime": "^7.12.13" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-focus-lock": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.12.1.tgz", + "integrity": "sha512-lfp8Dve4yJagkHiFrC1bGtib3mF2ktqwPJw4/WGcgPW+pJ/AVQA5X2vI7xgp13FcxFEpYBBHpXai/N2DBNC0Jw==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^1.3.5", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.6", + "use-callback-ref": "^1.3.2", + "use-sidecar": "^1.1.2" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "node_modules/react-icons": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", + "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-intl": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.8.tgz", + "integrity": "sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA==", "dependencies": { - "is-extglob": "^2.1.1" + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "@formatjs/intl": "2.10.4", + "@formatjs/intl-displaynames": "6.6.8", + "@formatjs/intl-listformat": "7.5.7", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "10.5.14", + "tslib": "^2.4.0" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": "^16.6.0 || 17 || 18", + "typescript": "^4.7 || 5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">=0.10.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, + "node_modules/react-remove-scroll": { + "version": "2.5.10", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz", + "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==", "dependencies": { - "has-tostringtag": "^1.0.0" + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "node_modules/react-router": { + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", + "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", "dependencies": { - "@types/estree": "*" + "@remix-run/router": "1.17.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, + "node_modules/react-router-dom": { + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", + "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@remix-run/router": "1.17.0", + "react-router": "6.24.0" }, "engines": { - "node": ">= 0.4" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", "dependencies": { - "call-bind": "^1.0.2" + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "picomatch": "^2.2.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.10.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/redent/node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "min-indent": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -7107,618 +12022,672 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "regenerate": "^1.4.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, - "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "engines": { - "node": ">=14" + "dependencies": { + "@babel/runtime": "^7.8.4" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/js-yaml/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/jsdom": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz", - "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==", + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "dependencies": { - "@asamuzakjp/dom-selector": "^2.0.1", - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "is-potential-custom-element-name": "^1.0.1", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.16.0", - "xml-name-validator": "^5.0.0" + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, - "peer": true, "bin": { "jsesc": "bin/jsesc" - }, + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "peer": true, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, "bin": { - "json5": "lib/cli.js" + "resolve": "bin/resolve" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" } }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { - "node": ">=6" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true - }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 0.8.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" } }, - "node_modules/lil-gui": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.17.0.tgz", - "integrity": "sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ==", + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", "dev": true }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "engines": { - "node": ">=10" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">=14" + "node": ">=0.4" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "get-func-name": "^2.0.1" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "dependencies": { - "yallist": "^3.0.2" + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" } }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { - "es5-ext": "~0.10.2" + "loose-envify": "^1.1.0" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { - "lz-string": "bin/bin.js" + "semver": "bin/semver.js" } }, - "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "randombytes": "^2.1.0" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, - "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">= 8" + "node": ">= 0.4" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=8" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, "dependencies": { - "mime-db": "1.52.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/smoothie": { + "version": "1.36.1", + "resolved": "https://registry.npmjs.org/smoothie/-/smoothie-1.36.1.tgz", + "integrity": "sha512-499Vr2od6TicP8s7ykcyTfddh/6n11BB41G9RE7gqQRyfoPIAYotUTzwAxQpAfOdVOb+BvcG2qla+hjyqwe+PA==" }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", - "dev": true, - "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.3.0" + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mri": { + "node_modules/source-map-js": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=0.10.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "node_modules/node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, "dependencies": { - "whatwg-url": "^5.0.0" + "escape-string-regexp": "^2.0.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=10" } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/std-env": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.6.0.tgz", + "integrity": "sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "dependencies": { - "path-key": "^4.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7727,81 +12696,152 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { - "wrappy": "1" + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/strip-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "js-tokens": "^9.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", + "dev": true + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" }, "engines": { "node": ">=10" @@ -7810,1635 +12850,1658 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/tempy/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/terser": { + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tinybench": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.0" } }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", "dependencies": { - "entities": "^4.4.0" + "commander": "2" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/topojson-client/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", - "dev": true - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { - "node": "*" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" + "node": ">=4" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">= 10" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, "engines": { - "node": ">=12.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "peerDependencies": { - "postcss": "^8.3.3" + "engines": { + "node": ">=14.17" } }, - "node_modules/postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, + "node_modules/ua-parser-js": { + "version": "0.7.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", + "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", "funding": [ { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/ua-parser-js" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" + "type": "paypal", + "url": "https://paypal.me/faisalman" }, { "type": "github", - "url": "https://github.com/sponsors/ai" + "url": "https://github.com/sponsors/faisalman" } ], "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.29" + "node": "*" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/prettier": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", - "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">=4" } }, - "node_modules/prettier-plugin-svelte": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.1.2.tgz", - "integrity": "sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, - "peerDependencies": { - "prettier": "^3.0.0", - "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" + "engines": { + "node": ">=4" } }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 4.0.0" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, "engines": { - "node": ">=6" + "node": ">=4", + "yarn": "*" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/ai" } - ] - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, + ], "dependencies": { - "min-indent": "^1.0.1" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=12" + "bin": { + "update-browserslist-db": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" + "punycode": "^2.1.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.8.4" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dev": true, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "tslib": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/vega": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/vega/-/vega-5.20.0.tgz", + "integrity": "sha512-L2hDaTH2gz9DFbu7l1B8fR637HzctViuosFCo/Db5aBe93fCJ/w/oJu+vQNfQELzfm9sntkS/+A4u+39xrDCNA==", + "dependencies": { + "vega-crossfilter": "~4.0.5", + "vega-dataflow": "~5.7.3", + "vega-encode": "~4.8.3", + "vega-event-selector": "~2.0.6", + "vega-expression": "~4.0.1", + "vega-force": "~4.0.7", + "vega-format": "~1.0.4", + "vega-functions": "~5.12.0", + "vega-geo": "~4.3.8", + "vega-hierarchy": "~4.0.9", + "vega-label": "~1.0.0", + "vega-loader": "~4.4.0", + "vega-parser": "~6.1.3", + "vega-projection": "~1.4.5", + "vega-regression": "~1.0.9", + "vega-runtime": "~6.1.3", + "vega-scale": "~7.1.1", + "vega-scenegraph": "~4.9.4", + "vega-statistics": "~1.7.9", + "vega-time": "~2.0.4", + "vega-transforms": "~4.9.3", + "vega-typings": "~0.20.0", + "vega-util": "~1.16.1", + "vega-view": "~5.10.0", + "vega-view-transforms": "~4.5.8", + "vega-voronoi": "~4.1.5", + "vega-wordcloud": "~4.1.3" + } + }, + "node_modules/vega-canvas": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/vega-canvas/-/vega-canvas-1.2.7.tgz", + "integrity": "sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q==" + }, + "node_modules/vega-crossfilter": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.0.5.tgz", + "integrity": "sha512-yF+iyGP+ZxU7Tcj5yBsMfoUHTCebTALTXIkBNA99RKdaIHp1E690UaGVLZe6xde2n5WaYpho6I/I6wdAW3NXcg==", "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" + "d3-array": "^2.7.1", + "vega-dataflow": "^5.7.3", + "vega-util": "^1.15.2" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "node_modules/vega-crossfilter/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/vega-crossfilter/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/vega-dataflow": { + "version": "5.7.6", + "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.7.6.tgz", + "integrity": "sha512-9Md8+5iUC1MVKPKDyZ7pCEHk6I9am+DgaMzZqo/27O/KI4f23/WQXPyuI8jbNmc/mkm340P0TKREmzL5M7+2Dg==", + "dependencies": { + "vega-format": "^1.1.2", + "vega-loader": "^4.5.2", + "vega-util": "^1.17.2" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, + "node_modules/vega-dataflow/node_modules/vega-format": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.2.tgz", + "integrity": "sha512-0kUfAj0dg0U6GcEY0Kp6LiSTCZ8l8jl1qVdQyToMyKmtZg/q56qsiJQZy3WWRr1MtWkTIZL71xSJXgjwjeUaAw==", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "d3-array": "^3.2.2", + "d3-format": "^3.1.0", + "d3-time-format": "^4.1.0", + "vega-time": "^2.1.2", + "vega-util": "^1.17.2" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/vega-dataflow/node_modules/vega-loader": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.2.tgz", + "integrity": "sha512-ktIdGz3DRIS3XfTP9lJ6oMT5cKwC86nQkjUbXZbOtwXQFVNE2xVWBuH13GP6FKUZxg5hJCMtb5v/e/fwTvhKsQ==", + "dependencies": { + "d3-dsv": "^3.0.1", + "node-fetch": "^2.6.7", + "topojson-client": "^3.1.0", + "vega-format": "^1.1.2", + "vega-util": "^1.17.2" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node_modules/vega-dataflow/node_modules/vega-time": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.2.tgz", + "integrity": "sha512-6rXc6JdDt8MnCRy6UzUCsa6EeFycPDmvioMddLfKw38OYCV8pRQC5nw44gyddOwXgUTJLiCtn/sp53P0iA542A==", + "dependencies": { + "d3-array": "^3.2.2", + "d3-time": "^3.1.0", + "vega-util": "^1.17.2" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "node_modules/vega-dataflow/node_modules/vega-util": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", + "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" + }, + "node_modules/vega-embed": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/vega-embed/-/vega-embed-6.17.0.tgz", + "integrity": "sha512-9eiVZCrLDb/EiVCMbMYouWB/q9dOeVkL5Bh0vU6wsUpIV/bbEvS47uljuo3YSxFqkfNpJ+Qt8xvLRiYSnN4lqw==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "fast-json-patch": "^3.0.0-1", + "json-stringify-pretty-compact": "^3.0.0", + "semver": "^7.3.5", + "vega-schema-url-parser": "^2.1.0", + "vega-themes": "^2.10.0", + "vega-tooltip": "^0.25.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "vega": "^5.13.0", + "vega-lite": "*" } }, - "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "node_modules/rollup": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.0.tgz", - "integrity": "sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==", - "dev": true, + "node_modules/vega-embed/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { - "rollup": "dist/bin/rollup" + "semver": "bin/semver.js" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.0", - "@rollup/rollup-android-arm64": "4.9.0", - "@rollup/rollup-darwin-arm64": "4.9.0", - "@rollup/rollup-darwin-x64": "4.9.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.0", - "@rollup/rollup-linux-arm64-gnu": "4.9.0", - "@rollup/rollup-linux-arm64-musl": "4.9.0", - "@rollup/rollup-linux-riscv64-gnu": "4.9.0", - "@rollup/rollup-linux-x64-gnu": "4.9.0", - "@rollup/rollup-linux-x64-musl": "4.9.0", - "@rollup/rollup-win32-arm64-msvc": "4.9.0", - "@rollup/rollup-win32-ia32-msvc": "4.9.0", - "@rollup/rollup-win32-x64-msvc": "4.9.0", - "fsevents": "~2.3.2" + "node": ">=10" } }, - "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true + "node_modules/vega-encode": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-4.8.3.tgz", + "integrity": "sha512-JoRYtaV2Hs8spWLzTu/IjR7J9jqRmuIOEicAaWj6T9NSZrNWQzu2zF3IVsX85WnrIDIRUDaehXaFZvy9uv9RQg==", + "dependencies": { + "d3-array": "^2.7.1", + "d3-interpolate": "^2.0.1", + "vega-dataflow": "^5.7.3", + "vega-scale": "^7.0.3", + "vega-util": "^1.15.2" + } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/vega-encode/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", "dependencies": { - "queue-microtask": "^1.2.2" + "internmap": "^1.0.0" } }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + "node_modules/vega-encode/node_modules/d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "node_modules/vega-encode/node_modules/d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" + "d3-color": "1 - 2" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/vega-encode/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/vega-event-selector": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-2.0.6.tgz", + "integrity": "sha512-UwCu50Sqd8kNZ1X/XgiAY+QAyQUmGFAwyDu7y0T5fs6/TPQnDo/Bo346NgSgINBEhEKOAMY1Nd/rPOk4UEm/ew==" }, - "node_modules/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, + "node_modules/vega-expression": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-4.0.1.tgz", + "integrity": "sha512-ZrDj0hP8NmrCpdLFf7Rd/xMUHGoSYsAOTaYp7uXZ2dkEH5x0uPy5laECMc8TiQvL8W+8IrN2HAWCMRthTSRe2Q==", "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" + "vega-util": "^1.16.0" } }, - "node_modules/sander/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, + "node_modules/vega-force": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-4.0.7.tgz", + "integrity": "sha512-pyLKdwXSZ9C1dVIqdJOobvBY29rLvZjvRRTla9BU/nMwAiAGlGi6WKUFdRGdneyGe3zo2nSZDTZlZM/Z5VaQNA==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "d3-force": "^2.1.1", + "vega-dataflow": "^5.7.3", + "vega-util": "^1.15.2" } }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, + "node_modules/vega-force/node_modules/d3-dispatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-2.0.0.tgz", + "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" + }, + "node_modules/vega-force/node_modules/d3-force": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-2.1.1.tgz", + "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" + "d3-dispatch": "1 - 2", + "d3-quadtree": "1 - 2", + "d3-timer": "1 - 2" } }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + "node_modules/vega-force/node_modules/d3-quadtree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-2.0.0.tgz", + "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/vega-force/node_modules/d3-timer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-2.0.0.tgz", + "integrity": "sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA==" }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dev": true, + "node_modules/vega-format": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.0.4.tgz", + "integrity": "sha512-oTAeub3KWm6nKhXoYCx1q9G3K43R6/pDMXvqDlTSUtjoY7b/Gixm8iLcir5S9bPjvH40n4AcbZsPmNfL/Up77A==", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "d3-array": "^2.7.1", + "d3-format": "^2.0.0", + "d3-time-format": "^3.0.0", + "vega-time": "^2.0.3", + "vega-util": "^1.15.2" } }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, + "node_modules/vega-format/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "internmap": "^1.0.0" } }, - "node_modules/shebang-command": { + "node_modules/vega-format/node_modules/d3-format": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" + }, + "node_modules/vega-format/node_modules/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "d3-array": "2" } }, - "node_modules/shebang-regex": { + "node_modules/vega-format/node_modules/d3-time-format": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "dependencies": { + "d3-time": "1 - 2" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, + "node_modules/vega-format/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/vega-functions": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.12.1.tgz", + "integrity": "sha512-7cHfcjXOj27qEbh2FTzWDl7FJK4xGcMFF7+oiyqa0fp7BU/wNT5YdNV0t5kCX9WjV7mfJWACKV74usLJbyM6GA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "d3-array": "^2.7.1", + "d3-color": "^2.0.0", + "d3-geo": "^2.0.1", + "vega-dataflow": "^5.7.3", + "vega-expression": "^5.0.0", + "vega-scale": "^7.1.1", + "vega-scenegraph": "^4.9.3", + "vega-selections": "^5.3.1", + "vega-statistics": "^1.7.9", + "vega-time": "^2.0.4", + "vega-util": "^1.16.0" } }, - "node_modules/siginfo": { + "node_modules/vega-functions/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/vega-functions/node_modules/d3-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node_modules/vega-functions/node_modules/d3-geo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-2.0.2.tgz", + "integrity": "sha512-8pM1WGMLGFuhq9S+FpPURxic+gKzjluCD/CHTuUF3mXMeiCo0i6R0tO1s4+GArRFde96SLcW/kOFRjoAosPsFA==", + "dependencies": { + "d3-array": "^2.5.0" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/vega-functions/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/vega-functions/node_modules/vega-expression": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.1.tgz", + "integrity": "sha512-zv9L1Hm0KHE9M7mldHyz8sXbGu3KmC0Cdk7qfHkcTNS75Jpsem6jkbu6ZAwx5cNUeW91AxUQOu77r4mygq2wUQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "vega-util": "^1.17.2" } }, - "node_modules/smoothie": { - "version": "1.36.1", - "resolved": "https://registry.npmjs.org/smoothie/-/smoothie-1.36.1.tgz", - "integrity": "sha512-499Vr2od6TicP8s7ykcyTfddh/6n11BB41G9RE7gqQRyfoPIAYotUTzwAxQpAfOdVOb+BvcG2qla+hjyqwe+PA==" + "node_modules/vega-functions/node_modules/vega-util": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", + "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" }, - "node_modules/sorcery": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", - "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", - "dev": true, + "node_modules/vega-geo": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-4.3.8.tgz", + "integrity": "sha512-fsGxV96Q/QRgPqOPtMBZdI+DneIiROKTG3YDZvGn0EdV16OG5LzFhbNgLT5GPzI+kTwgLpAsucBHklexlB4kfg==", + "dependencies": { + "d3-array": "^2.7.1", + "d3-color": "^2.0.0", + "d3-geo": "^2.0.1", + "vega-canvas": "^1.2.5", + "vega-dataflow": "^5.7.3", + "vega-projection": "^1.4.5", + "vega-statistics": "^1.7.9", + "vega-util": "^1.15.2" + } + }, + "node_modules/vega-geo/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/vega-geo/node_modules/d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + }, + "node_modules/vega-geo/node_modules/d3-geo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-2.0.2.tgz", + "integrity": "sha512-8pM1WGMLGFuhq9S+FpPURxic+gKzjluCD/CHTuUF3mXMeiCo0i6R0tO1s4+GArRFde96SLcW/kOFRjoAosPsFA==", + "dependencies": { + "d3-array": "^2.5.0" + } + }, + "node_modules/vega-geo/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/vega-hierarchy": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.0.9.tgz", + "integrity": "sha512-4XaWK6V38/QOZ+vllKKTafiwL25m8Kd+ebHmDV+Q236ONHmqc/gv82wwn9nBeXPEfPv4FyJw2SRoqa2Jol6fug==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.14", - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0" + "d3-hierarchy": "^2.0.0", + "vega-dataflow": "^5.7.3", + "vega-util": "^1.15.2" + } + }, + "node_modules/vega-hierarchy/node_modules/d3-hierarchy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-2.0.0.tgz", + "integrity": "sha512-SwIdqM3HxQX2214EG9GTjgmCc/mbSx4mQBn+DuEETubhOw6/U3fmnji4uCVrmzOydMHSO1nZle5gh6HB/wdOzw==" + }, + "node_modules/vega-label": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vega-label/-/vega-label-1.0.0.tgz", + "integrity": "sha512-hCdm2pcHgkKgxnzW9GvX5JmYNiUMlOXOibtMmBzvFBQHX3NiV9giQ5nsPiQiFbV08VxEPtM+VYXr2HyrIcq5zQ==", + "dependencies": { + "vega-canvas": "^1.2.5", + "vega-dataflow": "^5.7.3", + "vega-scenegraph": "^4.9.2", + "vega-util": "^1.15.2" + } + }, + "node_modules/vega-lite": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-4.13.1.tgz", + "integrity": "sha512-OHZSSqVLuikoZ3idz3jIRk0UCKtVU2Lq5gaD6cLNTnJjNetoHKKdfZ023LVj4+Y9yWPz5meb+EJUsfBAGfF4Vw==", + "dependencies": { + "@types/clone": "~0.1.30", + "@types/fast-json-stable-stringify": "^2.0.0", + "array-flat-polyfill": "^1.0.1", + "clone": "~2.1.2", + "fast-deep-equal": "~3.1.1", + "fast-json-stable-stringify": "~2.1.0", + "json-stringify-pretty-compact": "~2.0.0", + "tslib": "~2.0.0", + "vega-event-selector": "~2.0.3", + "vega-expression": "~2.6.5", + "vega-util": "~1.14.0", + "yargs": "~15.3.1" }, "bin": { - "sorcery": "bin/sorcery" + "vl2pdf": "bin/vl2pdf", + "vl2png": "bin/vl2png", + "vl2svg": "bin/vl2svg", + "vl2vg": "bin/vl2vg" + }, + "peerDependencies": { + "vega": "^5.12.1" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/vega-lite/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true + "node_modules/vega-lite/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } }, - "node_modules/std-env": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.6.0.tgz", - "integrity": "sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==", - "dev": true + "node_modules/vega-lite/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, + "node_modules/vega-lite/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "internal-slot": "^1.0.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" + "node": ">=7.0.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } + "node_modules/vega-lite/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/vega-lite/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/vega-lite/node_modules/json-stringify-pretty-compact": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==" + }, + "node_modules/vega-lite/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "ansi-regex": "^5.0.1" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, + "node_modules/vega-lite/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, + "node_modules/vega-lite/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "min-indent": "^1.0.0" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/vega-lite/node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" }, - "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "dev": true, + "node_modules/vega-lite/node_modules/vega-expression": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-2.6.6.tgz", + "integrity": "sha512-zxPzXO33FawU3WQHRmHJaRreyJlyMaNMn1uuCFSouJttPkBBWB5gCrha2f5+pF3t4NMFWTnSrgCkR6mcaubnng==", "dependencies": { - "acorn": "^8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "vega-util": "^1.15.0" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "node_modules/vega-lite/node_modules/vega-expression/node_modules/vega-util": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", + "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" + }, + "node_modules/vega-lite/node_modules/vega-util": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.14.1.tgz", + "integrity": "sha512-pSKJ8OCkgfgHZDTljyj+gmGltgulceWbk1BV6LWrXqp6P3J8qPA/oZA8+a93YNApYxXZ3yzIVUDOo5O27xk0jw==" + }, + "node_modules/vega-lite/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { - "has-flag": "^3.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node_modules/vega-lite/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/vega-lite/node_modules/yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/svelte": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.8.tgz", - "integrity": "sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==", + "node_modules/vega-lite/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", - "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "engines": { - "node": ">=16" + "node": ">=6" } }, - "node_modules/svelte-check": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.2.tgz", - "integrity": "sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g==", - "dev": true, + "node_modules/vega-loader": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.4.1.tgz", + "integrity": "sha512-dj65i4qlNhK0mOmjuchHgUrF5YUaWrYpx0A8kXA68lBk5Hkx8FNRztkcl07CZJ1+8V81ymEyJii9jzGbhEX0ag==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", - "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^5.1.0", - "typescript": "^5.0.3" - }, - "bin": { - "svelte-check": "bin/svelte-check" - }, - "peerDependencies": { - "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0" + "d3-dsv": "^2.0.0", + "node-fetch": "^2.6.1", + "topojson-client": "^3.1.0", + "vega-format": "^1.0.4", + "vega-util": "^1.16.0" } }, - "node_modules/svelte-eslint-parser": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz", - "integrity": "sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==", - "dev": true, + "node_modules/vega-loader/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/vega-loader/node_modules/d3-dsv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-2.0.0.tgz", + "integrity": "sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==", "dependencies": { - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "postcss": "^8.4.29", - "postcss-scss": "^4.0.8" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0" + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" } }, - "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, + "node_modules/vega-loader/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" } }, - "node_modules/svelte-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/vega-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.1.4.tgz", + "integrity": "sha512-tORdpWXiH/kkXcpNdbSVEvtaxBuuDtgYp9rBunVW9oLsjFvFXbSWlM1wvJ9ZFSaTfx6CqyTyGMiJemmr1QnTjQ==", + "dependencies": { + "vega-dataflow": "^5.7.3", + "vega-event-selector": "^3.0.0", + "vega-functions": "^5.12.1", + "vega-scale": "^7.1.1", + "vega-util": "^1.16.0" } }, - "node_modules/svelte-hmr": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", - "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", - "dev": true, - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": "^3.19.0 || ^4.0.0" - } + "node_modules/vega-parser/node_modules/vega-event-selector": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-3.0.1.tgz", + "integrity": "sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A==" }, - "node_modules/svelte-i18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-4.0.0.tgz", - "integrity": "sha512-4vivjKZADUMRIhTs38JuBNy3unbnh9AFRxWFLxq62P4NHic+/BaIZZlAsvqsCdnp7IdJf5EoSiH6TNdItcjA6g==", + "node_modules/vega-projection": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-1.4.5.tgz", + "integrity": "sha512-85kWcPv0zrrNfxescqHtSYpRknilrS0K3CVRZc7IYQxnLtL1oma9WEbrSr1LCmDoCP5hl2Z1kKbomPXkrQX5Ag==", "dependencies": { - "cli-color": "^2.0.3", - "deepmerge": "^4.2.2", - "esbuild": "^0.19.2", - "estree-walker": "^2", - "intl-messageformat": "^10.5.3", - "sade": "^1.8.1", - "tiny-glob": "^0.2.9" - }, - "bin": { - "svelte-i18n": "dist/cli.js" - }, - "engines": { - "node": ">= 16" - }, - "peerDependencies": { - "svelte": "^3 || ^4" + "d3-geo": "^2.0.1", + "d3-geo-projection": "^3.0.0" } }, - "node_modules/svelte-i18n/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/svelte-preprocess": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.2.tgz", - "integrity": "sha512-XF0aliMAcYnP4hLETvB6HRAMnaL09ASYT1Z2I1Gwu0nz6xbdg/dSgAEthtFZJA4AKrNhFDFdmUDO+H9d/6xg5g==", - "dev": true, - "hasInstallScript": true, + "node_modules/vega-projection/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", "dependencies": { - "@types/pug": "^2.0.6", - "detect-indent": "^6.1.0", - "magic-string": "^0.27.0", - "sorcery": "^0.11.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 14.10.0" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", - "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } + "internmap": "^1.0.0" } }, - "node_modules/svelte-preprocess/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, + "node_modules/vega-projection/node_modules/d3-geo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-2.0.2.tgz", + "integrity": "sha512-8pM1WGMLGFuhq9S+FpPURxic+gKzjluCD/CHTuUF3mXMeiCo0i6R0tO1s4+GArRFde96SLcW/kOFRjoAosPsFA==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" + "d3-array": "^2.5.0" } }, - "node_modules/svelte-skeleton": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/svelte-skeleton/-/svelte-skeleton-1.3.1.tgz", - "integrity": "sha512-/dVf4Am8Rolo9DjQxmy8X8xXSKDzZWyGjf84CekWdQqvP+Y57lW1O8dxHUxqT1bGeER8ZMAOuyGEzx+gADEVWg==" + "node_modules/vega-projection/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" }, - "node_modules/svelte-transition": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/svelte-transition/-/svelte-transition-0.0.10.tgz", - "integrity": "sha512-BN8XDA7dKyuh+Lmdn3vxCzJd3M7L4BLdRziIAJew2AiBFMcrJJg8srEMYYoTCOLtYJ2Oqlv3+3/K5b6uHM8LSg==", - "peerDependencies": { - "svelte": "^3.59.1 || ^4.0.0" + "node_modules/vega-regression": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-1.0.9.tgz", + "integrity": "sha512-KSr3QbCF0vJEAWFVY2MA9X786oiJncTTr3gqRMPoaLr/Yo3f7OPKXRoUcw36RiWa0WCOEMgTYtM28iK6ZuSgaA==", + "dependencies": { + "d3-array": "^2.7.1", + "vega-dataflow": "^5.7.3", + "vega-statistics": "^1.7.9", + "vega-util": "^1.15.2" } }, - "node_modules/svelte-windicss-preprocess": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/svelte-windicss-preprocess/-/svelte-windicss-preprocess-4.2.8.tgz", - "integrity": "sha512-Z6pmFbHqJ19SgCiXiVRC/hlRBgZ/5LksMjPF3ilF/1HESP2L+secuaPjr3xOjJW67iZQpT2YdXzGe+MvdsJ6OQ==", - "dev": true, + "node_modules/vega-regression/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", "dependencies": { - "@iconify/json": "1.1.432", - "fast-glob": "3.2.7", - "unconfig": "0.2.2", - "windicss": "3.5.4", - "windicss-runtime-dom": "3.0.0" + "internmap": "^1.0.0" } }, - "node_modules/svelte-windicss-preprocess/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, + "node_modules/vega-regression/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/vega-runtime": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-6.1.4.tgz", + "integrity": "sha512-0dDYXyFLQcxPQ2OQU0WuBVYLRZnm+/CwVu6i6N4idS7R9VXIX5581EkCh3pZ20pQ/+oaA7oJ0pR9rJgJ6rukRQ==", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" + "vega-dataflow": "^5.7.5", + "vega-util": "^1.17.1" } }, - "node_modules/svelte-windicss-preprocess/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "node_modules/vega-runtime/node_modules/vega-util": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", + "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" + }, + "node_modules/vega-scale": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.1.1.tgz", + "integrity": "sha512-yE0to0prA9E5PBJ/XP77TO0BMkzyUVyt7TH5PAwj+CZT7PMsMO6ozihelRhoIiVcP0Ae/ByCEQBUQkzN5zJ0ZA==", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "d3-array": "^2.7.1", + "d3-interpolate": "^2.0.1", + "d3-scale": "^3.2.2", + "vega-time": "^2.0.4", + "vega-util": "^1.15.2" } }, - "node_modules/svelte/node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "node_modules/vega-scale/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", "dependencies": { - "dequal": "^2.0.3" + "internmap": "^1.0.0" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "node_modules/vega-scale/node_modules/d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "dev": true + "node_modules/vega-scale/node_modules/d3-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "node_modules/vega-scale/node_modules/d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", + "dependencies": { + "d3-color": "1 - 2" + } + }, + "node_modules/vega-scale/node_modules/d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "dependencies": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + } }, - "node_modules/three": { - "version": "0.152.2", - "resolved": "https://registry.npmjs.org/three/-/three-0.152.2.tgz", - "integrity": "sha512-Ff9zIpSfkkqcBcpdiFo2f35vA9ZucO+N8TNacJOqaEE6DrB0eufItVMib8bK8Pcju/ZNT6a7blE1GhTpkdsILw==" + "node_modules/vega-scale/node_modules/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "dependencies": { + "d3-array": "2" + } }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "node_modules/vega-scale/node_modules/d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "d3-time": "1 - 2" } }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "node_modules/vega-scale/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/vega-scenegraph": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.9.4.tgz", + "integrity": "sha512-QaegQzbFE2yhYLNWAmHwAuguW3yTtQrmwvfxYT8tk0g+KKodrQ5WSmNrphWXhqwtsgVSvtdZkfp2IPeumcOQJg==", "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" + "d3-path": "^2.0.0", + "d3-shape": "^2.0.0", + "vega-canvas": "^1.2.5", + "vega-loader": "^4.3.3", + "vega-scale": "^7.1.1", + "vega-util": "^1.15.2" } }, - "node_modules/tinybench": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", - "dev": true + "node_modules/vega-scenegraph/node_modules/d3-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-2.0.0.tgz", + "integrity": "sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA==" }, - "node_modules/tinypool": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", - "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", - "dev": true, - "engines": { - "node": ">=14.0.0" + "node_modules/vega-scenegraph/node_modules/d3-shape": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-2.1.0.tgz", + "integrity": "sha512-PnjUqfM2PpskbSLTJvAzp2Wv4CZsnAgTfcVRTwW03QR3MkXF8Uo7B1y/lWkAsmbKwuecto++4NlsYcvYpXpTHA==", + "dependencies": { + "d3-path": "1 - 2" } }, - "node_modules/tinyspy": { + "node_modules/vega-schema-url-parser": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", - "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } + "resolved": "https://registry.npmjs.org/vega-schema-url-parser/-/vega-schema-url-parser-2.2.0.tgz", + "integrity": "sha512-yAtdBnfYOhECv9YC70H2gEiqfIbVkq09aaE4y/9V/ovEFmH9gPKaEgzIZqgT7PSPQjKhsNkb6jk6XvSoboxOBw==" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/vega-selections": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.4.2.tgz", + "integrity": "sha512-99FUhYmg0jOJr2/K4TcEURmJRkuibrCDc8KBUX7qcQEITzrZ5R6a4QE+sarCvbb3hi8aA9GV2oyST6MQeA9mgQ==", + "dependencies": { + "d3-array": "3.2.4", + "vega-expression": "^5.0.1", + "vega-util": "^1.17.1" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "node_modules/vega-selections/node_modules/vega-expression": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.1.tgz", + "integrity": "sha512-zv9L1Hm0KHE9M7mldHyz8sXbGu3KmC0Cdk7qfHkcTNS75Jpsem6jkbu6ZAwx5cNUeW91AxUQOu77r4mygq2wUQ==", "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "@types/estree": "^1.0.0", + "vega-util": "^1.17.2" } }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, + "node_modules/vega-selections/node_modules/vega-util": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", + "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" + }, + "node_modules/vega-statistics": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.7.10.tgz", + "integrity": "sha512-QLb12gcfpDZ9K5h3TLGrlz4UXDH9wSPyg9LLfOJZacxvvJEPohacUQNrGEAVtFO9ccUCerRfH9cs25ZtHsOZrw==", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" + "d3-array": "^2.7.1" } }, - "node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "dev": true, + "node_modules/vega-statistics/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" + "internmap": "^1.0.0" } }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "node_modules/vega-statistics/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, + "node_modules/vega-themes": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/vega-themes/-/vega-themes-2.15.0.tgz", + "integrity": "sha512-DicRAKG9z+23A+rH/3w3QjJvKnlGhSbbUXGjBvYGseZ1lvj9KQ0BXZ2NS/+MKns59LNpFNHGi9us/wMlci4TOA==", "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "vega": "*", + "vega-lite": "*" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/vega-time": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.0.4.tgz", + "integrity": "sha512-U314UDR9+ZlWrD3KBaeH+j/c2WSMdvcZq5yJfFT0yTg1jsBKAQBYFGvl+orackD8Zx3FveHOxx3XAObaQeDX+Q==", + "dependencies": { + "d3-array": "^2.7.1", + "d3-time": "^2.0.0", + "vega-util": "^1.15.2" + } }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "node_modules/vega-time/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "node_modules/vega-time/node_modules/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "d3-array": "2" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/vega-time/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/vega-tooltip": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/vega-tooltip/-/vega-tooltip-0.25.1.tgz", + "integrity": "sha512-ugGwGi2/p3OpB8N15xieuzP8DyV5DreqMWcmJ9zpWT8GlkyKtef4dGRXnvHeHQ+iJFmWrq4oZJ+kLTrdiECjAg==", + "dependencies": { + "vega-util": "^1.16.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/vega-transforms": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.9.4.tgz", + "integrity": "sha512-JGBhm5Bf6fiGTUSB5Qr5ckw/KU9FJcSV5xIe/y4IobM/i/KNwI1i1fP45LzP4F4yZc0DMTwJod2UvFHGk9plKA==", + "dependencies": { + "d3-array": "^2.7.1", + "vega-dataflow": "^5.7.4", + "vega-statistics": "^1.7.9", + "vega-time": "^2.0.4", + "vega-util": "^1.16.1" } }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" + "node_modules/vega-transforms/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" } }, - "node_modules/ufo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", - "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", - "dev": true + "node_modules/vega-transforms/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" }, - "node_modules/unconfig": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.2.2.tgz", - "integrity": "sha512-JN1MeYJ/POnjBj7NgOJJxPp6+NcD6Nd0hEuK0D89kjm9GvQQUq8HeE2Eb7PZgtu+64mWkDiqeJn1IZoLH7htPg==", - "dev": true, + "node_modules/vega-typings": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-0.20.0.tgz", + "integrity": "sha512-S+HIRN/3WYiS5zrQjJ4FDEOlvFVHLxPXMJerrnN3YZ6bxCDYo7tEvQUUuByGZ3d19GuKjgejczWS7XHvF3WjDw==", "dependencies": { - "@antfu/utils": "^0.3.0", - "defu": "^5.0.0", - "jiti": "^1.12.9" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "vega-util": "^1.15.2" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "node_modules/vega-util": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.16.1.tgz", + "integrity": "sha512-FdgD72fmZMPJE99FxvFXth0IL4BbLA93WmBg/lvcJmfkK4Uf90WIlvGwaIUdSePIsdpkZjBPyQcHMQ8OcS8Smg==" }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/vega-view": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-5.10.1.tgz", + "integrity": "sha512-4xvQ5KZcgKdZx1Z7jjenCUumvlyr/j4XcHLRf9gyeFrFvvS596dVpL92V8twhV6O++DmS2+fj+rHagO8Di4nMg==", + "dependencies": { + "d3-array": "^2.7.1", + "d3-timer": "^2.0.0", + "vega-dataflow": "^5.7.3", + "vega-format": "^1.0.4", + "vega-functions": "^5.10.0", + "vega-runtime": "^6.1.3", + "vega-scenegraph": "^4.9.4", + "vega-util": "^1.16.1" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, + "node_modules/vega-view-transforms": { + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.5.9.tgz", + "integrity": "sha512-NxEq4ZD4QwWGRrl2yDLnBRXM9FgCI+vvYb3ZC2+nVDtkUxOlEIKZsMMw31op5GZpfClWLbjCT3mVvzO2xaTF+g==", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" + "vega-dataflow": "^5.7.5", + "vega-scenegraph": "^4.10.2", + "vega-util": "^1.17.1" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/vega-view-transforms/node_modules/vega-format": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.2.tgz", + "integrity": "sha512-0kUfAj0dg0U6GcEY0Kp6LiSTCZ8l8jl1qVdQyToMyKmtZg/q56qsiJQZy3WWRr1MtWkTIZL71xSJXgjwjeUaAw==", + "dependencies": { + "d3-array": "^3.2.2", + "d3-format": "^3.1.0", + "d3-time-format": "^4.1.0", + "vega-time": "^2.1.2", + "vega-util": "^1.17.2" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/vega-view-transforms/node_modules/vega-loader": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.2.tgz", + "integrity": "sha512-ktIdGz3DRIS3XfTP9lJ6oMT5cKwC86nQkjUbXZbOtwXQFVNE2xVWBuH13GP6FKUZxg5hJCMtb5v/e/fwTvhKsQ==", + "dependencies": { + "d3-dsv": "^3.0.1", + "node-fetch": "^2.6.7", + "topojson-client": "^3.1.0", + "vega-format": "^1.1.2", + "vega-util": "^1.17.2" } }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" + "node_modules/vega-view-transforms/node_modules/vega-scale": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.4.1.tgz", + "integrity": "sha512-dArA28DbV/M92O2QvswnzCmQ4bq9WwLKUoyhqFYWCltmDwkmvX7yhqiFLFMWPItIm7mi4Qyoygby6r4DKd1X2A==", + "dependencies": { + "d3-array": "^3.2.2", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-scale-chromatic": "^3.1.0", + "vega-time": "^2.1.2", + "vega-util": "^1.17.2" } }, - "node_modules/unplugin": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.1.tgz", - "integrity": "sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==", - "dev": true, + "node_modules/vega-view-transforms/node_modules/vega-scenegraph": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.13.0.tgz", + "integrity": "sha512-nfl45XtuqB5CxyIZJ+bbJ+dofzosPCRlmF+eUQo+0J23NkNXsTzur+1krJDSdhcw0SOYs4sbYRoMz1cpuOM4+Q==", "dependencies": { - "acorn": "^8.11.2", - "chokidar": "^3.5.3", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.6.0" + "d3-path": "^3.1.0", + "d3-shape": "^3.2.0", + "vega-canvas": "^1.2.7", + "vega-loader": "^4.5.2", + "vega-scale": "^7.4.1", + "vega-util": "^1.17.2" } }, - "node_modules/unplugin-icons": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/unplugin-icons/-/unplugin-icons-0.18.1.tgz", - "integrity": "sha512-WzKu/eoq74YC7vyEAGsFebkRzsZrRkR4FUzLU6gbpfa7WRaVVpQS2n7LSxE1iRUN0scKL5b9bq+i0wucR+ttFQ==", - "dev": true, + "node_modules/vega-view-transforms/node_modules/vega-time": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.2.tgz", + "integrity": "sha512-6rXc6JdDt8MnCRy6UzUCsa6EeFycPDmvioMddLfKw38OYCV8pRQC5nw44gyddOwXgUTJLiCtn/sp53P0iA542A==", "dependencies": { - "@antfu/install-pkg": "^0.3.0", - "@antfu/utils": "^0.7.6", - "@iconify/utils": "^2.1.12", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "local-pkg": "^0.5.0", - "unplugin": "^1.5.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@svgr/core": ">=7.0.0", - "@svgx/core": "^1.0.1", - "@vue/compiler-sfc": "^3.0.2 || ^2.7.0", - "vue-template-compiler": "^2.6.12", - "vue-template-es2015-compiler": "^1.9.0" - }, - "peerDependenciesMeta": { - "@svgr/core": { - "optional": true - }, - "@svgx/core": { - "optional": true - }, - "@vue/compiler-sfc": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - }, - "vue-template-es2015-compiler": { - "optional": true - } + "d3-array": "^3.2.2", + "d3-time": "^3.1.0", + "vega-util": "^1.17.2" } }, - "node_modules/unplugin-icons/node_modules/@antfu/utils": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.7.tgz", - "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" + "node_modules/vega-view-transforms/node_modules/vega-util": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", + "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" + }, + "node_modules/vega-view/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/vega-view/node_modules/d3-timer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-2.0.0.tgz", + "integrity": "sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA==" + }, + "node_modules/vega-view/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/vega-voronoi": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.1.5.tgz", + "integrity": "sha512-950IkgCFLj0zG33EWLAm1hZcp+FMqWcNQliMYt+MJzOD5S4MSpZpZ7K4wp2M1Jktjw/CLKFL9n38JCI0i3UonA==", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "d3-delaunay": "^5.3.0", + "vega-dataflow": "^5.7.3", + "vega-util": "^1.15.2" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, + "node_modules/vega-voronoi/node_modules/d3-delaunay": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.3.0.tgz", + "integrity": "sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==", "dependencies": { - "punycode": "^2.1.0" + "delaunator": "4" + } + }, + "node_modules/vega-voronoi/node_modules/delaunator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz", + "integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==" + }, + "node_modules/vega-wordcloud": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.5.tgz", + "integrity": "sha512-p+qXU3cb9VeWzJ/HEdax0TX2mqDJcSbrCIfo2d/EalOXGkvfSLKobsmMQ8DxPbtVp0uhnpvfCGDyMJw+AzcI2A==", + "dependencies": { + "vega-canvas": "^1.2.7", + "vega-dataflow": "^5.7.6", + "vega-scale": "^7.4.1", + "vega-statistics": "^1.9.0", + "vega-util": "^1.17.2" + } + }, + "node_modules/vega-wordcloud/node_modules/vega-scale": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.4.1.tgz", + "integrity": "sha512-dArA28DbV/M92O2QvswnzCmQ4bq9WwLKUoyhqFYWCltmDwkmvX7yhqiFLFMWPItIm7mi4Qyoygby6r4DKd1X2A==", + "dependencies": { + "d3-array": "^3.2.2", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-scale-chromatic": "^3.1.0", + "vega-time": "^2.1.2", + "vega-util": "^1.17.2" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, + "node_modules/vega-wordcloud/node_modules/vega-statistics": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.9.0.tgz", + "integrity": "sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ==", "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "d3-array": "^3.2.2" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "node_modules/vega-wordcloud/node_modules/vega-time": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.2.tgz", + "integrity": "sha512-6rXc6JdDt8MnCRy6UzUCsa6EeFycPDmvioMddLfKw38OYCV8pRQC5nw44gyddOwXgUTJLiCtn/sp53P0iA542A==", + "dependencies": { + "d3-array": "^3.2.2", + "d3-time": "^3.1.0", + "vega-util": "^1.17.2" + } }, - "node_modules/uuid4": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid4/-/uuid4-2.0.3.tgz", - "integrity": "sha512-CTpAkEVXMNJl2ojgtpLXHgz23dh8z81u6/HEPiQFOvBc/c2pde6TVHmH4uwY0d/GLF3tb7+VDAj4+2eJaQSdZQ==" + "node_modules/vega-wordcloud/node_modules/vega-util": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", + "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" }, "node_modules/vite": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", - "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz", + "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==", "dev": true, "dependencies": { "esbuild": "^0.19.3", - "postcss": "^8.4.32", + "postcss": "^8.4.35", "rollup": "^4.2.0" }, "bin": { @@ -9487,9 +14550,9 @@ } }, "node_modules/vite-node": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.0.4.tgz", - "integrity": "sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", + "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -9508,63 +14571,62 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite-plugin-windicss": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.9.3.tgz", - "integrity": "sha512-PqNiIsrEftCrgn0xIpj8ZMSdpz8NZn+OJ3gKXnOF+hFzbHFrKGJA49ViOUKCHDOquxoGBZMmTjepWr8GrftKcQ==", + "node_modules/vite-plugin-pwa": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.19.8.tgz", + "integrity": "sha512-e1oK0dfhzhDhY3VBuML6c0h8Xfx6EkOVYqolj7g+u8eRfdauZe5RLteCIA/c5gH0CBQ0CNFAuv/AFTx4Z7IXTw==", "dev": true, "dependencies": { - "@windicss/plugin-utils": "1.9.3", "debug": "^4.3.4", - "kolorist": "^1.8.0", - "windicss": "^3.5.6" + "fast-glob": "^3.3.2", + "pretty-bytes": "^6.1.1", + "workbox-build": "^7.0.0", + "workbox-window": "^7.0.0" + }, + "engines": { + "node": ">=16.0.0" }, "funding": { "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "vite": "^2.0.1 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/vite-plugin-windicss/node_modules/windicss": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/windicss/-/windicss-3.5.6.tgz", - "integrity": "sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==", - "dev": true, - "bin": { - "windicss": "cli/index.js" + "@vite-pwa/assets-generator": "^0.2.4", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0", + "workbox-build": "^7.0.0", + "workbox-window": "^7.0.0" }, - "engines": { - "node": ">= 12" + "peerDependenciesMeta": { + "@vite-pwa/assets-generator": { + "optional": true + } } }, - "node_modules/vitefu": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", - "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "node_modules/vite-plugin-svgr": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", + "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", "dev": true, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4 || 5" } }, "node_modules/vitest": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.0.4.tgz", - "integrity": "sha512-s1GQHp/UOeWEo4+aXDOeFBJwFzL6mjycbQwwKWX2QcYfh/7tIerS59hWQ20mxzupTJluA2SdwiBuWwQHH67ckg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", + "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", "dev": true, "dependencies": { - "@vitest/expect": "1.0.4", - "@vitest/runner": "1.0.4", - "@vitest/snapshot": "1.0.4", - "@vitest/spy": "1.0.4", - "@vitest/utils": "1.0.4", - "acorn-walk": "^8.3.0", - "cac": "^6.7.14", + "@vitest/expect": "1.6.0", + "@vitest/runner": "1.6.0", + "@vitest/snapshot": "1.6.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", "execa": "^8.0.1", @@ -9573,11 +14635,11 @@ "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.5.0", - "strip-literal": "^1.3.0", + "strip-literal": "^2.0.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.1", + "tinypool": "^0.8.3", "vite": "^5.0.0", - "vite-node": "1.0.4", + "vite-node": "1.6.0", "why-is-node-running": "^2.2.2" }, "bin": { @@ -9592,8 +14654,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "^1.0.0", - "@vitest/ui": "^1.0.0", + "@vitest/browser": "1.6.0", + "@vitest/ui": "1.6.0", "happy-dom": "*", "jsdom": "*" }, @@ -9635,15 +14697,6 @@ "vitest": ">=0.31.0" } }, - "node_modules/vitest-dom/node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, "node_modules/vitest-dom/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", @@ -9683,21 +14736,6 @@ "node": ">=12" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", - "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", - "dev": true - }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -9710,6 +14748,11 @@ "node": ">=18" } }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, "node_modules/whatwg-mimetype": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", @@ -9763,32 +14806,66 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9813,25 +14890,382 @@ "node": ">=8" } }, - "node_modules/windicss": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/windicss/-/windicss-3.5.4.tgz", - "integrity": "sha512-x2Iu0a69dtNiKHMkR886lx0WKbZI5GqvXyvGBCJ2VA6rcjKYjnzCA/Ljd6hNQBfqlkSum8J+qAVcCfLzQFI4rQ==", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "bin": { - "windicss": "cli/index.js" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.1.0.tgz", + "integrity": "sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.1.0.tgz", + "integrity": "sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-build": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.1.1.tgz", + "integrity": "sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^2.4.1", + "@rollup/plugin-terser": "^0.4.3", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.1.0", + "workbox-broadcast-update": "7.1.0", + "workbox-cacheable-response": "7.1.0", + "workbox-core": "7.1.0", + "workbox-expiration": "7.1.0", + "workbox-google-analytics": "7.1.0", + "workbox-navigation-preload": "7.1.0", + "workbox-precaching": "7.1.0", + "workbox-range-requests": "7.1.0", + "workbox-recipes": "7.1.0", + "workbox-routing": "7.1.0", + "workbox-strategies": "7.1.0", + "workbox-streams": "7.1.0", + "workbox-sw": "7.1.0", + "workbox-window": "7.1.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" }, "engines": { - "node": ">= 12" + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" } }, - "node_modules/windicss-runtime-dom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/windicss-runtime-dom/-/windicss-runtime-dom-3.0.0.tgz", - "integrity": "sha512-a12Uhu71yT1U8w0PzJ3amF9xmC8b1rWFLgXEfI/UyuwUi6D1vUACOO6vb0iY4T4OtP/bJAjQMM7lv3hMWSwLuQ==", + "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, "funding": { - "url": "https://github.com/sponsors/antfu" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-build/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.1.0.tgz", + "integrity": "sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-core": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.1.0.tgz", + "integrity": "sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.1.0.tgz", + "integrity": "sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.1.0.tgz", + "integrity": "sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==", + "dev": true, + "dependencies": { + "workbox-background-sync": "7.1.0", + "workbox-core": "7.1.0", + "workbox-routing": "7.1.0", + "workbox-strategies": "7.1.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.1.0.tgz", + "integrity": "sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-precaching": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.1.0.tgz", + "integrity": "sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0", + "workbox-routing": "7.1.0", + "workbox-strategies": "7.1.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.1.0.tgz", + "integrity": "sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-recipes": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.1.0.tgz", + "integrity": "sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "7.1.0", + "workbox-core": "7.1.0", + "workbox-expiration": "7.1.0", + "workbox-precaching": "7.1.0", + "workbox-routing": "7.1.0", + "workbox-strategies": "7.1.0" + } + }, + "node_modules/workbox-routing": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.1.0.tgz", + "integrity": "sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-strategies": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.1.0.tgz", + "integrity": "sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-streams": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.1.0.tgz", + "integrity": "sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0", + "workbox-routing": "7.1.0" + } + }, + "node_modules/workbox-sw": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.1.0.tgz", + "integrity": "sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.1.0.tgz", + "integrity": "sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.1.0" } }, "node_modules/wrap-ansi": { @@ -9887,9 +15321,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -9940,7 +15374,6 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, "engines": { "node": ">= 6" } @@ -9981,6 +15414,33 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.5.tgz", + "integrity": "sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==", + "dependencies": { + "use-sync-external-store": "1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index dae6107e1..1d2a83ebf 100644 --- a/package.json +++ b/package.json @@ -1,73 +1,85 @@ { - "name": "ml-machine", + "name": "ai-creator", "version": "0.6.0-local", "author": "Center for Computational Thinking and Design at Aarhus University", "private": true, "type": "module", "license": "MIT", "scripts": { - "build": "VITE_VERSION=$npm_package_version vite build", - "dev": "VITE_VERSION=$npm_package_version vite", - "start": "vite dist --host", - "check": "svelte-check --tsconfig ./tsconfig.json", + "build": "tsc && cross-env VITE_VERSION=$npm_package_version vite build", + "ci": "npm run test && npm run lint && npm run build && npx prettier --check src", + "deploy": "website-deploy-aws", + "dev": "cross-env VITE_VERSION=$npm_package_version vite", + "invalidate": "invalidate-cloudfront-distribution", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "postinstall": "npm run theme", + "preview": "vite preview", + "start": "vite dev", "test": "vitest", - "prettier": "prettier --write src/." + "test:e2e": "playwright test --headed", + "test:e2e:headless": "playwright test", + "theme:watch": "chakra-cli tokens src/deployment/default/theme.ts --watch", + "theme": "chakra-cli tokens src/deployment/default/theme.ts", + "i18n:compile": "node bin/tidy-lang.cjs && formatjs compile-folder --ast lang src/messages" }, "devDependencies": { - "@babel/preset-env": "^7.23.5", - "@bulatdashiev/svelte-slider": "^1.0.3", - "@iconify-json/mdi": "^1.1.63", - "@iconify-json/ri": "^1.1.17", - "@melt-ui/pp": "^0.3.0", - "@melt-ui/svelte": "^0.70.0", - "@sveltejs/vite-plugin-svelte": "^3.0.1", - "@testing-library/jest-dom": "^6.2.0", - "@testing-library/svelte": "^4.0.5", - "@tsconfig/svelte": "^4.0.1", - "@types/browser-lang": "^0.1.1", + "@chakra-ui/cli": "^2.4.1", + "@formatjs/cli": "^6.2.7", + "@playwright/test": "^1.42.1", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.0.0", "@types/d3": "^7.4.1", - "@types/js-cookie": "^3.0.3", + "@types/ejs": "^3.1.5", + "@types/lodash.camelcase": "^4.3.9", + "@types/lodash.upperfirst": "^4.3.9", "@types/node": "^18.16.0", - "@types/three": "^0.152.0", - "@types/w3c-web-usb": "^1.0.6", - "@types/web-bluetooth": "^0.0.17", - "@typescript-eslint/eslint-plugin": "^5.59.0", - "@typescript-eslint/parser": "^5.59.0", - "eslint": "^8.43.0", - "eslint-plugin-svelte": "^2.32.1", - "jsdom": "^23.2.0", - "prettier": "^3.1.0", - "prettier-plugin-svelte": "^3.1.2", - "svelte": "^4.0.0", - "svelte-check": "^3.6.2", - "svelte-preprocess": "^5.0.3", - "svelte-windicss-preprocess": "^4.2.2", - "tslib": "^2.5.0", - "typescript": "^5.0.4", - "unplugin-icons": "^0.18.1", - "vite": "^5.0.7", - "vite-plugin-windicss": "^1.9.3", - "vitest": "^1.0.4", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react": "^4.2.1", + "cross-env": "^7.0.3", + "ejs": "^3.1.9", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "jsdom": "^24.0.0", + "playwright": "^1.42.1", + "prettier": "2.8.8", + "typescript": "^5.4.2", + "vite": "^5.1.5", + "vite-plugin-pwa": "^0.19.8", + "vite-plugin-svgr": "^4.2.0", + "vitest": "^1.3.1", "vitest-dom": "^0.1.1" }, "dependencies": { - "@microsoft/applicationinsights-web": "^3.0.0", - "@sentry/svelte": "^7.100.1", - "@tensorflow/tfjs": "^4.4.0", + "@chakra-ui/icons": "^2.1.1", + "@chakra-ui/react": "^2.8.2", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@microbit/makecode-embed": "^0.0.0-alpha.7", + "@microbit/microbit-connection": "^0.0.0-alpha.21", + "@microbit/ml-header-generator": "^0.4.3", + "@tensorflow/tfjs": "^4.20.0", "@types/w3c-web-serial": "^1.0.6", "@types/w3c-web-usb": "^1.0.6", + "@vitejs/plugin-react": "^4.3.1", "bowser": "^2.11.0", - "browser-lang": "^0.2.1", "chart.js": "^4.2.1", - "d3": "^7.8.5", - "dapjs": "^2.3.0", - "js-cookie": "^3.0.4", - "postcss": "^8.4.23", + "framer-motion": "^10.2.4", + "lodash.camelcase": "^4.3.0", + "lodash.upperfirst": "^4.3.1", + "ml4f": "git://github.com/microsoft/ml4f#v1.10.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^4.12.0", + "react-intl": "^6.6.8", + "react-router": "^6.24.0", + "react-router-dom": "^6.24.0", "smoothie": "^1.36.1", - "svelte-i18n": "^4.0.0", - "svelte-skeleton": "^1.3.1", - "svelte-transition": "^0.0.10", - "three": "^0.152.2", - "uuid4": "^2.0.3" + "zustand": "^4.5.5" } } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..098a75182 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,38 @@ +import { defineConfig, devices } from "@playwright/test"; + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: "./src/e2e", + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: "html", + use: { + trace: "on-first-retry", + ignoreHTTPSErrors: true, + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], + /* Run local dev server before starting the tests */ + webServer: { + ...(process.env.CI + ? { + command: `npx vite preview --port 5173 --base ${process.env.BASE_URL}`, + url: `http://localhost:5173${process.env.BASE_URL}`, + } + : { + command: "npx vite dev", + url: "http://localhost:5173/", + }), + reuseExistingServer: !process.env.CI, + stdout: "pipe", + ignoreHTTPSErrors: true, + }, +}); diff --git a/public/css/all.min.css b/public/css/all.min.css deleted file mode 100644 index ac76ff191..000000000 --- a/public/css/all.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/public/css/global.css b/public/css/global.css deleted file mode 100644 index 957033c10..000000000 --- a/public/css/global.css +++ /dev/null @@ -1,76 +0,0 @@ -html { - -webkit-font-smoothing: antialiased; -} - -.scrollable { - -ms-overflow-style: none; - scrollbar-width: none; -} - -.scrollable::-webkit-scrollbar { - width: 6px; - margin-right: 0; - height: 8px; -} - -.scrollable::-webkit-scrollbar-thumb { - background: rgba(160, 160, 160, 0.473); - border-radius: 3px; -} - -.scrollinvis { - -ms-overflow-style: none; - scrollbar-width: none; -} - -.scrollinvis::-webkit-scrollbar { - width: 0px; - margin-right: 0; - height: 0px; -} - -.scrollinvis::-webkit-scrollbar-thumb { - background: rgba(160, 160, 160, 0.473); - border-radius: 3px; -} - -.autoscaling { - transform: scale(0.6) translate(-35%, -70%); -} - -@media screen and (min-width: 1200px) { - .autoscaling { - transform: scale(0.7) translate(-22%, -50%); - } -} - -@media screen and (min-width: 1400px) { - .autoscaling { - transform: scale(0.85) translate(-10%, -30%); - } -} - -@media screen and (min-width: 1600px) { - .autoscaling { - transform: scale(1) translate(0, -15%); - ; - } -} - -@media screen and (min-width: 1900px) { - .autoscaling { - transform: scale(1.25) translate(10%, -5%); - } -} - -@media screen and (min-width: 2300px) { - .autoscaling { - transform: scale(1.5) translate(18%, 5%); - } -} - -@media screen and (min-width: 2700px) { - .autoscaling { - transform: scale(2) translate(25%, 10%); - } -} \ No newline at end of file diff --git a/public/models/license.txt b/public/models/license.txt deleted file mode 100644 index c3e6c5d1e..000000000 --- a/public/models/license.txt +++ /dev/null @@ -1,11 +0,0 @@ -Model Information: -* title: Microbit Assemby -* source: https://sketchfab.com/3d-models/microbit-assemby-f0c6ec58eefc47afaab08d8de07e1158 -* author: jezd (https://sketchfab.com/jezd) - -Model License: -* license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/) -* requirements: Author must be credited. Commercial use is allowed. - -If you use this 3D model in your project be sure to copy paste this credit wherever you share it: -This work is based on "Microbit Assemby" (https://sketchfab.com/3d-models/microbit-assemby-f0c6ec58eefc47afaab08d8de07e1158) by jezd (https://sketchfab.com/jezd) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/) \ No newline at end of file diff --git a/public/models/microbit.bin b/public/models/microbit.bin deleted file mode 100644 index 681681c2b..000000000 Binary files a/public/models/microbit.bin and /dev/null differ diff --git a/public/models/microbit.gltf b/public/models/microbit.gltf deleted file mode 100644 index aca43b8b0..000000000 --- a/public/models/microbit.gltf +++ /dev/null @@ -1,130 +0,0 @@ -{ - "accessors": [ - { - "bufferView": 1, - "componentType": 5126, - "count": 45508, - "max": [2.160778522491455, -0.026219289749860764, 2.158750057220459], - "min": [-2.9392216205596924, -0.8878952264785767, -2.158750057220459], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 546096, - "componentType": 5126, - "count": 45508, - "max": [1.0, 1.0, 1.0], - "min": [-1.0, -1.0, -1.0], - "type": "VEC3" - }, - { - "bufferView": 2, - "componentType": 5126, - "count": 45508, - "max": [0.9354838728904724, 0.9354838728904724, 1.0, 1.0], - "min": [0.0, 0.0, 0.0, 1.0], - "type": "VEC4" - }, - { - "bufferView": 0, - "componentType": 5125, - "count": 147282, - "type": "SCALAR" - } - ], - "asset": { - "extras": { - "author": "jezd (https://sketchfab.com/jezd)", - "license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)", - "source": "https://sketchfab.com/3d-models/microbit-assemby-f0c6ec58eefc47afaab08d8de07e1158", - "title": "Microbit Assemby" - }, - "generator": "Sketchfab-12.68.0", - "version": "2.0" - }, - "bufferViews": [ - { - "buffer": 0, - "byteLength": 589128, - "name": "floatBufferViews", - "target": 34963 - }, - { - "buffer": 0, - "byteLength": 1092192, - "byteOffset": 589128, - "byteStride": 12, - "name": "floatBufferViews", - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 728128, - "byteOffset": 1681320, - "byteStride": 16, - "name": "floatBufferViews", - "target": 34962 - } - ], - "buffers": [ - { - "byteLength": 2409448, - "uri": "microbit.bin" - } - ], - "materials": [ - { - "doubleSided": true, - "name": "Scene_-_Root", - "pbrMetallicRoughness": { - "baseColorFactor": [0.5, 0.5, 0.5, 1.0], - "metallicFactor": 0.0, - "roughnessFactor": 0.6 - } - } - ], - "meshes": [ - { - "name": "Object_0", - "primitives": [ - { - "attributes": { - "COLOR_0": 2, - "NORMAL": 1, - "POSITION": 0 - }, - "indices": 3, - "material": 0, - "mode": 4 - } - ] - } - ], - "nodes": [ - { - "children": [1], - "matrix": [ - 0.5346093107466956, 0.032277692794475926, -0.11701840776204618, 0.0, - -0.11969750498639442, 0.22807762221336791, -0.4839373542253646, 0.0, - 0.020190712799171395, 0.4974746554924749, 0.22946370187784748, 0.0, - -0.10945520550012589, 0.21306870877742767, -0.029492583125829648, 1.0 - ], - "name": "Sketchfab_model" - }, - { - "children": [2], - "name": "microbit assemby.stl.cleaner.gles" - }, - { - "mesh": 0, - "name": "Object_2" - } - ], - "scene": 0, - "scenes": [ - { - "name": "Sketchfab_Scene", - "nodes": [0] - } - ] -} diff --git a/public/sounds/congratulations.wav b/public/sounds/congratulations.wav deleted file mode 100644 index 70bb3ff32..000000000 Binary files a/public/sounds/congratulations.wav and /dev/null differ diff --git a/public/sounds/high_pitch.wav b/public/sounds/high_pitch.wav deleted file mode 100644 index 0bb4b59fd..000000000 Binary files a/public/sounds/high_pitch.wav and /dev/null differ diff --git a/public/sounds/huge_mistake.wav b/public/sounds/huge_mistake.wav deleted file mode 100644 index e95f7d614..000000000 Binary files a/public/sounds/huge_mistake.wav and /dev/null differ diff --git a/public/sounds/looser.wav b/public/sounds/looser.wav deleted file mode 100644 index 9d22184f1..000000000 Binary files a/public/sounds/looser.wav and /dev/null differ diff --git a/public/sounds/low_pitch.wav b/public/sounds/low_pitch.wav deleted file mode 100644 index ce56f6302..000000000 Binary files a/public/sounds/low_pitch.wav and /dev/null differ diff --git a/public/sounds/mistake.mp3 b/public/sounds/mistake.mp3 deleted file mode 100644 index ad3c9505f..000000000 Binary files a/public/sounds/mistake.mp3 and /dev/null differ diff --git a/public/webfonts/fa-brands-400.eot b/public/webfonts/fa-brands-400.eot deleted file mode 100644 index cba6c6cce..000000000 Binary files a/public/webfonts/fa-brands-400.eot and /dev/null differ diff --git a/public/webfonts/fa-brands-400.svg b/public/webfonts/fa-brands-400.svg deleted file mode 100644 index b9881a43b..000000000 --- a/public/webfonts/fa-brands-400.svg +++ /dev/null @@ -1,3717 +0,0 @@ - - - - -Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/webfonts/fa-brands-400.ttf b/public/webfonts/fa-brands-400.ttf deleted file mode 100644 index 8d75dedda..000000000 Binary files a/public/webfonts/fa-brands-400.ttf and /dev/null differ diff --git a/public/webfonts/fa-brands-400.woff b/public/webfonts/fa-brands-400.woff deleted file mode 100644 index 3375bef09..000000000 Binary files a/public/webfonts/fa-brands-400.woff and /dev/null differ diff --git a/public/webfonts/fa-brands-400.woff2 b/public/webfonts/fa-brands-400.woff2 deleted file mode 100644 index 402f81c0b..000000000 Binary files a/public/webfonts/fa-brands-400.woff2 and /dev/null differ diff --git a/public/webfonts/fa-regular-400.eot b/public/webfonts/fa-regular-400.eot deleted file mode 100644 index a4e598936..000000000 Binary files a/public/webfonts/fa-regular-400.eot and /dev/null differ diff --git a/public/webfonts/fa-regular-400.svg b/public/webfonts/fa-regular-400.svg deleted file mode 100644 index 463af27c0..000000000 --- a/public/webfonts/fa-regular-400.svg +++ /dev/null @@ -1,801 +0,0 @@ - - - - -Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/webfonts/fa-regular-400.ttf b/public/webfonts/fa-regular-400.ttf deleted file mode 100644 index 7157aafba..000000000 Binary files a/public/webfonts/fa-regular-400.ttf and /dev/null differ diff --git a/public/webfonts/fa-regular-400.woff b/public/webfonts/fa-regular-400.woff deleted file mode 100644 index ad077c6be..000000000 Binary files a/public/webfonts/fa-regular-400.woff and /dev/null differ diff --git a/public/webfonts/fa-regular-400.woff2 b/public/webfonts/fa-regular-400.woff2 deleted file mode 100644 index 56328948b..000000000 Binary files a/public/webfonts/fa-regular-400.woff2 and /dev/null differ diff --git a/public/webfonts/fa-solid-900.eot b/public/webfonts/fa-solid-900.eot deleted file mode 100644 index e99417197..000000000 Binary files a/public/webfonts/fa-solid-900.eot and /dev/null differ diff --git a/public/webfonts/fa-solid-900.svg b/public/webfonts/fa-solid-900.svg deleted file mode 100644 index 00296e959..000000000 --- a/public/webfonts/fa-solid-900.svg +++ /dev/null @@ -1,5034 +0,0 @@ - - - - -Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/webfonts/fa-solid-900.ttf b/public/webfonts/fa-solid-900.ttf deleted file mode 100644 index 25abf389e..000000000 Binary files a/public/webfonts/fa-solid-900.ttf and /dev/null differ diff --git a/public/webfonts/fa-solid-900.woff b/public/webfonts/fa-solid-900.woff deleted file mode 100644 index 23ee66344..000000000 Binary files a/public/webfonts/fa-solid-900.woff and /dev/null differ diff --git a/public/webfonts/fa-solid-900.woff2 b/public/webfonts/fa-solid-900.woff2 deleted file mode 100644 index 2217164f0..000000000 Binary files a/public/webfonts/fa-solid-900.woff2 and /dev/null differ diff --git a/src/App.svelte b/src/App.svelte deleted file mode 100644 index c8e8ebb78..000000000 --- a/src/App.svelte +++ /dev/null @@ -1,129 +0,0 @@ - - - - -{#if !$isLoading} - -
- {#if !$compatibility.platformAllowed} - - - {:else} -
- - - {#if $consent} - - - - {/if} -
- -
-
- micro:bit -
-
- {$t('content.index.title')} -
-
- -
- - -
- -
-
-
- {/if} - - -{/if} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 000000000..4dcc90495 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,121 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import { ChakraProvider } from "@chakra-ui/react"; +import { MakeCodeFrameDriver } from "@microbit/makecode-embed/react"; +import React, { ReactNode, useMemo, useRef } from "react"; +import { + Outlet, + RouterProvider, + ScrollRestoration, + createBrowserRouter, +} from "react-router-dom"; +import { BufferedDataProvider } from "./buffered-data-hooks"; +import EditCodeDialog from "./components/EditCodeDialog"; +import ErrorBoundary from "./components/ErrorBoundary"; +import ErrorHandlerErrorView from "./components/ErrorHandlerErrorView"; +import NotFound from "./components/NotFound"; +import { ConnectProvider } from "./connect-actions-hooks"; +import { ConnectStatusProvider } from "./connect-status-hooks"; +import { ConnectionStageProvider } from "./connection-stage-hooks"; +import { deployment, useDeployment } from "./deployment"; +import { ProjectProvider } from "./hooks/project-hooks"; +import { LoggingProvider } from "./logging/logging-hooks"; +import TranslationProvider from "./messages/TranslationProvider"; +import { sessionPageConfigs } from "./pages-config"; +import HomePage from "./pages/HomePage"; +import NewPage from "./pages/NewPage"; +import { + createHomePageUrl, + createNewPageUrl, + createSessionPageUrl, +} from "./urls"; + +export interface ProviderLayoutProps { + children: ReactNode; +} + +const logging = deployment.logging; + +const Providers = ({ children }: ProviderLayoutProps) => { + const deployment = useDeployment(); + const { ConsentProvider } = deployment.compliance; + return ( + + + + + + + + + + {children} + + + + + + + + + + ); +}; + +const Layout = () => { + const driverRef = useRef(null); + return ( + // We use this even though we have errorElement as this does logging. + + + + + + + + ); +}; + +const createRouter = () => { + return createBrowserRouter([ + { + id: "root", + path: "", + element: , + // This one gets used for loader errors (typically offline) + // We set an error boundary inside the routes too that logs render-time errors. + // ErrorBoundary doesn't work properly in the loader case at least. + errorElement: , + children: [ + { + path: createHomePageUrl(), + element: , + }, + { + path: createNewPageUrl(), + element: , + }, + ...sessionPageConfigs.map((config) => { + return { + path: createSessionPageUrl(config.id), + element: , + }; + }), + { + path: "*", + element: , + }, + ], + }, + ]); +}; + +const App = () => { + const router = useMemo(createRouter, []); + return ( + + + + ); +}; + +export default App; diff --git a/src/StaticConfiguration.ts b/src/StaticConfiguration.ts deleted file mode 100644 index ff3bbd69b..000000000 --- a/src/StaticConfiguration.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -/** - * Static configuration values. These values are not expected to change, while the application is running. - */ -import { PinTurnOnState } from './components/output/PinSelectorUtil'; -import MBSpecs from './script/microbit-interfacing/MBSpecs'; - -export enum HexOrigin { - UNKNOWN, - MAKECODE, - PROPRIETARY, -} - -class StaticConfiguration { - public static readonly connectTimeoutDuration: number = 10000; - public static readonly requestDeviceTimeoutDuration: number = 30000; - - // After how long should we consider the connection lost if ping was not able to conclude? - public static readonly connectionLostTimeoutDuration: number = 3000; - - // Which pins are supported? - public static supportedPins: MBSpecs.UsableIOPin[] = [0, 1, 2]; - public static readonly defaultOutputPin: MBSpecs.UsableIOPin = 0; // Which pin should be selected by default? - // In milliseconds, after turning on, how long should an output be on for? - public static readonly defaultPinToggleTime = 1500; - public static readonly defaultPinTurnOnState: PinTurnOnState = PinTurnOnState.X_TIME; - public static readonly pinIOEnabledByDefault: boolean = true; - - // How long may gesture names be? - public static readonly gestureNameMaxLength = 18; - - // Default required confidence level - public static readonly defaultRequiredConfidence = 0.8; - - // Duration before assuming the microbit is outdated? (in milliseconds) - public static readonly versionIdentificationTimeoutDuration = 4000; - - // Link to the MakeCode firmware template - public static readonly makecodeFirmwareUrl = - 'https://makecode.microbit.org/#pub:54705-16835-80762-83855'; - - public static readonly isMicrobitOutdated = (origin: HexOrigin, version: number) => { - // Current versions, remember to update these, whenever changes to firmware are made! - if (origin === HexOrigin.UNKNOWN) return true; - - const versionNumbers = new Map(); - versionNumbers.set(HexOrigin.MAKECODE, 1); - versionNumbers.set(HexOrigin.PROPRIETARY, 1); - return versionNumbers.get(origin) !== version; - }; -} -export default StaticConfiguration; diff --git a/src/__tests__/cookie.test.ts b/src/__tests__/cookie.test.ts deleted file mode 100644 index 398f3de0e..000000000 --- a/src/__tests__/cookie.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @vitest-environment jsdom - */ - -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import CookieManager from '../script/CookieManager'; -import Cookies from 'js-cookie'; - -describe('Cookie tests', () => { - test('Should get feature flag if set', () => { - const someFlag = 'someflag'; - Cookies.set('fflags', 'someflag + some junk'); - expect(CookieManager.hasFeatureFlag(someFlag)).toBeTruthy(); - }); - - test('Should NOT get feature flag if NOT set', () => { - const someFlag = 'someflag'; - Cookies.set('fflags', 'some junk'); - expect(CookieManager.hasFeatureFlag(someFlag)).toBeFalsy(); - }); - - test('Should NOT get feature flag if no fflags cookie is set', () => { - const someFlag = 'someflag'; - expect(CookieManager.hasFeatureFlag(someFlag)).toBeFalsy(); - }); -}); diff --git a/src/__tests__/datafunctions.test.ts b/src/__tests__/datafunctions.test.ts deleted file mode 100644 index 6258ea933..000000000 --- a/src/__tests__/datafunctions.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import { determineFilter, Filters } from '../script/datafunctions'; -function enumKeys(obj: O): K[] { - return Object.keys(obj).filter(k => Number.isNaN(+k)) as K[]; -} -describe('Data functions architecture test', () => { - test('All filters should be implemented in determineFilter', () => { - for (const filter of enumKeys(Filters)) { - expect(() => determineFilter(Filters[filter])).not.toThrow(); - } - }); -}); diff --git a/src/__tests__/default-build-config.test.ts b/src/__tests__/default-build-config.test.ts deleted file mode 100644 index a5564468e..000000000 --- a/src/__tests__/default-build-config.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import fs from 'fs'; - -describe('Default build config test', () => { - test('Windi config should not be ml-machine', () => { - const fileContent = fs.readFileSync('windi.config.js'); - expect(fileContent.includes("primary: '#2B5EA7'")).toBeFalsy(); - expect(fileContent.includes("secondary: '#2CCAC0'")).toBeFalsy(); - }); -}); diff --git a/src/__tests__/fixtures/gesture-data-bad-labels.json b/src/__tests__/fixtures/gesture-data-bad-labels.json deleted file mode 100644 index 79f01fc5a..000000000 --- a/src/__tests__/fixtures/gesture-data-bad-labels.json +++ /dev/null @@ -1,1024 +0,0 @@ -[ - { - "ID": 1705437833024, - "name": "Circle", - "recordings": [ - { - "ID": 1705437969952, - "data": { - "x": [ - -0.064, -0.06, -0.06, -0.06, -0.06, -0.064, -0.056, -0.056, -0.06, -0.06, - -0.064, -0.056, -0.056, -0.056, -0.06, -0.052, -0.064, -0.06, -0.064, -0.06, - -0.06, -0.052, -0.056, -0.06, -0.064, -0.06, -0.064, -0.06, -0.06, -0.068, - -0.056, -0.056, -0.048, -0.064, -0.056, -0.06, -0.056, -0.056, -0.056, -0.056, - -0.06, -0.06, -0.056, -0.064, -0.064, -0.056, -0.056, -0.056, -0.06, -0.056, - -0.064, -0.06, -0.056, -0.064, -0.064, -0.056, -0.056, -0.064, -0.056, -0.06, - -0.052, -0.06, -0.056, -0.06, -0.06, -0.06, -0.06, -0.056, -0.06, -0.052, - -0.048, -0.06, -0.06, -0.056, -0.064, -0.06, -0.056, -0.056, -0.06, -0.056, - -0.064, -0.06, -0.056, -0.06, -0.06, -0.052, -0.064, -0.056, -0.068, -0.06, - -0.06, -0.052, -0.06 - ], - "y": [ - 0.768, 0.768, 0.772, 0.76, 0.76, 0.772, 0.764, 0.76, 0.764, 0.764, 0.772, - 0.764, 0.76, 0.764, 0.76, 0.768, 0.764, 0.76, 0.764, 0.76, 0.772, 0.76, 0.764, - 0.768, 0.764, 0.764, 0.76, 0.764, 0.756, 0.764, 0.764, 0.76, 0.76, 0.764, - 0.764, 0.76, 0.756, 0.76, 0.76, 0.756, 0.76, 0.764, 0.768, 0.764, 0.752, 0.76, - 0.76, 0.756, 0.756, 0.772, 0.76, 0.764, 0.76, 0.764, 0.76, 0.768, 0.764, - 0.756, 0.76, 0.764, 0.764, 0.764, 0.76, 0.756, 0.768, 0.764, 0.756, 0.76, - 0.764, 0.764, 0.764, 0.764, 0.764, 0.756, 0.76, 0.76, 0.772, 0.76, 0.764, - 0.76, 0.772, 0.764, 0.756, 0.76, 0.768, 0.752, 0.76, 0.76, 0.76, 0.756, 0.76, - 0.764, 0.752 - ], - "z": [ - -0.7, -0.684, -0.7, -0.688, -0.696, -0.696, -0.7, -0.696, -0.7, -0.692, - -0.696, -0.704, -0.696, -0.692, -0.7, -0.696, -0.696, -0.688, -0.692, -0.684, - -0.7, -0.696, -0.704, -0.692, -0.704, -0.7, -0.7, -0.7, -0.708, -0.7, -0.696, - -0.692, -0.696, -0.7, -0.7, -0.692, -0.704, -0.692, -0.708, -0.696, -0.704, - -0.7, -0.692, -0.692, -0.708, -0.704, -0.696, -0.704, -0.704, -0.704, -0.704, - -0.704, -0.7, -0.696, -0.708, -0.7, -0.696, -0.696, -0.692, -0.704, -0.696, - -0.696, -0.688, -0.7, -0.708, -0.696, -0.704, -0.696, -0.708, -0.7, -0.712, - -0.708, -0.696, -0.7, -0.696, -0.696, -0.7, -0.696, -0.704, -0.696, -0.708, - -0.7, -0.7, -0.7, -0.704, -0.7, -0.684, -0.692, -0.696, -0.704, -0.704, -0.7, - -0.7 - ] - } - }, - { - "ID": 1705437870493, - "data": { - "x": [ - -0.804, -0.836, -0.848, -0.812, -0.768, -0.784, -0.808, -0.776, -0.7, -0.648, - -0.636, -0.664, -0.672, -0.704, -0.712, -0.72, -0.756, -0.752, -0.704, -0.68, - -0.692, -0.708, -0.72, -0.756, -0.764, -0.768, -0.772, -0.736, -0.748, -0.74, - -0.772, -0.764, -0.752, -0.736, -0.732, -0.756, -0.76, -0.772, -0.74, -0.74, - -0.748, -0.748, -0.752, -0.772, -0.756, -0.748, -0.732, -0.74, -0.752, -0.756, - -0.748, -0.732, -0.74, -0.76, -0.752, -0.772, -0.764, -0.74, -0.736, -0.748, - -0.764, -0.756, -0.728, -0.74, -0.756, -0.752, -0.744, -0.756, -0.744, -0.732, - -0.728, -0.74, -0.752, -0.76, -0.776, -0.78, -0.772, -0.74, -0.732, -0.74, - -0.764, -0.776, -0.772, -0.764, -0.748, -0.76, -0.736, -0.748, -0.744, -0.768, - -0.812, -0.808 - ], - "y": [ - -0.48, -0.472, -0.48, -0.492, -0.476, -0.432, -0.428, -0.476, -0.548, -0.552, - -0.536, -0.516, -0.496, -0.484, -0.476, -0.484, -0.484, -0.5, -0.504, -0.508, - -0.484, -0.492, -0.496, -0.484, -0.48, -0.476, -0.484, -0.492, -0.468, -0.484, - -0.476, -0.484, -0.492, -0.5, -0.488, -0.484, -0.476, -0.476, -0.488, -0.496, - -0.492, -0.472, -0.464, -0.464, -0.476, -0.48, -0.488, -0.484, -0.468, -0.468, - -0.484, -0.488, -0.484, -0.488, -0.472, -0.476, -0.476, -0.48, -0.492, -0.476, - -0.472, -0.476, -0.484, -0.484, -0.484, -0.484, -0.492, -0.488, -0.456, -0.48, - -0.484, -0.472, -0.476, -0.46, -0.472, -0.472, -0.46, -0.472, -0.488, -0.476, - -0.472, -0.488, -0.492, -0.5, -0.492, -0.488, -0.484, -0.492, -0.488, -0.472, - -0.428, -0.436 - ], - "z": [ - -0.56, -0.592, -0.572, -0.52, -0.512, -0.568, -0.656, -0.656, -0.56, -0.504, - -0.54, -0.608, -0.636, -0.652, -0.66, -0.64, -0.66, -0.66, -0.584, -0.56, - -0.576, -0.6, -0.592, -0.58, -0.62, -0.608, -0.616, -0.576, -0.596, -0.572, - -0.604, -0.592, -0.568, -0.572, -0.56, -0.584, -0.584, -0.612, -0.572, -0.568, - -0.576, -0.588, -0.6, -0.596, -0.572, -0.564, -0.568, -0.592, -0.6, -0.604, - -0.588, -0.572, -0.58, -0.584, -0.588, -0.596, -0.584, -0.564, -0.568, -0.592, - -0.596, -0.592, -0.588, -0.572, -0.588, -0.6, -0.576, -0.592, -0.624, -0.572, - -0.564, -0.584, -0.588, -0.6, -0.6, -0.592, -0.58, -0.564, -0.552, -0.564, - -0.58, -0.592, -0.588, -0.584, -0.568, -0.58, -0.56, -0.568, -0.548, -0.58, - -0.636, -0.608 - ] - } - }, - { - "ID": 1705437864426, - "data": { - "x": [ - 0.892, 0.972, 0.972, 0.92, 0.916, 0.964, 0.924, 0.932, 0.984, 0.932, 0.876, - 0.88, 0.904, 0.92, 0.948, 0.984, 0.992, 0.948, 0.948, 0.992, 0.98, 0.952, - 0.948, 0.928, 0.964, 0.94, 0.94, 0.948, 0.976, 0.964, 0.956, 0.936, 0.948, - 0.94, 0.932, 0.96, 0.952, 0.936, 0.98, 0.984, 0.948, 0.94, 0.928, 0.928, 0.94, - 0.96, 0.94, 0.94, 0.94, 0.936, 0.948, 0.948, 0.952, 0.952, 0.936, 0.96, 0.96, - 0.956, 0.96, 0.952, 0.94, 0.956, 0.94, 0.94, 0.948, 0.94, 0.952, 0.952, 0.952, - 0.944, 0.944, 0.96, 0.976, 0.968, 0.944, 0.928, 0.94, 0.956, 0.952, 0.952, - 0.948, 0.952, 0.948, 0.944, 0.944, 0.94, 0.92, 0.94, 0.952, 0.964, 0.968, - 0.968, 0.944 - ], - "y": [ - -0.02, -0.088, -0.116, -0.144, -0.14, -0.016, 0.012, -0.04, -0.1, -0.076, - -0.088, -0.096, -0.104, -0.088, -0.092, -0.096, -0.076, -0.072, -0.072, -0.08, - -0.076, -0.084, -0.104, -0.088, -0.104, -0.088, -0.116, -0.116, -0.132, - -0.116, -0.108, -0.104, -0.12, -0.116, -0.1, -0.108, -0.112, -0.096, -0.108, - -0.112, -0.1, -0.1, -0.1, -0.104, -0.116, -0.12, -0.096, -0.108, -0.12, - -0.116, -0.108, -0.104, -0.112, -0.112, -0.096, -0.096, -0.104, -0.088, - -0.096, -0.1, -0.108, -0.1, -0.108, -0.096, -0.1, -0.104, -0.108, -0.104, - -0.1, -0.088, -0.092, -0.1, -0.1, -0.096, -0.088, -0.092, -0.096, -0.096, - -0.104, -0.088, -0.08, -0.108, -0.092, -0.096, -0.1, -0.1, -0.08, -0.1, - -0.096, -0.092, -0.092, -0.112, -0.088 - ], - "z": [ - 0.208, -0.032, -0.252, -0.316, -0.292, -0.224, -0.14, 0.116, 0, -0.196, - -0.188, -0.16, -0.172, -0.096, -0.152, -0.228, -0.268, -0.248, -0.172, -0.14, - -0.136, -0.188, -0.204, -0.14, -0.116, -0.104, -0.18, -0.216, -0.192, -0.168, - -0.132, -0.16, -0.188, -0.184, -0.14, -0.124, -0.176, -0.176, -0.16, -0.18, - -0.176, -0.152, -0.156, -0.168, -0.176, -0.172, -0.168, -0.152, -0.16, -0.156, - -0.18, -0.168, -0.176, -0.188, -0.172, -0.18, -0.176, -0.188, -0.168, -0.16, - -0.196, -0.192, -0.184, -0.152, -0.148, -0.2, -0.2, -0.172, -0.168, -0.168, - -0.18, -0.176, -0.168, -0.16, -0.148, -0.148, -0.164, -0.184, -0.184, -0.176, - -0.144, -0.156, -0.176, -0.184, -0.172, -0.172, -0.144, -0.168, -0.188, -0.18, - -0.176, -0.14, -0.144 - ] - } - }, - { - "ID": 1705437860385, - "data": { - "x": [ - 0, 0.004, 0, 0.004, 0.016, 0, 0.004, -0.06, -0.004, -0.04, -0.048, -0.052, - -0.056, -0.048, -0.052, -0.044, -0.052, -0.044, -0.048, -0.04, -0.056, -0.052, - -0.052, -0.056, -0.056, -0.044, -0.044, -0.056, -0.052, -0.048, -0.048, - -0.048, -0.048, -0.048, -0.06, -0.056, -0.052, -0.056, -0.056, -0.052, -0.056, - -0.056, -0.056, -0.048, -0.048, -0.048, -0.06, -0.052, -0.056, -0.048, -0.052, - -0.048, -0.048, -0.048, -0.044, -0.048, -0.052, -0.052, -0.056, -0.056, - -0.044, -0.048, -0.052, -0.052, -0.048, -0.052, -0.056, -0.052, -0.056, - -0.044, -0.048, -0.052, -0.048, -0.052, -0.052, -0.052, -0.048, -0.056, - -0.056, -0.048, -0.052, -0.056, -0.048, -0.056, -0.048, -0.048, -0.052, - -0.052, -0.048, -0.052, -0.052, -0.044 - ], - "y": [ - 0.16, 0.172, 0.184, 0.184, 0.168, 0.188, 0.192, 0.212, 0.16, 0.208, 0.224, - 0.224, 0.22, 0.22, 0.224, 0.22, 0.22, 0.216, 0.2, 0.216, 0.228, 0.224, 0.224, - 0.232, 0.228, 0.232, 0.224, 0.224, 0.228, 0.228, 0.228, 0.228, 0.232, 0.236, - 0.232, 0.232, 0.228, 0.22, 0.232, 0.228, 0.228, 0.232, 0.236, 0.232, 0.232, - 0.224, 0.224, 0.232, 0.224, 0.236, 0.228, 0.232, 0.228, 0.224, 0.228, 0.232, - 0.228, 0.228, 0.232, 0.232, 0.228, 0.224, 0.224, 0.232, 0.236, 0.228, 0.228, - 0.236, 0.232, 0.224, 0.228, 0.224, 0.236, 0.236, 0.232, 0.228, 0.228, 0.236, - 0.232, 0.228, 0.232, 0.232, 0.228, 0.232, 0.228, 0.228, 0.228, 0.228, 0.224, - 0.232, 0.232, 0.232 - ], - "z": [ - 1, 1.016, 1.032, 1.02, 0.98, 1.004, 0.788, 1.06, 1.028, 1.004, 0.996, 1.012, - 1, 1.012, 1.008, 1.004, 0.996, 1.008, 1.012, 1.012, 1.012, 1.012, 1.012, 1, - 1.012, 1.008, 1.004, 1.012, 1.008, 1.008, 1.008, 1.008, 0.996, 0.996, 1.008, - 1.012, 1.008, 1.012, 1.008, 1.012, 1.004, 1.008, 1.004, 1.004, 1.004, 1, - 1.008, 1.004, 1.004, 1.012, 1.008, 1.004, 1.004, 1.008, 1.008, 1.008, 1, - 1.004, 1, 1, 1, 1.008, 1.004, 1, 1.004, 1.004, 1.004, 1, 1.008, 1.012, 1.004, - 1.004, 1.008, 1.008, 1, 1.012, 1.004, 0.996, 1.008, 1, 1.008, 1.012, 0.996, - 0.996, 1.004, 1.008, 1.012, 1.008, 1.004, 1.008, 1.008, 1.008 - ] - } - }, - { - "ID": 1705437854703, - "data": { - "x": [ - -0.076, -0.076, -0.072, -0.068, -0.076, -0.072, -0.072, -0.056, -0.104, - -0.068, -0.072, -0.064, -0.072, -0.044, -0.072, -0.064, -0.064, -0.068, - -0.076, -0.076, -0.068, -0.068, -0.072, -0.068, -0.072, -0.068, -0.072, - -0.068, -0.056, -0.064, -0.068, -0.068, -0.068, -0.068, -0.06, -0.072, -0.076, - -0.072, -0.068, -0.064, -0.072, -0.06, -0.072, -0.068, -0.064, -0.06, -0.064, - -0.068, -0.064, -0.072, -0.064, -0.068, -0.076, -0.068, -0.064, -0.064, - -0.064, -0.068, -0.064, -0.072, -0.068, -0.072, -0.06, -0.06, -0.076, -0.06, - -0.064, -0.064, -0.06, -0.068, -0.076, -0.064, -0.064, -0.064, -0.072, -0.068, - -0.064, -0.064, -0.088, -0.06, -0.06, -0.06, -0.064, -0.056, -0.06, -0.064, - -0.064, -0.064, -0.064, -0.068, -0.072, -0.068, -0.06 - ], - "y": [ - 0.968, 0.96, 0.956, 0.964, 0.964, 0.96, 0.96, 0.976, 0.96, 0.96, 0.96, 0.96, - 0.956, 0.948, 0.952, 0.956, 0.944, 0.944, 0.944, 0.944, 0.948, 0.952, 0.944, - 0.948, 0.948, 0.94, 0.948, 0.944, 0.956, 0.948, 0.944, 0.952, 0.952, 0.952, - 0.952, 0.952, 0.948, 0.948, 0.948, 0.952, 0.944, 0.944, 0.948, 0.948, 0.944, - 0.948, 0.952, 0.948, 0.952, 0.948, 0.94, 0.944, 0.952, 0.952, 0.936, 0.948, - 0.948, 0.944, 0.948, 0.944, 0.944, 0.944, 0.94, 0.956, 0.944, 0.952, 0.94, - 0.952, 0.944, 0.944, 0.944, 0.956, 0.948, 0.952, 0.944, 0.94, 0.936, 0.944, - 0.936, 0.94, 0.956, 0.952, 0.948, 0.944, 0.952, 0.94, 0.948, 0.948, 0.952, - 0.948, 0.948, 0.948, 0.948 - ], - "z": [ - -0.396, -0.388, -0.392, -0.388, -0.38, -0.36, -0.404, -0.416, -0.396, -0.42, - -0.388, -0.42, -0.42, -0.564, -0.424, -0.416, -0.424, -0.44, -0.432, -0.428, - -0.428, -0.432, -0.428, -0.428, -0.432, -0.428, -0.424, -0.432, -0.436, - -0.428, -0.428, -0.432, -0.432, -0.428, -0.424, -0.436, -0.428, -0.432, - -0.432, -0.436, -0.424, -0.424, -0.428, -0.424, -0.436, -0.432, -0.42, -0.428, - -0.436, -0.424, -0.424, -0.424, -0.436, -0.428, -0.428, -0.424, -0.428, - -0.436, -0.424, -0.428, -0.44, -0.424, -0.428, -0.432, -0.432, -0.42, -0.428, - -0.428, -0.428, -0.436, -0.428, -0.428, -0.42, -0.428, -0.436, -0.432, -0.436, - -0.44, -0.428, -0.432, -0.432, -0.432, -0.432, -0.428, -0.44, -0.444, -0.436, - -0.424, -0.424, -0.432, -0.424, -0.432, -0.436 - ] - } - }, - { - "ID": 1705437847993, - "data": { - "x": [ - 0.744, 0.76, 0.66, 0.688, 0.784, 0.736, 0.704, 0.712, 0.732, 0.72, 0.768, - 0.772, 0.76, 0.784, 0.76, 0.776, 0.776, 0.776, 0.744, 0.744, 0.76, 0.748, - 0.764, 0.76, 0.764, 0.776, 0.772, 0.752, 0.76, 0.752, 0.764, 0.76, 0.748, - 0.752, 0.744, 0.76, 0.78, 0.772, 0.768, 0.756, 0.756, 0.748, 0.752, 0.744, - 0.744, 0.752, 0.756, 0.756, 0.752, 0.752, 0.748, 0.752, 0.756, 0.764, 0.756, - 0.756, 0.752, 0.748, 0.752, 0.748, 0.748, 0.744, 0.744, 0.752, 0.76, 0.76, - 0.756, 0.752, 0.756, 0.756, 0.752, 0.744, 0.732, 0.74, 0.744, 0.748, 0.732, - 0.736, 0.732, 0.748, 0.752, 0.748, 0.74, 0.744, 0.752, 0.744, 0.748, 0.732, - 0.736, 0.74, 0.752, 0.74 - ], - "y": [ - 0.292, 0.284, 0.24, 0.264, 0.224, 0.176, 0.232, 0.272, 0.268, 0.264, 0.248, - 0.224, 0.248, 0.248, 0.252, 0.232, 0.248, 0.264, 0.268, 0.268, 0.268, 0.272, - 0.268, 0.268, 0.256, 0.256, 0.26, 0.268, 0.264, 0.264, 0.264, 0.268, 0.268, - 0.276, 0.276, 0.256, 0.256, 0.264, 0.268, 0.272, 0.268, 0.272, 0.272, 0.3, - 0.276, 0.276, 0.284, 0.268, 0.284, 0.276, 0.276, 0.272, 0.276, 0.264, 0.276, - 0.276, 0.28, 0.272, 0.276, 0.28, 0.28, 0.28, 0.284, 0.276, 0.272, 0.264, - 0.268, 0.272, 0.272, 0.272, 0.272, 0.276, 0.28, 0.276, 0.284, 0.288, 0.284, - 0.3, 0.288, 0.272, 0.28, 0.28, 0.276, 0.272, 0.276, 0.284, 0.284, 0.288, - 0.284, 0.276, 0.272, 0.276 - ], - "z": [ - -0.56, -0.604, -0.56, -0.588, -0.616, -0.616, -0.644, -0.572, -0.564, -0.552, - -0.572, -0.552, -0.54, -0.556, -0.56, -0.568, -0.568, -0.572, -0.552, -0.548, - -0.54, -0.544, -0.556, -0.56, -0.56, -0.544, -0.536, -0.54, -0.532, -0.556, - -0.564, -0.572, -0.556, -0.552, -0.536, -0.544, -0.544, -0.548, -0.552, -0.56, - -0.552, -0.556, -0.568, -0.56, -0.56, -0.552, -0.552, -0.556, -0.556, -0.536, - -0.528, -0.536, -0.56, -0.564, -0.556, -0.544, -0.536, -0.54, -0.568, -0.56, - -0.552, -0.54, -0.544, -0.56, -0.568, -0.552, -0.544, -0.548, -0.548, -0.56, - -0.556, -0.544, -0.552, -0.56, -0.556, -0.56, -0.568, -0.564, -0.56, -0.548, - -0.556, -0.56, -0.568, -0.572, -0.564, -0.56, -0.556, -0.552, -0.568, -0.56, - -0.564, -0.56 - ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - }, - { - "ID": 1705437876740, - "name": "Shake", - "recordings": [ - { - "ID": 1705438034019, - "data": { - "x": [ - -0.148, -0.388, -0.552, -0.64, -0.544, -0.616, -0.528, -0.612, -0.536, -0.456, - -0.532, -0.672, -0.796, -0.836, -0.716, -0.756, -0.916, -0.956, -1.032, -1.1, - -1.228, -1.284, -1.312, -1.36, -1.356, -1.296, -1.224, -1.096, -0.844, -0.964, - -0.948, -0.984, -0.896, -0.884, -0.884, -0.772, -0.64, -0.508, -0.388, -0.348, - -0.392, -0.392, -0.396, -0.344, -0.3, -0.264, -0.28, -0.252, -0.2, -0.22, - -0.236, -0.244, -0.208, -0.188, -0.22, -0.252, -0.244, -0.288, -0.36, -0.476, - -0.496, -0.472, -0.452, -0.504, -0.552, -0.576, -0.532, -0.532, -0.608, - -0.652, -0.668, -0.652, -0.764, -0.892, -0.92, -0.864, -0.848, -0.884, -0.872, - -0.848, -0.888, -0.952, -0.992, -1.02, -1.084, -1.068, -0.952, -0.82, -0.748, - -0.732, -0.84 - ], - "y": [ - 0.48, 0.444, 0.34, 0.376, 0.392, 0.424, 0.44, 0.42, 0.416, 0.42, 0.392, 0.376, - 0.352, 0.384, 0.348, 0.284, 0.22, 0.204, 0.284, 0.28, 0.2, 0.152, 0.128, 0.16, - 0.144, 0.108, 0.06, 0.072, 0.02, 0.224, 0.284, 0.372, 0.284, 0.348, 0.412, - 0.408, 0.376, 0.36, 0.396, 0.452, 0.484, 0.424, 0.36, 0.296, 0.296, 0.296, - 0.312, 0.34, 0.356, 0.332, 0.344, 0.344, 0.344, 0.336, 0.336, 0.332, 0.336, - 0.324, 0.308, 0.328, 0.328, 0.316, 0.304, 0.28, 0.284, 0.296, 0.328, 0.348, - 0.348, 0.348, 0.392, 0.428, 0.432, 0.432, 0.452, 0.424, 0.38, 0.356, 0.384, - 0.392, 0.336, 0.272, 0.28, 0.328, 0.348, 0.304, 0.256, 0.224, 0.24, 0.292, - 0.324 - ], - "z": [ - -0.764, -0.612, -0.512, -0.524, -0.512, -0.404, -0.344, -0.372, -0.388, - -0.396, -0.328, -0.252, -0.18, -0.208, -0.228, -0.22, -0.204, -0.272, -0.308, - -0.308, -0.388, -0.424, -0.512, -0.592, -0.66, -0.696, -0.772, -0.812, -0.968, - -0.948, -1.02, -1.168, -1.064, -1.072, -1.128, -1.148, -1.128, -1.148, -1.164, - -1.12, -1.108, -1.12, -1.156, -1.248, -1.26, -1.196, -1.124, -1.008, -0.96, - -0.924, -0.896, -0.848, -0.796, -0.728, -0.708, -0.68, -0.636, -0.556, -0.532, - -0.5, -0.48, -0.456, -0.412, -0.384, -0.364, -0.384, -0.392, -0.356, -0.364, - -0.388, -0.376, -0.388, -0.42, -0.408, -0.416, -0.376, -0.372, -0.368, -0.412, - -0.464, -0.492, -0.516, -0.58, -0.584, -0.68, -0.768, -0.848, -0.876, -0.924, - -0.976, -0.972 - ] - } - }, - { - "ID": 1705438029559, - "data": { - "x": [ - -0.4, -0.504, -0.556, -0.656, -0.988, -0.568, -0.644, -0.664, -0.644, -0.536, - -0.496, -0.776, -0.804, -0.888, -0.868, -0.904, -0.94, -0.912, -0.888, -0.816, - -0.836, -0.872, -0.844, -0.848, -0.832, -0.792, -0.756, -0.74, -0.692, -0.684, - -0.664, -0.636, -0.624, -0.592, -0.568, -0.532, -0.516, -0.412, -0.412, - -0.364, -0.292, -0.2, -0.164, -0.1, -0.1, -0.072, -0.048, 0.004, -0.02, 0.068, - -0.004, -0.072, -0.124, -0.188, -0.192, -0.172, -0.152, -0.172, -0.264, - -0.292, -0.312, -0.288, -0.276, -0.348, -0.48, -0.612, -0.552, -0.576, -0.676, - -0.804, -0.876, -0.864, -0.856, -0.844, -0.836, -0.836, -0.864, -0.92, -0.924, - -0.856, -0.792, -0.744, -0.672, -0.664, -0.644, -0.66, -0.68, -0.724, -0.716, - -0.668, -0.588, -0.508 - ], - "y": [ - 0.228, 0.248, 0.252, 0.252, 0.192, 0.132, 0.2, 0.28, 0.364, 0.276, 0.132, - 0.216, 0.24, 0.296, 0.26, 0.228, 0.26, 0.268, 0.304, 0.232, 0.232, 0.256, - 0.24, 0.232, 0.276, 0.268, 0.268, 0.304, 0.292, 0.296, 0.296, 0.292, 0.304, - 0.312, 0.3, 0.304, 0.328, 0.308, 0.32, 0.348, 0.368, 0.352, 0.356, 0.328, - 0.304, 0.308, 0.32, 0.3, 0.324, 0.24, 0.184, 0.26, 0.276, 0.28, 0.216, 0.224, - 0.24, 0.248, 0.232, 0.196, 0.184, 0.22, 0.232, 0.196, 0.212, 0.188, 0.18, - 0.176, 0.152, 0.144, 0.14, 0.176, 0.184, 0.18, 0.184, 0.18, 0.184, 0.216, - 0.252, 0.188, 0.2, 0.18, 0.208, 0.244, 0.252, 0.248, 0.244, 0.236, 0.244, - 0.276, 0.248, 0.236 - ], - "z": [ - -1.18, -1.18, -1.12, -1.32, -0.928, -1.048, -1.18, -1.024, -1.224, -1.064, - -1.008, -1.02, -0.888, -0.88, -0.812, -0.78, -0.736, -0.696, -0.672, -0.712, - -0.784, -0.516, -0.64, -0.54, -0.524, -0.536, -0.524, -0.484, -0.468, -0.516, - -0.54, -0.596, -0.624, -0.6, -0.596, -0.6, -0.624, -0.632, -0.656, -0.632, - -0.7, -0.744, -0.76, -0.768, -0.788, -0.816, -0.904, -0.908, -1.012, -0.996, - -0.78, -1.112, -1.06, -1, -1.06, -1.1, -1.136, -1.184, -1.216, -1.264, -1.24, - -1.228, -1.228, -1.172, -1.16, -1.068, -1.12, -1.112, -1.068, -1.064, -0.996, - -1.008, -0.976, -0.924, -0.88, -0.864, -0.824, -0.796, -0.808, -0.812, -0.74, - -0.76, -0.72, -0.744, -0.728, -0.704, -0.692, -0.636, -0.644, -0.656, -0.676, - -0.616 - ] - } - }, - { - "ID": 1705438027130, - "data": { - "x": [ - -0.064, -0.104, -0.14, -0.208, -0.3, -0.316, -0.428, -0.564, -0.456, -0.532, - -0.676, -0.74, -0.728, -0.692, -0.792, -1.024, -1.076, -1.056, -0.968, -0.9, - -0.912, -0.86, -0.876, -0.872, -0.848, -0.848, -0.8, -0.788, -0.748, -0.728, - -0.636, -0.56, -0.532, -0.504, -0.492, -0.432, -0.424, -0.464, -0.428, -0.408, - -0.336, -0.296, -0.252, -0.24, -0.248, -0.28, -0.22, -0.204, -0.128, 0, - -0.168, -0.136, -0.064, -0.088, -0.148, -0.228, -0.26, -0.296, -0.352, -0.392, - -0.376, -0.352, -0.364, -0.436, -0.46, -0.496, -0.52, -0.596, -0.628, -0.624, - -0.628, -0.668, -0.792, -0.808, -0.812, -0.824, -0.84, -0.864, -0.888, -0.924, - -0.936, -0.88, -0.848, -0.888, -0.88, -0.832, -0.768, -0.724, -0.68, -0.664, - -0.664, -0.62, -0.572 - ], - "y": [ - 0.228, 0.212, 0.224, 0.236, 0.192, 0.204, 0.208, 0.34, 0.208, 0.184, 0.164, - 0.148, 0.144, 0.104, 0.064, 0.132, 0.104, 0.124, 0.14, 0.188, 0.208, 0.212, - 0.24, 0.224, 0.212, 0.24, 0.256, 0.288, 0.296, 0.308, 0.324, 0.316, 0.32, - 0.316, 0.348, 0.348, 0.312, 0.308, 0.3, 0.3, 0.276, 0.248, 0.232, 0.252, - 0.248, 0.152, 0.172, 0.204, 0.18, -0.08, 0.176, 0.156, 0.136, 0.16, 0.18, - 0.208, 0.224, 0.204, 0.18, 0.188, 0.2, 0.188, 0.184, 0.168, 0.16, 0.14, 0.108, - 0.104, 0.112, 0.084, 0.052, 0.004, 0.056, 0.056, 0.096, 0.084, 0.092, 0.12, - 0.1, 0.14, 0.152, 0.164, 0.156, 0.184, 0.212, 0.224, 0.228, 0.228, 0.236, - 0.268, 0.276, 0.284, 0.296 - ], - "z": [ - -0.908, -0.98, -0.956, -1.076, -1.096, -1.176, -1.12, -1.06, -1.124, -1.176, - -1.12, -1.112, -1.064, -1.06, -1.024, -0.984, -1.012, -0.964, -0.904, -0.824, - -0.816, -0.748, -0.7, -0.676, -0.64, -0.628, -0.568, -0.56, -0.528, -0.468, - -0.492, -0.488, -0.48, -0.492, -0.472, -0.532, -0.544, -0.6, -0.644, -0.656, - -0.704, -0.732, -0.764, -0.776, -0.82, -0.68, -0.912, -0.988, -0.868, -1.148, - -1.056, -1.152, -1.072, -1.12, -1.088, -1.092, -1.092, -1.152, -1.208, -1.208, - -1.18, -1.172, -1.2, -1.192, -1.184, -1.18, -1.104, -1.076, -1.072, -1.028, - -1.028, -0.984, -0.944, -0.968, -0.96, -0.964, -0.964, -0.952, -0.904, -0.856, - -0.808, -0.788, -0.756, -0.696, -0.708, -0.652, -0.672, -0.64, -0.62, -0.584, - -0.604, -0.592, -0.588 - ] - } - }, - { - "ID": 1705437979405, - "data": { - "x": [ - 0.24, 0.22, 0.104, -0.036, -0.1, -0.096, -0.152, -0.22, -0.256, -0.204, - -0.256, -0.056, -0.028, -0.076, -0.108, -0.088, -0.068, -0.136, -0.28, -0.392, - -0.468, -0.508, -0.52, -0.516, -0.476, -0.46, -0.464, -0.516, -0.616, -0.648, - -0.6, -0.52, -0.48, -0.468, -0.468, -0.46, -0.432, -0.404, -0.392, -0.304, - -0.256, -0.208, -0.204, -0.292, -0.388, -0.488, -0.544, -0.656, -0.736, - -0.792, -0.776, -0.716, -0.668, -0.572, -0.504, -0.484, -0.456, -0.404, -0.38, - -0.356, -0.34, -0.328, -0.324, -0.276, -0.2, -0.148, -0.128, -0.136, -0.104, - 0.016, 0.152, 0.268, 0.244, 0.168, 0.128, 0.096, 0.096, 0.092, 0.04, 0, - -0.028, -0.004, 0.128, 0.184, 0.276, 0.348, 0.364, 0.312, 0.188, 0.036, -0.06, - -0.156, -0.248 - ], - "y": [ - 0.488, 0.44, 0.364, 0.304, 0.268, 0.272, 0.416, 0.436, 0.408, 0.364, 0.364, - 0.216, 0.224, 0.264, 0.26, 0.248, 0.288, 0.344, 0.388, 0.392, 0.392, 0.364, - 0.344, 0.332, 0.308, 0.304, 0.316, 0.336, 0.34, 0.336, 0.312, 0.296, 0.312, - 0.336, 0.336, 0.34, 0.34, 0.364, 0.372, 0.38, 0.376, 0.316, 0.292, 0.308, - 0.296, 0.324, 0.44, 0.54, 0.584, 0.624, 0.708, 0.728, 0.74, 0.748, 0.716, - 0.68, 0.624, 0.592, 0.564, 0.536, 0.524, 0.504, 0.48, 0.464, 0.444, 0.428, - 0.416, 0.408, 0.42, 0.408, 0.412, 0.38, 0.388, 0.408, 0.436, 0.448, 0.436, - 0.448, 0.44, 0.464, 0.452, 0.456, 0.312, 0.424, 0.376, 0.388, 0.36, 0.336, - 0.348, 0.368, 0.412, 0.484, 0.5 - ], - "z": [ - -0.996, -0.96, -0.964, -0.896, -0.82, -0.696, -0.552, -0.52, -0.568, -0.652, - -0.652, -1.104, -1.196, -1.4, -1.516, -1.58, -1.54, -1.456, -1.364, -1.312, - -1.248, -1.208, -1.172, -1.112, -1.072, -1.032, -1.004, -0.996, -1.036, - -1.056, -1.032, -0.996, -0.932, -0.868, -0.864, -0.824, -0.808, -0.764, - -0.708, -0.652, -0.624, -0.632, -0.644, -0.628, -0.612, -0.616, -0.692, - -0.788, -0.884, -0.932, -0.956, -0.936, -0.852, -0.824, -0.812, -0.788, - -0.784, -0.74, -0.732, -0.7, -0.668, -0.64, -0.6, -0.56, -0.552, -0.56, -0.56, - -0.556, -0.528, -0.56, -0.616, -0.7, -0.78, -0.844, -0.88, -0.884, -0.92, - -0.96, -1, -1.004, -0.956, -1.008, -1.024, -1.092, -1.076, -1.092, -1.132, - -1.152, -1.148, -1.132, -1.088, -1.084, -1.06 - ] - } - }, - { - "ID": 1705437977128, - "data": { - "x": [ - -0.084, -0.124, -0.188, -0.112, -0.264, -0.244, -0.092, 0.12, 0.228, 0.16, - 0.316, 0.296, 0.224, -0.084, -0.28, -0.372, -0.372, -0.352, -0.42, -0.596, - -0.792, -0.7, -0.612, -0.696, -0.82, -0.82, -0.824, -0.8, -0.868, -0.968, - -0.94, -0.852, -0.756, -0.684, -0.632, -0.516, -0.456, -0.396, -0.436, -0.476, - -0.416, -0.364, -0.296, -0.292, -0.304, -0.332, -0.324, -0.272, -0.208, - -0.156, -0.112, -0.08, -0.008, 0.016, 0.04, 0.092, 0.14, 0.16, 0.136, 0.144, - 0.168, 0.176, 0.152, 0.236, 0.304, 0.248, 0.22, 0.12, 0.044, 0.04, 0.128, - 0.156, 0.108, -0.044, -0.188, -0.248, -0.256, -0.408, -0.516, -0.484, -0.404, - -0.396, -0.504, -0.592, -0.636, -0.64, -0.636, -0.596, -0.58, -0.52, -0.428 - ], - "y": [ - 0.3, 0.304, 0.392, 0.324, 0.236, 0.268, 0.268, 0.36, 0.256, 0.332, 0.316, 0.5, - 0.288, 0.336, 0.392, 0.448, 0.452, 0.46, 0.46, 0.5, 0.52, 0.44, 0.44, 0.464, - 0.488, 0.464, 0.456, 0.484, 0.536, 0.584, 0.604, 0.584, 0.62, 0.608, 0.58, - 0.56, 0.564, 0.576, 0.592, 0.58, 0.532, 0.492, 0.444, 0.444, 0.452, 0.476, - 0.456, 0.44, 0.4, 0.376, 0.352, 0.356, 0.324, 0.316, 0.296, 0.332, 0.348, - 0.38, 0.392, 0.436, 0.452, 0.384, 0.34, 0.3, 0.236, 0.208, 0.22, 0.232, 0.212, - 0.244, 0.28, 0.308, 0.32, 0.312, 0.332, 0.352, 0.34, 0.372, 0.392, 0.392, - 0.352, 0.34, 0.332, 0.36, 0.436, 0.372, 0.396, 0.412, 0.464, 0.416, 0.428 - ], - "z": [ - -0.652, -0.644, -0.74, -0.748, -0.732, -0.756, -0.924, -0.8, -0.828, -0.816, - -0.872, -0.832, -1.012, -0.992, -1.04, -1.124, -1.144, -1.18, -1.196, -1.236, - -1.2, -1.244, -1.228, -1.112, -1.104, -1.084, -1.04, -0.964, -0.888, -0.856, - -0.772, -0.696, -0.62, -0.564, -0.6, -0.592, -0.536, -0.48, -0.432, -0.448, - -0.48, -0.484, -0.516, -0.464, -0.456, -0.452, -0.46, -0.46, -0.504, -0.544, - -0.62, -0.668, -0.76, -0.8, -0.808, -0.844, -0.832, -0.804, -0.788, -0.816, - -0.84, -0.876, -1, -1.048, -1.356, -1.068, -1.184, -1.252, -1.392, -1.36, - -1.32, -1.256, -1.204, -1.208, -1.248, -1.24, -1.22, -1.212, -1.184, -1.152, - -1.108, -1.084, -1.08, -1.092, -1.184, -1.136, -1.084, -1.044, -1, -1, -1.012 - ] - } - }, - { - "ID": 1705437922352, - "data": { - "x": [ - -0.244, -0.216, -0.076, -0.112, -0.196, -0.184, -0.136, -0.044, 0.064, 0.064, - -0.088, -0.244, -0.416, -0.452, -0.48, -0.516, -0.568, -0.688, -0.728, -0.772, - -0.784, -0.768, -0.732, -0.696, -0.648, -0.576, -0.544, -0.52, -0.504, -0.492, - -0.492, -0.484, -0.436, -0.388, -0.376, -0.352, -0.32, -0.268, -0.252, -0.244, - -0.248, -0.22, -0.208, -0.212, -0.212, -0.18, -0.208, -0.252, -0.32, -0.356, - -0.332, -0.252, -0.228, -0.236, -0.212, -0.148, -0.116, -0.112, -0.088, - -0.056, -0.056, -0.04, 0.032, 0.076, 0.004, -0.148, -0.188, -0.176, -0.176, - -0.264, -0.412, -0.476, -0.42, -0.344, -0.32, -0.312, -0.376, -0.46, -0.436, - -0.348, -0.26, -0.268, -0.376, -0.484, -0.508, -0.5, -0.512, -0.492, -0.488, - -0.456, -0.436, -0.448, -0.46 - ], - "y": [ - 0.664, 0.58, 0.64, 0.796, 0.9, 0.844, 0.764, 0.792, 0.788, 0.78, 0.884, 1.036, - 1.16, 1.228, 1.248, 1.252, 1.264, 1.292, 1.26, 1.264, 1.236, 1.188, 1.176, - 1.136, 1.124, 1.06, 1.004, 0.964, 0.964, 1.008, 1.036, 1.004, 1.004, 1, 0.992, - 0.98, 0.94, 0.92, 0.896, 0.884, 0.884, 0.852, 0.816, 0.792, 0.792, 0.764, - 0.76, 0.728, 0.712, 0.724, 0.728, 0.728, 0.72, 0.7, 0.708, 0.728, 0.708, - 0.696, 0.732, 0.752, 0.76, 0.752, 0.756, 0.684, 0.668, 0.752, 0.9, 0.96, - 0.932, 0.892, 0.94, 1, 1.028, 1.04, 1.04, 1.044, 1.052, 1.06, 1.02, 0.98, - 0.932, 0.916, 0.928, 0.96, 0.996, 0.98, 1.024, 1.028, 1, 0.968, 0.924, 0.928, - 0.9 - ], - "z": [ - -0.524, -0.62, -0.732, -0.652, -0.576, -0.608, -0.648, -0.796, -0.868, -0.848, - -0.744, -0.648, -0.604, -0.576, -0.568, -0.528, -0.504, -0.444, -0.416, -0.38, - -0.36, -0.316, -0.26, -0.2, -0.152, -0.136, -0.116, -0.116, -0.108, -0.044, - -0.004, 0.036, 0.072, 0.072, 0.064, 0.072, 0.068, 0.076, 0.08, 0.088, 0.104, - 0.096, 0.092, 0.068, -0.008, -0.084, -0.092, -0.144, -0.184, -0.224, -0.272, - -0.324, -0.332, -0.352, -0.404, -0.436, -0.452, -0.484, -0.492, -0.532, -0.56, - -0.612, -0.688, -0.74, -0.744, -0.688, -0.624, -0.608, -0.628, -0.656, -0.672, - -0.524, -0.46, -0.468, -0.532, -0.596, -0.604, -0.6, -0.644, -0.66, -0.748, - -0.752, -0.76, -0.676, -0.608, -0.508, -0.392, -0.34, -0.296, -0.304, -0.344, - -0.372, -0.38 - ] - } - }, - { - "ID": 1705437913803, - "data": { - "x": [ - 0.864, 0.94, 1.108, 1.224, 1.232, 1.22, 1.212, 1.228, 1.012, 0.944, 0.86, - 0.804, 0.788, 0.76, 0.732, 0.68, 0.64, 0.676, 0.496, 0.356, 0.204, 0.044, - -0.02, -0.008, -0.028, -0.072, -0.184, -0.324, -0.488, -0.536, -0.488, -0.404, - -0.4, -0.448, -0.316, -0.34, -0.516, -0.652, -0.548, -0.376, -0.444, -0.496, - -0.496, -0.428, -0.344, -0.724, -0.196, 0.044, 0.112, 0.248, 0.328, 0.392, - 0.372, 0.34, 0.296, 0.22, 0.192, 0.212, 0.228, 0.32, 0.332, 0.38, 0.416, - 0.456, 0.5, 0.516, 0.508, 0.496, 0.46, 0.448, 0.444, 0.424, 0.34, 0.324, - 0.344, 0.252, 0.228, 0.18, 0.088, 0.016, 0.012, 0.016, 0.004, -0.024, -0.108, - -0.16, -0.212, -0.316, -0.412, -0.42, -0.38, -0.296, -0.244 - ], - "y": [ - 0.056, 0.036, 0.02, -0.044, -0.104, -0.136, -0.152, 0.064, -0.228, -0.192, - -0.224, -0.2, -0.216, -0.2, -0.188, -0.184, -0.164, -0.08, -0.044, -0.004, - 0.068, 0.176, 0.236, 0.24, 0.232, 0.244, 0.308, 0.36, 0.396, 0.424, 0.4, - 0.368, 0.348, 0.388, 0.36, 0.328, 0.3, 0.332, 0.344, 0.244, 0.068, -0.096, - -0.092, -0.06, -0.02, 0.452, -0.112, -0.112, -0.032, 0.056, 0.152, 0.096, - 0.06, 0.072, 0.072, 0.18, 0.236, 0.212, 0.136, 0.1, 0.092, 0.108, 0.108, - 0.076, 0.04, 0.028, 0.052, 0.096, 0.124, 0.088, 0.064, 0.056, 0.148, 0.26, - 0.304, 0.272, 0.26, 0.308, 0.34, 0.416, 0.452, 0.404, 0.428, 0.456, 0.52, - 0.536, 0.528, 0.552, 0.604, 0.648, 0.696, 0.64, 0.596 - ], - "z": [ - -1.236, -1.128, -0.992, -0.916, -0.844, -0.796, -0.724, -0.672, -0.576, - -0.496, -0.552, -0.448, -0.472, -0.452, -0.38, -0.312, -0.28, -0.18, -0.248, - -0.324, -0.428, -0.468, -0.464, -0.432, -0.48, -0.524, -0.58, -0.66, -0.78, - -0.808, -0.784, -0.732, -0.76, -0.744, -0.744, -0.8, -0.904, -1.032, -1.076, - -1.14, -1.3, -1.504, -1.62, -1.652, -1.604, -1.556, -1.52, -1.432, -1.252, - -1.08, -1.064, -1.1, -1.1, -1.048, -1.044, -1.064, -1.132, -1.184, -1.24, - -1.332, -1.292, -1.268, -1.232, -1.224, -1.18, -1.14, -1.088, -1.016, -0.892, - -0.832, -0.812, -0.836, -0.82, -0.792, -0.748, -0.708, -0.764, -0.736, -0.712, - -0.68, -0.668, -0.68, -0.66, -0.672, -0.656, -0.636, -0.64, -0.692, -0.724, - -0.752, -0.768, -0.772, -0.792 - ] - } - }, - { - "ID": 1705437908508, - "data": { - "x": [ - -0.432, -0.432, -0.404, -0.48, -0.588, -0.9, -0.752, -0.852, -1.02, -1.108, - -1.044, -0.944, -0.888, -0.876, -0.852, -0.756, -0.828, -0.868, -0.908, - -0.928, -0.84, -0.756, -0.66, -0.576, -0.512, -0.484, -0.424, -0.42, -0.436, - -0.408, -0.352, -0.272, -0.216, -0.208, -0.236, -0.188, -0.148, -0.104, - -0.084, -0.08, -0.076, -0.064, -0.08, -0.108, -0.132, -0.188, -0.232, -0.212, - -0.212, -0.288, -0.384, -0.392, -0.372, -0.348, -0.388, -0.528, -0.732, -0.76, - -0.684, -0.732, -0.9, -1.032, -1.092, -1.004, -0.98, -1, -0.972, -0.992, -1, - -1.06, -1.084, -1.052, -1.012, -0.996, -0.904, -0.796, -0.692, -0.564, -0.404, - -0.388, -0.312, -0.32, -0.324, -0.324, -0.364, -0.428, -0.484, -0.508, -0.496, - -0.508, -0.508, -0.508, -0.496 - ], - "y": [ - 0.68, 0.644, 0.576, 0.52, 0.496, 0.492, 0.548, 0.68, 0.704, 0.696, 0.712, - 0.772, 0.804, 0.82, 0.812, 0.84, 0.888, 0.948, 0.94, 0.96, 0.96, 0.972, 0.96, - 0.924, 0.916, 0.888, 0.9, 0.904, 0.88, 0.86, 0.876, 0.832, 0.824, 0.8, 0.74, - 0.716, 0.692, 0.672, 0.628, 0.572, 0.604, 0.608, 0.608, 0.592, 0.572, 0.564, - 0.54, 0.528, 0.54, 0.544, 0.512, 0.512, 0.524, 0.536, 0.524, 0.536, 0.468, - 0.472, 0.492, 0.52, 0.564, 0.596, 0.692, 0.748, 0.764, 0.748, 0.812, 0.876, - 0.872, 0.816, 0.8, 0.86, 0.904, 0.892, 0.892, 0.912, 0.932, 0.936, 0.824, 1, - 0.844, 0.86, 0.832, 0.808, 0.788, 0.776, 0.78, 0.76, 0.756, 0.776, 0.772, - 0.772, 0.776 - ], - "z": [ - -0.252, -0.272, -0.324, -0.252, -0.216, -0.104, -0.072, -0.012, -0.036, - -0.128, -0.248, -0.308, -0.364, -0.424, -0.408, -0.572, -0.464, -0.508, - -0.468, -0.504, -0.452, -0.464, -0.496, -0.58, -0.664, -0.72, -0.704, -0.744, - -0.784, -0.856, -0.884, -0.94, -0.856, -0.84, -0.86, -0.864, -0.832, -0.788, - -0.744, -0.744, -0.716, -0.648, -0.556, -0.516, -0.468, -0.38, -0.312, -0.272, - -0.228, -0.184, -0.16, -0.144, -0.108, -0.048, -0.044, -0.004, 0.02, -0.012, - 0.044, 0.1, 0.144, 0.152, 0.156, 0.128, 0.104, 0.116, 0.172, 0.148, 0.088, - 0.032, -0.032, -0.092, -0.188, -0.34, -0.452, -0.548, -0.592, -0.684, -0.652, - -0.912, -0.672, -0.604, -0.6, -0.584, -0.564, -0.504, -0.504, -0.496, -0.484, - -0.472, -0.46, -0.456, -0.448 - ] - } - }, - { - "ID": 1705437905957, - "data": { - "x": [ - -0.436, -0.42, -0.432, -0.388, -0.36, -0.22, -0.12, -0.156, -0.336, -0.496, - -0.56, -0.6, -0.684, -0.856, -1.036, -1.14, -1.048, -0.908, -0.884, -0.936, - -1.016, -1.056, -1.06, -1.024, -1.028, -1.04, -0.964, -0.872, -0.824, -0.796, - -0.832, -0.868, -0.804, -0.716, -0.64, -0.608, -0.584, -0.572, -0.544, -0.512, - -0.516, -0.5, -0.476, -0.464, -0.448, -0.444, -0.444, -0.364, -0.28, -0.212, - -0.228, -0.312, -0.392, -0.4, -0.376, -0.332, -0.256, -0.232, -0.244, -0.244, - -0.26, -0.396, -0.552, -0.68, -0.836, -0.888, -0.852, -0.928, -0.972, -1.004, - -0.976, -0.928, -0.92, -0.94, -0.952, -0.904, -0.848, -0.828, -0.856, -0.844, - -0.804, -0.78, -0.764, -0.764, -0.732, -0.712, -0.712, -0.692, -0.688, -0.692, - -0.64, -0.6, -0.588 - ], - "y": [ - 0.54, 0.504, 0.48, 0.512, 0.524, 0.6, 0.752, 0.936, 0.916, 0.936, 0.92, 0.992, - 0.992, 1.028, 1.056, 1.072, 1.064, 1.016, 0.976, 0.908, 0.856, 0.848, 0.812, - 0.796, 0.784, 0.792, 0.78, 0.752, 0.744, 0.732, 0.724, 0.708, 0.7, 0.692, - 0.672, 0.672, 0.68, 0.652, 0.644, 0.64, 0.628, 0.6, 0.56, 0.552, 0.516, 0.496, - 0.492, 0.472, 0.508, 0.524, 0.556, 0.592, 0.632, 0.664, 0.66, 0.712, 0.768, - 0.808, 0.812, 0.848, 0.876, 0.908, 0.932, 0.984, 1.012, 1.02, 1.004, 0.968, - 0.916, 0.86, 0.868, 0.816, 0.784, 0.74, 0.72, 0.692, 0.684, 0.676, 0.7, 0.712, - 0.732, 0.74, 0.764, 0.788, 0.776, 0.756, 0.776, 0.764, 0.752, 0.732, 0.716, - 0.724, 0.712 - ], - "z": [ - -0.288, -0.312, -0.356, -0.36, -0.44, -0.7, -0.964, -0.852, -0.704, -0.612, - -0.592, -0.588, -0.524, -0.468, -0.368, -0.364, -0.364, -0.356, -0.328, - -0.288, -0.248, -0.256, -0.296, -0.292, -0.232, -0.204, -0.176, -0.148, - -0.132, -0.072, -0.004, 0.08, 0.132, 0.164, 0.188, 0.216, 0.204, 0.164, 0.088, - 0.032, 0.044, 0.04, 0.068, 0.06, 0.016, -0.048, -0.124, -0.208, -0.296, - -0.404, -0.428, -0.4, -0.38, -0.408, -0.512, -0.624, -0.7, -0.712, -0.76, - -0.8, -0.872, -0.88, -0.824, -0.684, -0.6, -0.528, -0.468, -0.384, -0.292, - -0.272, -0.28, -0.3, -0.296, -0.276, -0.3, -0.32, -0.34, -0.372, -0.388, - -0.376, -0.396, -0.412, -0.404, -0.376, -0.38, -0.368, -0.364, -0.396, -0.4, - -0.38, -0.356, -0.32, -0.328 - ] - } - }, - { - "ID": 1705437896254, - "data": { - "x": [ - -0.632, -0.608, -0.592, -0.584, -0.644, -0.868, -0.492, -0.528, -0.712, - -0.784, -0.708, -0.588, -0.632, -0.752, -0.876, -0.852, -0.808, -0.84, -0.944, - -0.936, -0.9, -0.936, -1.02, -1.104, -1.084, -1.076, -1.048, -1.048, -1.112, - -1.144, -1.188, -1.208, -1.228, -1.288, -1.296, -1.264, -1.2, -1.18, -1.132, - -1.02, -0.956, -0.912, -0.872, -0.848, -0.824, -0.876, -0.892, -0.844, -0.808, - -0.732, -0.716, -0.78, -0.852, -0.76, -0.62, -0.588, -0.636, -0.632, -0.564, - -0.52, -0.508, -0.52, -0.484, -0.412, -0.432, -0.428, -0.444, -0.496, -0.48, - -0.452, -0.46, -0.508, -0.516, -0.512, -0.448, -0.4, -0.404, -0.46, -0.532, - -0.568, -0.484, -0.38, -0.444, -0.572, -0.728, -0.728, -0.616, -0.644, -0.656, - -0.704, -0.688, -0.644, -0.652 - ], - "y": [ - 0.364, 0.344, 0.352, 0.38, 0.396, 0.604, 0.4, 0.428, 0.468, 0.48, 0.472, - 0.436, 0.42, 0.408, 0.42, 0.424, 0.38, 0.304, 0.26, 0.244, 0.244, 0.232, - 0.184, 0.176, 0.112, 0.128, 0.14, 0.12, 0.092, 0.072, 0.056, 0.076, 0.104, - 0.124, 0.14, 0.164, 0.2, 0.216, 0.224, 0.248, 0.28, 0.308, 0.324, 0.348, 0.38, - 0.404, 0.408, 0.408, 0.384, 0.372, 0.356, 0.372, 0.3, 0.284, 0.352, 0.372, - 0.38, 0.364, 0.412, 0.32, 0.36, 0.32, 0.308, 0.276, 0.332, 0.34, 0.324, 0.344, - 0.372, 0.368, 0.368, 0.408, 0.464, 0.476, 0.44, 0.424, 0.468, 0.484, 0.496, - 0.468, 0.46, 0.484, 0.5, 0.504, 0.464, 0.448, 0.432, 0.396, 0.352, 0.34, 0.32, - 0.32, 0.316 - ], - "z": [ - -0.524, -0.552, -0.576, -0.58, -0.58, -0.724, -0.484, -0.496, -0.556, -0.524, - -0.552, -0.58, -0.648, -0.732, -0.784, -0.596, -0.644, -0.72, -0.756, -0.744, - -0.724, -0.7, -0.684, -0.716, -0.716, -0.68, -0.668, -0.656, -0.708, -0.736, - -0.696, -0.712, -0.684, -0.7, -0.688, -0.644, -0.596, -0.556, -0.572, -0.552, - -0.524, -0.496, -0.472, -0.504, -0.464, -0.368, -0.412, -0.42, -0.42, -0.436, - -0.372, -0.352, -0.352, -0.4, -0.372, -0.336, -0.292, -0.376, -0.392, -0.444, - -0.456, -0.436, -0.504, -0.56, -0.58, -0.62, -0.68, -0.716, -0.76, -0.76, - -0.768, -0.764, -0.792, -0.784, -0.76, -0.74, -0.728, -0.66, -0.7, -0.756, - -0.86, -0.776, -0.76, -0.812, -0.876, -0.872, -0.908, -0.96, -0.976, -0.996, - -1.032, -0.976, -0.96 - ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - }, - { - "ID": 1705437793875, - "name": "Still", - "recordings": [ - { - "ID": 1705437992143, - "data": { - "x": [ - -0.112, -0.356, -0.62, -0.892, -1.508, -1.848, -2.04, -2.04, -1.868, -1.3, - -0.824, -0.48, 0.256, 0.752, 0.864, -0.044, -0.908, -1.716, -2.04, -2.008, - -1.856, -1.336, -0.84, 0.192, 0.58, 0.504, -0.008, -0.232, -1.132, -2.04, - -2.04, -2.04, -1.012, -0.48, 0.028, 0.256, 0.608, 0.332, -0.004, -0.876, - -2.04, -2.04, -2.04, -1.688, -1.396, -0.828, -0.032, 0.36, 0.492, 0.288, - 0.008, -0.492, -1.368, -2.04, -2.04, -1.828, -1.368, -0.668, -0.248, 0.108, - 0.664, 0.544, 0.248, -0.404, -1.388, -2.04, -2.04, -1.86, -1.372, -1.072, - -0.612, 0.16, 0.52, 0.488, 0.256, -0.144, -0.752, -1.732, -2.04, -2.04, - -1.668, -1.208, -0.884, -0.556, 0.024, 0.48, 0.556, 0.248, -0.096, -0.9, - -2.04, -2.04, -1.992 - ], - "y": [ - 0.436, 0.416, 0.308, 0.168, 0.148, -0.056, 0.352, 0.356, 0.3, 0.244, 0.324, - 0.264, 0.16, 0.396, 0.456, 0.208, 0.244, 0.252, 0.312, 0.396, 0.328, 0.364, - 0.204, 0.188, 0.548, 0.536, 0.388, 0.22, 0.052, 0.54, 1.076, -0.116, 0.048, - 0.132, 0.448, 0.528, 0.608, 0.6, 0.412, 0.152, 0.524, 0.416, 0.252, 0.308, - 0.376, 0.316, 0.356, 0.644, 0.672, 0.544, 0.404, 0.164, 0.208, 0.624, 0.536, - 0.256, 0.272, 0.404, 0.492, 0.5, 0.712, 0.656, 0.568, 0.264, 0.296, 0.496, - 0.284, 0.28, 0.288, 0.42, 0.492, 0.488, 0.616, 0.684, 0.588, 0.396, 0.232, - 0.452, 0.98, 0.484, 0.36, 0.372, 0.544, 0.48, 0.496, 0.6, 0.692, 0.528, 0.288, - 0.204, 0.476, 1.112, 0.2 - ], - "z": [ - -0.576, -0.592, -0.516, -0.38, -0.368, 0.208, -0.028, 0.048, 0.008, -0.096, - -0.288, -0.396, -0.516, -0.556, -0.312, -0.056, -0.168, -0.108, 0.196, 0.268, - 0.1, -0.16, -0.32, -0.64, -0.692, -0.56, -0.26, -0.092, -0.204, 0.304, 0.78, - 0.364, 0.108, -0.24, -0.528, -0.608, -0.552, -0.208, -0.048, -0.14, 0.42, - 0.552, 0.42, 0.128, 0.276, -0.332, -0.648, -0.648, -0.544, -0.212, 0.036, - -0.004, -0.148, 0.304, 0.212, 0.344, 0.352, 0.064, -0.572, -0.628, -0.616, - -0.276, -0.008, -0.18, -0.044, 0.012, 0.368, 0.32, 0.372, -0.092, -0.288, - -0.608, -0.712, -0.432, -0.252, -0.024, 0.044, -0.052, 0.4, 0.504, 0.196, - -0.016, -0.172, -0.308, -0.66, -0.72, -0.52, -0.268, -0.072, -0.176, 0.136, - 0.34, 0.7 - ] - } - }, - { - "ID": 1705437989960, - "data": { - "x": [ - -0.4, 0.232, 0.708, 1.068, 1.284, 1.36, 1.02, 0.816, 0.332, -0.152, -1.496, - -2.04, -2.04, -1.14, -0.968, -0.648, 0.232, 1, 1.34, 1.32, 0.864, 0.256, - -0.696, -1.884, -2.04, -2.04, -1.62, -1.028, -0.196, 0.42, 0.608, 0.488, - 0.168, -0.528, -1.488, -2.028, -2.04, -2.04, -1.588, -1.08, -0.512, -0.028, - 0.216, 0.268, 0.052, -0.38, -0.684, -0.788, -1.056, -1.768, -2.04, -2.04, - -1.344, -0.8, -0.436, -0.172, 0.22, 0.456, -0.124, -0.504, -0.864, -1.14, - -1.544, -2.02, -2.016, -1.52, -1.004, -0.456, -0.156, 0.064, 0.128, -0.204, - -0.46, -0.816, -1.22, -1.596, -1.884, -1.816, -1.44, -0.948, -0.516, -0.196, - 0.06, 0.124, -0.16, -0.504, -0.72, -0.928, -1.42, -1.8, -2.032, -1.76 - ], - "y": [ - 0.592, 0.364, 0.128, -0.004, -0.06, -0.156, -0.04, 0.08, 0.284, 0.456, 0.188, - 1.104, 0.9, 0.6, 0.536, 0.388, 0.34, 0.316, 0.292, 0.32, 0.252, 0.208, 0.152, - 0.3, 0.792, 0.776, 0.748, 0.588, 0.44, 0.372, 0.4, 0.424, 0.376, 0.296, 0.448, - 0.596, 0.644, 0.732, 0.58, 0.496, 0.46, 0.444, 0.568, 0.56, 0.456, 0.408, - 0.38, 0.284, 0.22, 0.352, 0.792, 0.636, 0.452, 0.456, 0.468, 0.392, 0.376, - 0.348, 0.34, 0.396, 0.456, 0.364, 0.432, 0.704, 0.728, 0.584, 0.416, 0.424, - 0.428, 0.432, 0.288, 0.3, 0.368, 0.392, 0.436, 0.512, 0.684, 0.664, 0.556, - 0.496, 0.472, 0.456, 0.444, 0.7, 0.304, 0.36, 0.292, 0.276, 0.328, 0.536, - 0.78, 0.7 - ], - "z": [ - -1.196, -0.908, -0.712, -0.556, -0.44, -0.42, -0.548, -0.512, -0.596, -0.696, - -1.364, -0.26, -0.592, -0.788, -0.876, -0.84, -0.888, -0.948, -0.972, -1.192, - -1.148, -0.808, -0.636, -0.42, 0.076, 0.42, 0.124, -0.224, -0.572, -0.924, - -1.032, -0.972, -0.656, -0.708, -0.492, -0.096, 0.428, 0.548, 0.196, -0.012, - -0.364, -0.744, -0.996, -1.08, -1.448, -1.444, -1.136, -0.652, -0.104, 0.528, - 1.116, 0.88, 0.384, 0.048, -0.348, -0.804, -1.34, -1.604, -1.624, -1.3, -0.7, - -0.116, 0.544, 0.996, 0.784, 0.448, 0.084, -0.468, -0.964, -1.508, -1.86, - -1.5, -1.08, -0.54, 0.112, 0.68, 1.224, 1.028, 0.66, 0.256, -0.24, -0.712, - -1.24, -1.232, -1.604, -1.456, -1.004, -0.428, 0.18, 0.576, 1.292, 0.92 - ] - } - }, - { - "ID": 1705437987590, - "data": { - "x": [ - -1.464, -1.144, -0.92, -0.696, -0.22, -0.016, 0.168, 0.384, 0.552, 0.872, - 1.164, 1.284, 1.192, 0.904, 0.38, -1.068, -1.9, -0.784, -0.312, -0.144, 0.076, - 0.36, 0.812, 1.116, 1.18, 1.072, 0.752, 0.004, -1.244, -0.88, -0.372, -0.04, - 0.252, 0.616, 1.016, 1.332, 1.296, 1.068, 0.748, 0.384, -0.748, -1.776, -0.68, - -0.312, -0.052, 0.396, 0.932, 1.264, 1.364, 1.144, 0.84, 0.328, -0.696, - -1.504, -0.78, -0.38, -0.1, 0.244, 0.608, 0.86, 1.172, 1.436, 1.492, 1.268, - 0.784, -0.5, -1.484, -0.62, -0.272, -0.128, 0.324, 0.716, 1.168, 1.568, 1.692, - 1.452, 0.88, -0.108, -1.46, -1.128, -0.616, -0.432, 0.008, 0.68, 1.264, 1.68, - 1.804, 1.496, 0.884, -0.14, -1.08, -0.852 - ], - "y": [ - 0.668, 0.576, 0.556, 0.508, 0.36, 0.472, 0.384, 0.34, 0.24, 0.124, 0.068, - 0.052, 0.052, 0.12, 0.02, 0.124, 0.836, 0.556, 0.612, 0.62, 0.588, 0.452, - 0.304, 0.26, 0.108, 0.096, 0.108, -0.108, 0.072, 0.372, 0.344, 0.456, 0.368, - 0.3, 0.316, 0.332, 0.272, 0.204, 0.196, 0.104, 0, 0.484, 0.416, 0.384, 0.356, - 0.32, 0.216, 0.244, 0.284, 0.208, 0.196, 0.136, -0.06, 0.52, 0.34, 0.332, - 0.336, 0.26, 0.224, 0.184, 0.104, 0.116, 0.132, 0.116, 0.084, 0.068, 0.588, - 0.42, 0.396, 0.364, 0.272, 0.196, 0.044, -0.008, 0.02, 0, 0.048, -0.02, 0.428, - 0.592, 0.552, 0.524, 0.324, 0.128, -0.1, -0.128, -0.068, -0.052, 0.044, 0.08, - 0.352, 0.632 - ], - "z": [ - -0.148, -0.472, -0.476, -0.388, -0.684, -0.404, -0.46, -0.38, -0.36, -0.384, - -0.572, -0.792, -1.084, -1.36, -1.62, -2.04, -1.748, -1.216, -0.844, -0.48, - -0.168, 0.036, 0.048, -0.032, -0.232, -0.596, -1.076, -1.596, -1.952, -2.016, - -1.496, -1.008, -0.52, -0.216, -0.04, 0.04, -0.06, -0.324, -0.676, -1.124, - -1.784, -2.04, -1.748, -1.408, -0.936, -0.444, -0.108, 0.104, 0.088, -0.116, - -0.396, -0.836, -1.608, -2.04, -1.964, -1.612, -1.184, -0.764, -0.46, -0.156, - 0.112, 0.204, 0.056, -0.304, -0.76, -1.54, -2.04, -2.04, -1.768, -1.204, - -0.708, -0.244, 0.152, 0.332, 0.264, -0.024, -0.424, -0.984, -1.7, -2.04, - -1.984, -1.372, -0.764, -0.296, 0.084, 0.216, 0.12, -0.136, -0.472, -0.992, - -1.876, -2.04 - ] - } - }, - { - "ID": 1705437985014, - "data": { - "x": [ - -0.392, -0.532, -0.452, -0.576, -0.748, -0.908, -0.984, -1.12, -1.04, -0.82, - -0.668, -0.184, 0.18, 0.428, 0.816, 1.248, 1.38, 1.188, 0.936, 0.456, 0.132, - -0.5, -1.94, -2.04, -2.04, -1.536, -0.74, -0.38, 0.056, 0.4, 0.984, 1.208, - 0.812, 0.396, -0.2, -1.508, -2.024, -1.576, -0.732, -0.212, 0.252, 0.536, - 0.776, 0.716, 0.46, -0.036, -1.18, -1.752, -1.272, -0.952, -0.592, -0.348, - 0.148, 0.316, 0.884, 0.832, 0.688, 0.452, -0.216, -1.084, -1.94, -1.252, - -0.792, -0.544, -0.16, 0.284, 0.676, 0.672, 0.56, 0.34, -0.036, -0.916, - -2.036, -1.516, -0.892, -0.536, -0.256, -0.068, 0.256, 0.528, 0.584, 0.452, - 0.124, -0.424, -1.404, -1.912, -1.208, -0.78, -0.54, -0.264, 0.076, 0.544, - 0.528 - ], - "y": [ - 0.328, 0.336, 0.336, 0.304, 0.328, 0.38, 0.396, 0.384, 0.348, 0.46, 0.512, - 0.408, 0.348, 0.18, -0.028, -0.08, -0.036, 0.02, 0.136, 0.164, 0.048, -0.22, - 0.464, 1.092, 1.044, 0.812, 0.496, 0.348, 0.236, 0.132, 0.064, 0.124, 0.152, - 0.304, 0.248, 0.896, 1.34, 1.08, 0.76, 0.636, 0.436, 0.244, 0.224, 0.176, - 0.236, 0.24, 0.66, 1.26, 1.124, 1.04, 0.784, 0.572, 0.008, 0.272, 0.068, - 0.124, 0.192, 0.244, 0.564, 0.636, 1.372, 0.976, 0.904, 0.68, 0.416, 0.036, - 0.076, 0.092, 0.208, 0.348, 0.412, 0.768, 1.088, 1, 0.844, 0.708, 0.54, 0.424, - 0.228, 0.196, 0.116, 0.232, 0.34, 0.492, 0.84, 1.196, 0.956, 0.844, 0.672, - 0.496, 0.26, 0.232, 0.228 - ], - "z": [ - -0.932, -0.884, -1.076, -0.972, -0.776, -0.744, -0.856, -0.884, -0.892, - -0.844, -0.744, -0.572, -0.504, -0.576, -0.668, -1, -1.204, -1.144, -1.044, - -0.832, -0.664, -1.024, -0.46, 0.276, -0.064, -0.16, -0.476, -0.416, -0.764, - -0.892, -1.332, -1.872, -1.152, -0.744, -0.904, -0.704, -0.028, -0.296, - -0.256, -0.592, -0.848, -1, -1.404, -1.22, -1.3, -0.76, -0.848, 0.028, -0.14, - -0.14, -0.3, -0.576, -1.052, -0.276, -2.04, -1.556, -1.308, -1.328, -0.572, - -0.492, -0.212, 0.076, -0.28, -0.44, -0.688, -0.856, -1.768, -1.464, -1.268, - -0.9, -0.588, -0.46, -0.352, -0.18, -0.328, -0.404, -0.576, -0.9, -1.328, - -1.48, -1.444, -1.12, -0.704, -0.876, -0.452, -0.156, -0.256, -0.28, -0.424, - -0.608, -0.652, -1.504, -1.412 - ] - } - }, - { - "ID": 1705437822437, - "data": { - "x": [ - -0.684, -0.688, -0.672, -0.668, -0.628, -0.564, -0.576, -0.7, -0.896, -0.96, - -1.016, -0.888, -0.752, -0.564, -0.46, -0.36, -0.288, -0.204, -0.12, -0.164, - -0.248, -0.236, -0.088, -0.644, -1.068, -0.812, -0.644, -0.56, -0.372, -0.292, - -0.272, -0.076, -0.04, -0.08, -0.172, -0.288, -0.276, -0.06, -0.532, -1.132, - -0.828, -0.72, -0.712, -0.368, -0.296, -0.34, -0.28, -0.216, -0.164, -0.18, - -0.272, -0.408, -0.644, -0.764, -0.732, -0.636, -0.62, -0.524, -0.344, -0.16, - -0.032, -0.088, -0.136, -0.224, -0.252, -0.18, -0.484, -0.872, -0.844, -0.72, - -0.624, -0.572, -0.48, -0.392, -0.356, -0.292, -0.244, -0.208, -0.288, -0.372, - -0.364, -0.216, -0.464, -1.016, -0.904, -0.956, -0.812, -0.564, -0.632, - -0.468, -0.34, -0.272 - ], - "y": [ - 0.1, 0.048, 0.028, 0.24, 0.336, 0.376, 0.208, -0.328, -1.1, -1.368, -1.216, - -0.936, -0.488, -0.032, 0.468, 1.056, 1.708, 1.856, 1.896, 1.692, 1.224, - 0.592, -0.744, -2.04, -2.04, -2.04, -1.404, -0.66, -0.204, 0.568, 0.92, 1.304, - 1.768, 1.876, 1.5, 1.056, 0.596, -0.508, -2.04, -2.04, -2.032, -1.288, -0.796, - 0.108, 1.112, 1.588, 1.832, 1.832, 1.588, 1.176, 0.232, -0.968, -2.04, -2.04, - -2.04, -1.68, -1.08, -0.388, 0.248, 1.02, 1.704, 2.04, 1.98, 1.488, 0.868, - -0.08, -1.912, -2.04, -2.04, -1.916, -1.296, -0.684, 0.088, 0.532, 0.92, - 1.156, 1.348, 1.58, 1.616, 1.312, 0.816, -0.012, -2.04, -2.04, -2.04, -2.004, - -1.492, -0.904, 0.028, 0.564, 0.976, 1.292 - ], - "z": [ - -0.736, -0.788, -0.756, -0.768, -0.796, -0.908, -0.936, -1.024, -0.764, - -0.412, -0.34, -0.408, -0.56, -0.62, -0.624, -0.896, -1.092, -1.164, -1.144, - -0.992, -0.844, -0.808, -0.736, -0.016, 0.356, -0.172, -0.32, -0.58, -0.672, - -0.952, -0.988, -1.092, -1.16, -1.104, -1.032, -0.924, -0.872, -0.736, -0.256, - 0.276, -0.392, -0.444, -0.476, -0.656, -1.124, -1.136, -1.156, -1.18, -1.004, - -0.884, -0.812, -0.664, -0.508, -0.284, -0.312, -0.392, -0.5, -0.64, -0.84, - -1.172, -1.3, -1.352, -1.128, -0.968, -0.836, -0.764, -0.5, -0.152, -0.372, - -0.372, -0.432, -0.612, -0.892, -1.08, -1.212, -1.324, -1.208, -0.992, -0.828, - -0.744, -0.86, -0.872, -0.732, 0.012, 0.256, -0.084, -0.124, -0.208, -0.512, - -0.816, -1.18, -1.332 - ] - } - }, - { - "ID": 1705437819739, - "data": { - "x": [ - -0.268, -0.048, 0.06, 0.028, -0.108, -0.3, -0.412, -0.536, -0.668, -0.928, - -1.18, -1.26, -0.86, -0.372, 0.344, 0.564, 0.548, 0.392, 0.14, -0.124, -0.264, - -0.324, -0.376, -0.636, -1.312, -1.216, -1.036, -0.744, -0.256, 0.188, 0.132, - 0.112, 0.164, 0.008, -0.132, -0.22, -0.28, -0.504, -0.924, -1.192, -1.176, - -0.988, -0.648, -0.088, 0.08, 0.212, 0.104, 0.144, 0.008, -0.112, -0.264, - -0.336, -0.312, -0.468, -0.856, -1.132, -1.12, -0.932, -0.692, -0.384, -0.084, - 0.132, 0.064, 0.02, 0.016, -0.116, -0.212, -0.288, -0.28, -0.468, -1.032, - -1.404, -1.112, -0.844, -0.616, -0.22, -0.044, -0.132, -0.22, -0.088, -0.164, - -0.252, -0.32, -0.368, -0.432, -0.604, -0.876, -1.016, -1, -0.92, -0.848 - ], - "y": [ - -0.22, -0.116, -0.016, 0.048, 0.056, 0, -0.02, 0.036, 0.056, -0.256, -1.256, - -1.636, -1.248, -0.856, -0.344, 0.048, 0.54, 1.044, 1.216, 1.132, 0.848, - 0.468, -0.156, -1.38, -1.892, -1.296, -0.94, -0.836, -0.496, -0.092, 0.288, - 0.664, 0.7, 0.648, 0.716, 0.6, 0.232, -0.704, -1.436, -1.448, -1.124, -0.968, - -0.736, -0.62, 0.052, 0.148, 0.328, 0.54, 0.572, 0.564, 0.544, 0.32, -0.064, - -0.828, -1.444, -1.42, -1.224, -0.952, -0.748, -0.524, -0.44, -0.744, 0.068, - 0.456, 0.816, 0.788, 0.824, 0.536, 0.124, -0.688, -1.372, -1.516, -0.964, - -0.58, -0.488, -0.46, -0.132, 0.264, 0.432, 0.58, 0.7, 0.624, 0.556, 0.312, - 0.036, -0.832, -1.244, -1.18, -0.9, -0.764, -0.8 - ], - "z": [ - -1.448, -1.808, -2.04, -2.04, -1.684, -1.22, -0.936, -0.54, 0.412, 1.76, 2.04, - 1.732, 0.708, -0.084, -1.284, -2.04, -2.04, -2.04, -2.04, -1.44, -1.12, -0.88, - -0.312, 0.328, 0.988, 1.404, 1.352, 0.476, -0.152, -1.276, -2.04, -2.04, - -2.04, -2.04, -1.668, -1.176, -0.596, -0.04, 0.844, 1.492, 1.636, 1.064, - 0.636, -0.136, -1.344, -2.04, -2.04, -2.04, -2.04, -1.82, -1.36, -1.044, - -0.616, 0.18, 0.912, 1.432, 1.756, 1.2, 0.528, 0.064, -0.612, -1.708, -2.04, - -2.04, -2.04, -1.932, -1.668, -1.3, -0.744, -0.032, 0.692, 1.284, 1.32, 0.712, - 0.16, -0.344, -1.06, -2.04, -2.04, -2.04, -2.04, -1.692, -1.396, -1.04, - -0.636, 0.04, 0.568, 0.784, 0.948, 1.012, 0.68 - ] - } - }, - { - "ID": 1705437816208, - "data": { - "x": [ - -0.692, -0.644, -0.548, -0.516, -0.74, -0.872, -0.26, 0.108, 0.268, 0.436, - 0.248, -0.04, -0.224, -0.272, -0.176, 0.316, -0.408, -1.336, -1.112, -0.712, - -0.52, -0.432, -0.188, 0.088, 0.148, 0.028, -0.072, -0.164, -0.204, -0.144, - 0.252, -0.232, -1.312, -1.132, -0.92, -0.764, -0.432, -0.072, 0.096, 0.184, - 0.156, 0.052, -0.02, -0.068, 0.136, -0.276, -1.244, -1.136, -0.996, -0.872, - -0.576, -0.328, -0.172, -0.084, -0.072, -0.08, -0.168, -0.22, -0.128, -0.112, - -1.036, -1.22, -1.008, -0.856, -0.688, -0.368, -0.196, -0.036, 0.052, 0.092, - 0.076, 0.04, -0.084, -0.212, -0.168, 0.124, -0.724, -1.376, -1.048, -0.872, - -0.776, -0.608, -0.324, -0.128, -0.004, 0.024, 0.024, -0.008, -0.12, -0.248, - -0.384, -0.356 - ], - "y": [ - -1.164, -1.268, -1.532, -1.984, -2.04, -2.04, -1.672, -0.532, 0.236, 1.008, - 1.736, 2.012, 1.868, 1.056, 0.692, -0.156, -2.04, -2.04, -2.04, -2.04, -1.464, - -0.956, -0.604, 0.364, 1.252, 1.812, 2.04, 1.88, 1.476, 0.836, -0.228, -2.04, - -2.04, -2.04, -2.024, -1.712, -1.132, -0.2, 0.816, 1.624, 2.04, 2.04, 1.904, - 1.084, 0.184, -2.04, -2.04, -2.04, -1.536, -1.236, -0.616, 0, 0.796, 1.36, - 1.648, 1.532, 1.3, 0.904, 0.28, -1.288, -2.04, -2.04, -1.864, -1.692, -1.2, - -0.572, 0.008, 0.548, 1.228, 1.792, 2.02, 1.8, 1.408, 1.012, 0.528, -0.748, - -2.04, -2.04, -1.896, -1.128, -1.06, -0.936, -0.468, 0.244, 0.868, 1.392, - 1.772, 1.712, 1.304, 0.924, 0.544, 0.144 - ], - "z": [ - -0.116, -0.136, -0.024, 0.108, 0.696, 0.724, 0.424, 0.18, 0.196, -0.072, - -0.788, -1.488, -1.564, -0.98, -0.712, -0.504, -0.528, 0.736, 0.544, 0.124, - -0.104, -0.204, -0.084, -0.356, -0.752, -1.048, -1.136, -1, -0.92, -0.82, - -0.736, -0.34, 0.824, 0.26, -0.084, -0.072, -0.176, -0.42, -0.6, -0.852, - -1.132, -1.308, -1.16, -0.968, -0.868, -0.744, 0.668, 0.048, -0.156, -0.248, - -0.364, -0.6, -0.932, -1.116, -1.224, -1.196, -1.16, -1.044, -0.884, -0.748, - 0.392, 0.376, -0.156, -0.228, -0.268, -0.54, -0.74, -0.784, -0.816, -0.92, - -1.024, -0.984, -0.904, -0.868, -0.86, -1.072, 0.016, 0.704, -0.076, -0.348, - -0.336, -0.372, -0.38, -0.628, -0.84, -0.964, -1.06, -1.116, -1.044, -0.972, - -0.912, -0.944 - ] - } - }, - { - "ID": 1705437808407, - "data": { - "x": [ - -0.756, -0.972, -0.836, -0.82, -0.832, -0.728, -0.904, -0.376, -0.464, -0.328, - -0.112, 0.084, 0.172, 0.292, 0.404, 0.356, 0.3, 0.116, 0.068, -0.084, -0.348, - -0.396, -0.628, -0.752, -0.744, -0.856, -0.82, -0.808, -0.688, -0.572, -0.436, - -0.308, -0.324, -0.068, 0.184, 0.24, 0.276, 0.268, 0.284, 0.26, 0.028, 0.016, - -0.224, -0.472, -0.54, -0.612, -0.764, -0.916, -0.976, -0.984, -0.94, -0.844, - -0.8, -0.524, -0.432, -0.256, -0.1, 0.124, 0.208, 0.284, 0.272, 0.288, 0.232, - 0.152, 0.004, -0.28, -0.408, -0.656, -0.836, -1.068, -1.036, -1.016, -0.952, - -0.844, -0.724, -0.68, -0.796, -0.564, -0.34, -0.208, -0.104, 0.052, 0.168, - 0.292, 0.42, 0.408, 0.436, 0.352, 0.164, -0.04, -0.352, -0.488 - ], - "y": [ - 0.668, 0.968, 0.696, 0.572, 0.688, 0.628, 0.932, 0.596, 0.836, 0.78, 0.556, - 0.52, 0.492, 0.38, 0.452, 0.304, 0.08, 0.144, 0.264, 0.184, 0.144, 0.472, - 0.904, 1.004, 0.752, 0.7, 0.808, 1.032, 0.988, 0.676, 0.524, 0.688, 0.664, - 0.536, 0.4, 0.304, 0.256, 0.276, 0.32, 0.296, 0.408, 0.18, 0.468, 0.744, - 0.724, 0.684, 0.88, 1.072, 1.108, 1, 0.912, 0.816, 0.912, 0.756, 0.728, 0.668, - 0.5, 0.404, 0.364, 0.368, 0.372, 0.364, 0.424, 0.356, 0.316, 0.532, 0.62, - 0.908, 1.184, 1.192, 1.028, 0.988, 1.188, 1.344, 1.268, 0.952, 0.816, 0.824, - 0.812, 0.78, 0.704, 0.56, 0.428, 0.328, 0.26, 0.256, 0.104, 0.172, 0.096, - 0.452, 0.732, 0.976 - ], - "z": [ - -1.704, -1.86, -1.568, -1.4, -1.512, -1.552, -1.24, -1.304, -1.22, -0.76, - -0.304, -0.084, 0.088, 0.2, 0.396, 0.468, 0.192, -0.008, -0.492, -0.796, - -0.96, -1.336, -1.768, -1.676, -1.424, -1.296, -1.3, -1.488, -1.508, -1.12, - -1.056, -0.924, -0.6, -0.18, -0.084, -0.008, -0.012, 0, 0.016, 0.028, -0.012, - -0.3, -0.692, -1.236, -1.444, -1.212, -1.236, -1.4, -1.524, -1.456, -1.54, - -1.524, -1.288, -0.888, -0.58, -0.268, -0.092, -0.04, 0.02, 0.104, 0.14, - 0.144, 0.18, 0.116, -0.116, -0.504, -0.78, -0.996, -1.284, -1.42, -1.38, - -1.304, -1.312, -1.304, -1.288, -1.24, -1.036, -0.704, -0.484, -0.292, -0.132, - -0.004, 0.032, 0.156, 0.248, 0.28, 0.22, 0.092, -0.144, -0.56, -1.076, -1.304 - ] - } - }, - { - "ID": 1705437804840, - "data": { - "x": [ - 0.42, 0.624, 0.688, 0.412, 0.552, 0.592, 0.532, 0.592, 0.292, -0.084, -0.284, - -0.044, -0.428, 0.824, 1.172, 0.508, 0.428, 0.344, 0.512, 0, -0.616, 0.156, - 0.232, 0.268, 0.78, 0.636, 0.428, 0.688, 0.764, 0.416, 0.432, 0.444, 0.32, - 0.312, 0.348, 0.32, 0.472, 0.292, 0.092, 0.268, 0.348, 0.424, 0.508, 0.716, - 0.708, 0.684, 0.516, 0.46, 0.3, 0.084, 0.08, 0.108, -0.036, -0.012, 0.088, - 0.032, 0.092, 0.136, 0.252, 0.032, 0.36, 0.476, 0.656, 0.744, 0.72, 0.692, - 0.62, 0.572, 0.464, 0.248, -0.016, 0.096, -0.18, -0.176, -0.004, -0.04, 0.112, - 0.22, 0.024, 0.02, 0.136, 0.208, 0.136, 0.448, 0.764, 0.808, 0.752, 0.72, 0.7, - 0.48, 0.304, 0.052 - ], - "y": [ - -1.136, -1.324, -0.948, -1, -1.404, -1.46, -1.192, -0.868, -0.432, 0.144, - 0.528, 0.496, 1.672, 2.04, 2.04, 2.04, 2.04, 1.416, 1.6, 1.212, 0.732, -1.24, - -0.648, -0.616, -1.356, -1.124, -0.792, -0.728, -0.816, -0.044, 0.556, 1.332, - 1.496, 1.224, 1.184, 1.48, 1.644, 1.06, 0.524, 0.012, -0.1, -0.472, -0.9, - -1.224, -1.252, -1.116, -1.024, -0.592, -0.216, 0.372, 1.112, 1.648, 2.008, - 1.844, 1.728, 1.544, 1.108, 0.768, 0.512, 0.396, -0.436, -0.692, -0.892, - -0.976, -0.912, -0.756, -0.58, -0.432, -0.296, -0.108, 0.472, 1.108, 1.772, - 1.7, 1.284, 1.516, 1.564, 1.552, 0.992, 0.436, 0.384, 0.356, -0.376, -0.936, - -1.132, -1.172, -0.964, -0.828, -0.592, -0.408, -0.208, 0.248 - ], - "z": [ - -0.468, -0.332, -0.256, 0.184, -0.152, -0.46, -0.5, -0.568, -0.408, -0.296, - -0.144, -0.636, -1.18, -1.696, -0.276, -0.22, 0.472, 0.252, -0.284, -0.884, - -0.368, -0.308, -0.66, -0.488, -1.112, -1.176, -0.8, -0.732, -0.292, -0.34, - -0.56, -0.452, -0.856, -0.984, -1.1, -0.888, -0.752, -0.66, -0.652, -0.716, - -0.632, -0.48, -0.452, -0.532, -0.684, -0.684, -0.568, -0.404, -0.608, -0.8, - -1.24, -1, -0.872, -0.684, -0.516, -0.828, -0.7, -0.732, -0.432, -0.452, - -0.54, -0.552, -0.868, -0.7, -0.56, -0.56, -0.772, -0.772, -0.792, -0.796, - -1.1, -0.88, -0.996, -0.608, -0.492, -0.436, -0.648, -0.608, -0.6, -0.716, - -0.628, -0.592, -0.848, -0.792, -0.816, -0.768, -0.604, -0.56, -0.504, -0.652, - -0.704, -0.916 - ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - } -] diff --git a/src/__tests__/fixtures/gesture-data.json b/src/__tests__/fixtures/gesture-data.json deleted file mode 100644 index a8f9852be..000000000 --- a/src/__tests__/fixtures/gesture-data.json +++ /dev/null @@ -1,1024 +0,0 @@ -[ - { - "ID": 1705437793875, - "name": "Shake", - "recordings": [ - { - "ID": 1705437992143, - "data": { - "x": [ - -0.112, -0.356, -0.62, -0.892, -1.508, -1.848, -2.04, -2.04, -1.868, -1.3, - -0.824, -0.48, 0.256, 0.752, 0.864, -0.044, -0.908, -1.716, -2.04, -2.008, - -1.856, -1.336, -0.84, 0.192, 0.58, 0.504, -0.008, -0.232, -1.132, -2.04, - -2.04, -2.04, -1.012, -0.48, 0.028, 0.256, 0.608, 0.332, -0.004, -0.876, - -2.04, -2.04, -2.04, -1.688, -1.396, -0.828, -0.032, 0.36, 0.492, 0.288, - 0.008, -0.492, -1.368, -2.04, -2.04, -1.828, -1.368, -0.668, -0.248, 0.108, - 0.664, 0.544, 0.248, -0.404, -1.388, -2.04, -2.04, -1.86, -1.372, -1.072, - -0.612, 0.16, 0.52, 0.488, 0.256, -0.144, -0.752, -1.732, -2.04, -2.04, - -1.668, -1.208, -0.884, -0.556, 0.024, 0.48, 0.556, 0.248, -0.096, -0.9, - -2.04, -2.04, -1.992 - ], - "y": [ - 0.436, 0.416, 0.308, 0.168, 0.148, -0.056, 0.352, 0.356, 0.3, 0.244, 0.324, - 0.264, 0.16, 0.396, 0.456, 0.208, 0.244, 0.252, 0.312, 0.396, 0.328, 0.364, - 0.204, 0.188, 0.548, 0.536, 0.388, 0.22, 0.052, 0.54, 1.076, -0.116, 0.048, - 0.132, 0.448, 0.528, 0.608, 0.6, 0.412, 0.152, 0.524, 0.416, 0.252, 0.308, - 0.376, 0.316, 0.356, 0.644, 0.672, 0.544, 0.404, 0.164, 0.208, 0.624, 0.536, - 0.256, 0.272, 0.404, 0.492, 0.5, 0.712, 0.656, 0.568, 0.264, 0.296, 0.496, - 0.284, 0.28, 0.288, 0.42, 0.492, 0.488, 0.616, 0.684, 0.588, 0.396, 0.232, - 0.452, 0.98, 0.484, 0.36, 0.372, 0.544, 0.48, 0.496, 0.6, 0.692, 0.528, 0.288, - 0.204, 0.476, 1.112, 0.2 - ], - "z": [ - -0.576, -0.592, -0.516, -0.38, -0.368, 0.208, -0.028, 0.048, 0.008, -0.096, - -0.288, -0.396, -0.516, -0.556, -0.312, -0.056, -0.168, -0.108, 0.196, 0.268, - 0.1, -0.16, -0.32, -0.64, -0.692, -0.56, -0.26, -0.092, -0.204, 0.304, 0.78, - 0.364, 0.108, -0.24, -0.528, -0.608, -0.552, -0.208, -0.048, -0.14, 0.42, - 0.552, 0.42, 0.128, 0.276, -0.332, -0.648, -0.648, -0.544, -0.212, 0.036, - -0.004, -0.148, 0.304, 0.212, 0.344, 0.352, 0.064, -0.572, -0.628, -0.616, - -0.276, -0.008, -0.18, -0.044, 0.012, 0.368, 0.32, 0.372, -0.092, -0.288, - -0.608, -0.712, -0.432, -0.252, -0.024, 0.044, -0.052, 0.4, 0.504, 0.196, - -0.016, -0.172, -0.308, -0.66, -0.72, -0.52, -0.268, -0.072, -0.176, 0.136, - 0.34, 0.7 - ] - } - }, - { - "ID": 1705437989960, - "data": { - "x": [ - -0.4, 0.232, 0.708, 1.068, 1.284, 1.36, 1.02, 0.816, 0.332, -0.152, -1.496, - -2.04, -2.04, -1.14, -0.968, -0.648, 0.232, 1, 1.34, 1.32, 0.864, 0.256, - -0.696, -1.884, -2.04, -2.04, -1.62, -1.028, -0.196, 0.42, 0.608, 0.488, - 0.168, -0.528, -1.488, -2.028, -2.04, -2.04, -1.588, -1.08, -0.512, -0.028, - 0.216, 0.268, 0.052, -0.38, -0.684, -0.788, -1.056, -1.768, -2.04, -2.04, - -1.344, -0.8, -0.436, -0.172, 0.22, 0.456, -0.124, -0.504, -0.864, -1.14, - -1.544, -2.02, -2.016, -1.52, -1.004, -0.456, -0.156, 0.064, 0.128, -0.204, - -0.46, -0.816, -1.22, -1.596, -1.884, -1.816, -1.44, -0.948, -0.516, -0.196, - 0.06, 0.124, -0.16, -0.504, -0.72, -0.928, -1.42, -1.8, -2.032, -1.76 - ], - "y": [ - 0.592, 0.364, 0.128, -0.004, -0.06, -0.156, -0.04, 0.08, 0.284, 0.456, 0.188, - 1.104, 0.9, 0.6, 0.536, 0.388, 0.34, 0.316, 0.292, 0.32, 0.252, 0.208, 0.152, - 0.3, 0.792, 0.776, 0.748, 0.588, 0.44, 0.372, 0.4, 0.424, 0.376, 0.296, 0.448, - 0.596, 0.644, 0.732, 0.58, 0.496, 0.46, 0.444, 0.568, 0.56, 0.456, 0.408, - 0.38, 0.284, 0.22, 0.352, 0.792, 0.636, 0.452, 0.456, 0.468, 0.392, 0.376, - 0.348, 0.34, 0.396, 0.456, 0.364, 0.432, 0.704, 0.728, 0.584, 0.416, 0.424, - 0.428, 0.432, 0.288, 0.3, 0.368, 0.392, 0.436, 0.512, 0.684, 0.664, 0.556, - 0.496, 0.472, 0.456, 0.444, 0.7, 0.304, 0.36, 0.292, 0.276, 0.328, 0.536, - 0.78, 0.7 - ], - "z": [ - -1.196, -0.908, -0.712, -0.556, -0.44, -0.42, -0.548, -0.512, -0.596, -0.696, - -1.364, -0.26, -0.592, -0.788, -0.876, -0.84, -0.888, -0.948, -0.972, -1.192, - -1.148, -0.808, -0.636, -0.42, 0.076, 0.42, 0.124, -0.224, -0.572, -0.924, - -1.032, -0.972, -0.656, -0.708, -0.492, -0.096, 0.428, 0.548, 0.196, -0.012, - -0.364, -0.744, -0.996, -1.08, -1.448, -1.444, -1.136, -0.652, -0.104, 0.528, - 1.116, 0.88, 0.384, 0.048, -0.348, -0.804, -1.34, -1.604, -1.624, -1.3, -0.7, - -0.116, 0.544, 0.996, 0.784, 0.448, 0.084, -0.468, -0.964, -1.508, -1.86, - -1.5, -1.08, -0.54, 0.112, 0.68, 1.224, 1.028, 0.66, 0.256, -0.24, -0.712, - -1.24, -1.232, -1.604, -1.456, -1.004, -0.428, 0.18, 0.576, 1.292, 0.92 - ] - } - }, - { - "ID": 1705437987590, - "data": { - "x": [ - -1.464, -1.144, -0.92, -0.696, -0.22, -0.016, 0.168, 0.384, 0.552, 0.872, - 1.164, 1.284, 1.192, 0.904, 0.38, -1.068, -1.9, -0.784, -0.312, -0.144, 0.076, - 0.36, 0.812, 1.116, 1.18, 1.072, 0.752, 0.004, -1.244, -0.88, -0.372, -0.04, - 0.252, 0.616, 1.016, 1.332, 1.296, 1.068, 0.748, 0.384, -0.748, -1.776, -0.68, - -0.312, -0.052, 0.396, 0.932, 1.264, 1.364, 1.144, 0.84, 0.328, -0.696, - -1.504, -0.78, -0.38, -0.1, 0.244, 0.608, 0.86, 1.172, 1.436, 1.492, 1.268, - 0.784, -0.5, -1.484, -0.62, -0.272, -0.128, 0.324, 0.716, 1.168, 1.568, 1.692, - 1.452, 0.88, -0.108, -1.46, -1.128, -0.616, -0.432, 0.008, 0.68, 1.264, 1.68, - 1.804, 1.496, 0.884, -0.14, -1.08, -0.852 - ], - "y": [ - 0.668, 0.576, 0.556, 0.508, 0.36, 0.472, 0.384, 0.34, 0.24, 0.124, 0.068, - 0.052, 0.052, 0.12, 0.02, 0.124, 0.836, 0.556, 0.612, 0.62, 0.588, 0.452, - 0.304, 0.26, 0.108, 0.096, 0.108, -0.108, 0.072, 0.372, 0.344, 0.456, 0.368, - 0.3, 0.316, 0.332, 0.272, 0.204, 0.196, 0.104, 0, 0.484, 0.416, 0.384, 0.356, - 0.32, 0.216, 0.244, 0.284, 0.208, 0.196, 0.136, -0.06, 0.52, 0.34, 0.332, - 0.336, 0.26, 0.224, 0.184, 0.104, 0.116, 0.132, 0.116, 0.084, 0.068, 0.588, - 0.42, 0.396, 0.364, 0.272, 0.196, 0.044, -0.008, 0.02, 0, 0.048, -0.02, 0.428, - 0.592, 0.552, 0.524, 0.324, 0.128, -0.1, -0.128, -0.068, -0.052, 0.044, 0.08, - 0.352, 0.632 - ], - "z": [ - -0.148, -0.472, -0.476, -0.388, -0.684, -0.404, -0.46, -0.38, -0.36, -0.384, - -0.572, -0.792, -1.084, -1.36, -1.62, -2.04, -1.748, -1.216, -0.844, -0.48, - -0.168, 0.036, 0.048, -0.032, -0.232, -0.596, -1.076, -1.596, -1.952, -2.016, - -1.496, -1.008, -0.52, -0.216, -0.04, 0.04, -0.06, -0.324, -0.676, -1.124, - -1.784, -2.04, -1.748, -1.408, -0.936, -0.444, -0.108, 0.104, 0.088, -0.116, - -0.396, -0.836, -1.608, -2.04, -1.964, -1.612, -1.184, -0.764, -0.46, -0.156, - 0.112, 0.204, 0.056, -0.304, -0.76, -1.54, -2.04, -2.04, -1.768, -1.204, - -0.708, -0.244, 0.152, 0.332, 0.264, -0.024, -0.424, -0.984, -1.7, -2.04, - -1.984, -1.372, -0.764, -0.296, 0.084, 0.216, 0.12, -0.136, -0.472, -0.992, - -1.876, -2.04 - ] - } - }, - { - "ID": 1705437985014, - "data": { - "x": [ - -0.392, -0.532, -0.452, -0.576, -0.748, -0.908, -0.984, -1.12, -1.04, -0.82, - -0.668, -0.184, 0.18, 0.428, 0.816, 1.248, 1.38, 1.188, 0.936, 0.456, 0.132, - -0.5, -1.94, -2.04, -2.04, -1.536, -0.74, -0.38, 0.056, 0.4, 0.984, 1.208, - 0.812, 0.396, -0.2, -1.508, -2.024, -1.576, -0.732, -0.212, 0.252, 0.536, - 0.776, 0.716, 0.46, -0.036, -1.18, -1.752, -1.272, -0.952, -0.592, -0.348, - 0.148, 0.316, 0.884, 0.832, 0.688, 0.452, -0.216, -1.084, -1.94, -1.252, - -0.792, -0.544, -0.16, 0.284, 0.676, 0.672, 0.56, 0.34, -0.036, -0.916, - -2.036, -1.516, -0.892, -0.536, -0.256, -0.068, 0.256, 0.528, 0.584, 0.452, - 0.124, -0.424, -1.404, -1.912, -1.208, -0.78, -0.54, -0.264, 0.076, 0.544, - 0.528 - ], - "y": [ - 0.328, 0.336, 0.336, 0.304, 0.328, 0.38, 0.396, 0.384, 0.348, 0.46, 0.512, - 0.408, 0.348, 0.18, -0.028, -0.08, -0.036, 0.02, 0.136, 0.164, 0.048, -0.22, - 0.464, 1.092, 1.044, 0.812, 0.496, 0.348, 0.236, 0.132, 0.064, 0.124, 0.152, - 0.304, 0.248, 0.896, 1.34, 1.08, 0.76, 0.636, 0.436, 0.244, 0.224, 0.176, - 0.236, 0.24, 0.66, 1.26, 1.124, 1.04, 0.784, 0.572, 0.008, 0.272, 0.068, - 0.124, 0.192, 0.244, 0.564, 0.636, 1.372, 0.976, 0.904, 0.68, 0.416, 0.036, - 0.076, 0.092, 0.208, 0.348, 0.412, 0.768, 1.088, 1, 0.844, 0.708, 0.54, 0.424, - 0.228, 0.196, 0.116, 0.232, 0.34, 0.492, 0.84, 1.196, 0.956, 0.844, 0.672, - 0.496, 0.26, 0.232, 0.228 - ], - "z": [ - -0.932, -0.884, -1.076, -0.972, -0.776, -0.744, -0.856, -0.884, -0.892, - -0.844, -0.744, -0.572, -0.504, -0.576, -0.668, -1, -1.204, -1.144, -1.044, - -0.832, -0.664, -1.024, -0.46, 0.276, -0.064, -0.16, -0.476, -0.416, -0.764, - -0.892, -1.332, -1.872, -1.152, -0.744, -0.904, -0.704, -0.028, -0.296, - -0.256, -0.592, -0.848, -1, -1.404, -1.22, -1.3, -0.76, -0.848, 0.028, -0.14, - -0.14, -0.3, -0.576, -1.052, -0.276, -2.04, -1.556, -1.308, -1.328, -0.572, - -0.492, -0.212, 0.076, -0.28, -0.44, -0.688, -0.856, -1.768, -1.464, -1.268, - -0.9, -0.588, -0.46, -0.352, -0.18, -0.328, -0.404, -0.576, -0.9, -1.328, - -1.48, -1.444, -1.12, -0.704, -0.876, -0.452, -0.156, -0.256, -0.28, -0.424, - -0.608, -0.652, -1.504, -1.412 - ] - } - }, - { - "ID": 1705437822437, - "data": { - "x": [ - -0.684, -0.688, -0.672, -0.668, -0.628, -0.564, -0.576, -0.7, -0.896, -0.96, - -1.016, -0.888, -0.752, -0.564, -0.46, -0.36, -0.288, -0.204, -0.12, -0.164, - -0.248, -0.236, -0.088, -0.644, -1.068, -0.812, -0.644, -0.56, -0.372, -0.292, - -0.272, -0.076, -0.04, -0.08, -0.172, -0.288, -0.276, -0.06, -0.532, -1.132, - -0.828, -0.72, -0.712, -0.368, -0.296, -0.34, -0.28, -0.216, -0.164, -0.18, - -0.272, -0.408, -0.644, -0.764, -0.732, -0.636, -0.62, -0.524, -0.344, -0.16, - -0.032, -0.088, -0.136, -0.224, -0.252, -0.18, -0.484, -0.872, -0.844, -0.72, - -0.624, -0.572, -0.48, -0.392, -0.356, -0.292, -0.244, -0.208, -0.288, -0.372, - -0.364, -0.216, -0.464, -1.016, -0.904, -0.956, -0.812, -0.564, -0.632, - -0.468, -0.34, -0.272 - ], - "y": [ - 0.1, 0.048, 0.028, 0.24, 0.336, 0.376, 0.208, -0.328, -1.1, -1.368, -1.216, - -0.936, -0.488, -0.032, 0.468, 1.056, 1.708, 1.856, 1.896, 1.692, 1.224, - 0.592, -0.744, -2.04, -2.04, -2.04, -1.404, -0.66, -0.204, 0.568, 0.92, 1.304, - 1.768, 1.876, 1.5, 1.056, 0.596, -0.508, -2.04, -2.04, -2.032, -1.288, -0.796, - 0.108, 1.112, 1.588, 1.832, 1.832, 1.588, 1.176, 0.232, -0.968, -2.04, -2.04, - -2.04, -1.68, -1.08, -0.388, 0.248, 1.02, 1.704, 2.04, 1.98, 1.488, 0.868, - -0.08, -1.912, -2.04, -2.04, -1.916, -1.296, -0.684, 0.088, 0.532, 0.92, - 1.156, 1.348, 1.58, 1.616, 1.312, 0.816, -0.012, -2.04, -2.04, -2.04, -2.004, - -1.492, -0.904, 0.028, 0.564, 0.976, 1.292 - ], - "z": [ - -0.736, -0.788, -0.756, -0.768, -0.796, -0.908, -0.936, -1.024, -0.764, - -0.412, -0.34, -0.408, -0.56, -0.62, -0.624, -0.896, -1.092, -1.164, -1.144, - -0.992, -0.844, -0.808, -0.736, -0.016, 0.356, -0.172, -0.32, -0.58, -0.672, - -0.952, -0.988, -1.092, -1.16, -1.104, -1.032, -0.924, -0.872, -0.736, -0.256, - 0.276, -0.392, -0.444, -0.476, -0.656, -1.124, -1.136, -1.156, -1.18, -1.004, - -0.884, -0.812, -0.664, -0.508, -0.284, -0.312, -0.392, -0.5, -0.64, -0.84, - -1.172, -1.3, -1.352, -1.128, -0.968, -0.836, -0.764, -0.5, -0.152, -0.372, - -0.372, -0.432, -0.612, -0.892, -1.08, -1.212, -1.324, -1.208, -0.992, -0.828, - -0.744, -0.86, -0.872, -0.732, 0.012, 0.256, -0.084, -0.124, -0.208, -0.512, - -0.816, -1.18, -1.332 - ] - } - }, - { - "ID": 1705437819739, - "data": { - "x": [ - -0.268, -0.048, 0.06, 0.028, -0.108, -0.3, -0.412, -0.536, -0.668, -0.928, - -1.18, -1.26, -0.86, -0.372, 0.344, 0.564, 0.548, 0.392, 0.14, -0.124, -0.264, - -0.324, -0.376, -0.636, -1.312, -1.216, -1.036, -0.744, -0.256, 0.188, 0.132, - 0.112, 0.164, 0.008, -0.132, -0.22, -0.28, -0.504, -0.924, -1.192, -1.176, - -0.988, -0.648, -0.088, 0.08, 0.212, 0.104, 0.144, 0.008, -0.112, -0.264, - -0.336, -0.312, -0.468, -0.856, -1.132, -1.12, -0.932, -0.692, -0.384, -0.084, - 0.132, 0.064, 0.02, 0.016, -0.116, -0.212, -0.288, -0.28, -0.468, -1.032, - -1.404, -1.112, -0.844, -0.616, -0.22, -0.044, -0.132, -0.22, -0.088, -0.164, - -0.252, -0.32, -0.368, -0.432, -0.604, -0.876, -1.016, -1, -0.92, -0.848 - ], - "y": [ - -0.22, -0.116, -0.016, 0.048, 0.056, 0, -0.02, 0.036, 0.056, -0.256, -1.256, - -1.636, -1.248, -0.856, -0.344, 0.048, 0.54, 1.044, 1.216, 1.132, 0.848, - 0.468, -0.156, -1.38, -1.892, -1.296, -0.94, -0.836, -0.496, -0.092, 0.288, - 0.664, 0.7, 0.648, 0.716, 0.6, 0.232, -0.704, -1.436, -1.448, -1.124, -0.968, - -0.736, -0.62, 0.052, 0.148, 0.328, 0.54, 0.572, 0.564, 0.544, 0.32, -0.064, - -0.828, -1.444, -1.42, -1.224, -0.952, -0.748, -0.524, -0.44, -0.744, 0.068, - 0.456, 0.816, 0.788, 0.824, 0.536, 0.124, -0.688, -1.372, -1.516, -0.964, - -0.58, -0.488, -0.46, -0.132, 0.264, 0.432, 0.58, 0.7, 0.624, 0.556, 0.312, - 0.036, -0.832, -1.244, -1.18, -0.9, -0.764, -0.8 - ], - "z": [ - -1.448, -1.808, -2.04, -2.04, -1.684, -1.22, -0.936, -0.54, 0.412, 1.76, 2.04, - 1.732, 0.708, -0.084, -1.284, -2.04, -2.04, -2.04, -2.04, -1.44, -1.12, -0.88, - -0.312, 0.328, 0.988, 1.404, 1.352, 0.476, -0.152, -1.276, -2.04, -2.04, - -2.04, -2.04, -1.668, -1.176, -0.596, -0.04, 0.844, 1.492, 1.636, 1.064, - 0.636, -0.136, -1.344, -2.04, -2.04, -2.04, -2.04, -1.82, -1.36, -1.044, - -0.616, 0.18, 0.912, 1.432, 1.756, 1.2, 0.528, 0.064, -0.612, -1.708, -2.04, - -2.04, -2.04, -1.932, -1.668, -1.3, -0.744, -0.032, 0.692, 1.284, 1.32, 0.712, - 0.16, -0.344, -1.06, -2.04, -2.04, -2.04, -2.04, -1.692, -1.396, -1.04, - -0.636, 0.04, 0.568, 0.784, 0.948, 1.012, 0.68 - ] - } - }, - { - "ID": 1705437816208, - "data": { - "x": [ - -0.692, -0.644, -0.548, -0.516, -0.74, -0.872, -0.26, 0.108, 0.268, 0.436, - 0.248, -0.04, -0.224, -0.272, -0.176, 0.316, -0.408, -1.336, -1.112, -0.712, - -0.52, -0.432, -0.188, 0.088, 0.148, 0.028, -0.072, -0.164, -0.204, -0.144, - 0.252, -0.232, -1.312, -1.132, -0.92, -0.764, -0.432, -0.072, 0.096, 0.184, - 0.156, 0.052, -0.02, -0.068, 0.136, -0.276, -1.244, -1.136, -0.996, -0.872, - -0.576, -0.328, -0.172, -0.084, -0.072, -0.08, -0.168, -0.22, -0.128, -0.112, - -1.036, -1.22, -1.008, -0.856, -0.688, -0.368, -0.196, -0.036, 0.052, 0.092, - 0.076, 0.04, -0.084, -0.212, -0.168, 0.124, -0.724, -1.376, -1.048, -0.872, - -0.776, -0.608, -0.324, -0.128, -0.004, 0.024, 0.024, -0.008, -0.12, -0.248, - -0.384, -0.356 - ], - "y": [ - -1.164, -1.268, -1.532, -1.984, -2.04, -2.04, -1.672, -0.532, 0.236, 1.008, - 1.736, 2.012, 1.868, 1.056, 0.692, -0.156, -2.04, -2.04, -2.04, -2.04, -1.464, - -0.956, -0.604, 0.364, 1.252, 1.812, 2.04, 1.88, 1.476, 0.836, -0.228, -2.04, - -2.04, -2.04, -2.024, -1.712, -1.132, -0.2, 0.816, 1.624, 2.04, 2.04, 1.904, - 1.084, 0.184, -2.04, -2.04, -2.04, -1.536, -1.236, -0.616, 0, 0.796, 1.36, - 1.648, 1.532, 1.3, 0.904, 0.28, -1.288, -2.04, -2.04, -1.864, -1.692, -1.2, - -0.572, 0.008, 0.548, 1.228, 1.792, 2.02, 1.8, 1.408, 1.012, 0.528, -0.748, - -2.04, -2.04, -1.896, -1.128, -1.06, -0.936, -0.468, 0.244, 0.868, 1.392, - 1.772, 1.712, 1.304, 0.924, 0.544, 0.144 - ], - "z": [ - -0.116, -0.136, -0.024, 0.108, 0.696, 0.724, 0.424, 0.18, 0.196, -0.072, - -0.788, -1.488, -1.564, -0.98, -0.712, -0.504, -0.528, 0.736, 0.544, 0.124, - -0.104, -0.204, -0.084, -0.356, -0.752, -1.048, -1.136, -1, -0.92, -0.82, - -0.736, -0.34, 0.824, 0.26, -0.084, -0.072, -0.176, -0.42, -0.6, -0.852, - -1.132, -1.308, -1.16, -0.968, -0.868, -0.744, 0.668, 0.048, -0.156, -0.248, - -0.364, -0.6, -0.932, -1.116, -1.224, -1.196, -1.16, -1.044, -0.884, -0.748, - 0.392, 0.376, -0.156, -0.228, -0.268, -0.54, -0.74, -0.784, -0.816, -0.92, - -1.024, -0.984, -0.904, -0.868, -0.86, -1.072, 0.016, 0.704, -0.076, -0.348, - -0.336, -0.372, -0.38, -0.628, -0.84, -0.964, -1.06, -1.116, -1.044, -0.972, - -0.912, -0.944 - ] - } - }, - { - "ID": 1705437808407, - "data": { - "x": [ - -0.756, -0.972, -0.836, -0.82, -0.832, -0.728, -0.904, -0.376, -0.464, -0.328, - -0.112, 0.084, 0.172, 0.292, 0.404, 0.356, 0.3, 0.116, 0.068, -0.084, -0.348, - -0.396, -0.628, -0.752, -0.744, -0.856, -0.82, -0.808, -0.688, -0.572, -0.436, - -0.308, -0.324, -0.068, 0.184, 0.24, 0.276, 0.268, 0.284, 0.26, 0.028, 0.016, - -0.224, -0.472, -0.54, -0.612, -0.764, -0.916, -0.976, -0.984, -0.94, -0.844, - -0.8, -0.524, -0.432, -0.256, -0.1, 0.124, 0.208, 0.284, 0.272, 0.288, 0.232, - 0.152, 0.004, -0.28, -0.408, -0.656, -0.836, -1.068, -1.036, -1.016, -0.952, - -0.844, -0.724, -0.68, -0.796, -0.564, -0.34, -0.208, -0.104, 0.052, 0.168, - 0.292, 0.42, 0.408, 0.436, 0.352, 0.164, -0.04, -0.352, -0.488 - ], - "y": [ - 0.668, 0.968, 0.696, 0.572, 0.688, 0.628, 0.932, 0.596, 0.836, 0.78, 0.556, - 0.52, 0.492, 0.38, 0.452, 0.304, 0.08, 0.144, 0.264, 0.184, 0.144, 0.472, - 0.904, 1.004, 0.752, 0.7, 0.808, 1.032, 0.988, 0.676, 0.524, 0.688, 0.664, - 0.536, 0.4, 0.304, 0.256, 0.276, 0.32, 0.296, 0.408, 0.18, 0.468, 0.744, - 0.724, 0.684, 0.88, 1.072, 1.108, 1, 0.912, 0.816, 0.912, 0.756, 0.728, 0.668, - 0.5, 0.404, 0.364, 0.368, 0.372, 0.364, 0.424, 0.356, 0.316, 0.532, 0.62, - 0.908, 1.184, 1.192, 1.028, 0.988, 1.188, 1.344, 1.268, 0.952, 0.816, 0.824, - 0.812, 0.78, 0.704, 0.56, 0.428, 0.328, 0.26, 0.256, 0.104, 0.172, 0.096, - 0.452, 0.732, 0.976 - ], - "z": [ - -1.704, -1.86, -1.568, -1.4, -1.512, -1.552, -1.24, -1.304, -1.22, -0.76, - -0.304, -0.084, 0.088, 0.2, 0.396, 0.468, 0.192, -0.008, -0.492, -0.796, - -0.96, -1.336, -1.768, -1.676, -1.424, -1.296, -1.3, -1.488, -1.508, -1.12, - -1.056, -0.924, -0.6, -0.18, -0.084, -0.008, -0.012, 0, 0.016, 0.028, -0.012, - -0.3, -0.692, -1.236, -1.444, -1.212, -1.236, -1.4, -1.524, -1.456, -1.54, - -1.524, -1.288, -0.888, -0.58, -0.268, -0.092, -0.04, 0.02, 0.104, 0.14, - 0.144, 0.18, 0.116, -0.116, -0.504, -0.78, -0.996, -1.284, -1.42, -1.38, - -1.304, -1.312, -1.304, -1.288, -1.24, -1.036, -0.704, -0.484, -0.292, -0.132, - -0.004, 0.032, 0.156, 0.248, 0.28, 0.22, 0.092, -0.144, -0.56, -1.076, -1.304 - ] - } - }, - { - "ID": 1705437804840, - "data": { - "x": [ - 0.42, 0.624, 0.688, 0.412, 0.552, 0.592, 0.532, 0.592, 0.292, -0.084, -0.284, - -0.044, -0.428, 0.824, 1.172, 0.508, 0.428, 0.344, 0.512, 0, -0.616, 0.156, - 0.232, 0.268, 0.78, 0.636, 0.428, 0.688, 0.764, 0.416, 0.432, 0.444, 0.32, - 0.312, 0.348, 0.32, 0.472, 0.292, 0.092, 0.268, 0.348, 0.424, 0.508, 0.716, - 0.708, 0.684, 0.516, 0.46, 0.3, 0.084, 0.08, 0.108, -0.036, -0.012, 0.088, - 0.032, 0.092, 0.136, 0.252, 0.032, 0.36, 0.476, 0.656, 0.744, 0.72, 0.692, - 0.62, 0.572, 0.464, 0.248, -0.016, 0.096, -0.18, -0.176, -0.004, -0.04, 0.112, - 0.22, 0.024, 0.02, 0.136, 0.208, 0.136, 0.448, 0.764, 0.808, 0.752, 0.72, 0.7, - 0.48, 0.304, 0.052 - ], - "y": [ - -1.136, -1.324, -0.948, -1, -1.404, -1.46, -1.192, -0.868, -0.432, 0.144, - 0.528, 0.496, 1.672, 2.04, 2.04, 2.04, 2.04, 1.416, 1.6, 1.212, 0.732, -1.24, - -0.648, -0.616, -1.356, -1.124, -0.792, -0.728, -0.816, -0.044, 0.556, 1.332, - 1.496, 1.224, 1.184, 1.48, 1.644, 1.06, 0.524, 0.012, -0.1, -0.472, -0.9, - -1.224, -1.252, -1.116, -1.024, -0.592, -0.216, 0.372, 1.112, 1.648, 2.008, - 1.844, 1.728, 1.544, 1.108, 0.768, 0.512, 0.396, -0.436, -0.692, -0.892, - -0.976, -0.912, -0.756, -0.58, -0.432, -0.296, -0.108, 0.472, 1.108, 1.772, - 1.7, 1.284, 1.516, 1.564, 1.552, 0.992, 0.436, 0.384, 0.356, -0.376, -0.936, - -1.132, -1.172, -0.964, -0.828, -0.592, -0.408, -0.208, 0.248 - ], - "z": [ - -0.468, -0.332, -0.256, 0.184, -0.152, -0.46, -0.5, -0.568, -0.408, -0.296, - -0.144, -0.636, -1.18, -1.696, -0.276, -0.22, 0.472, 0.252, -0.284, -0.884, - -0.368, -0.308, -0.66, -0.488, -1.112, -1.176, -0.8, -0.732, -0.292, -0.34, - -0.56, -0.452, -0.856, -0.984, -1.1, -0.888, -0.752, -0.66, -0.652, -0.716, - -0.632, -0.48, -0.452, -0.532, -0.684, -0.684, -0.568, -0.404, -0.608, -0.8, - -1.24, -1, -0.872, -0.684, -0.516, -0.828, -0.7, -0.732, -0.432, -0.452, - -0.54, -0.552, -0.868, -0.7, -0.56, -0.56, -0.772, -0.772, -0.792, -0.796, - -1.1, -0.88, -0.996, -0.608, -0.492, -0.436, -0.648, -0.608, -0.6, -0.716, - -0.628, -0.592, -0.848, -0.792, -0.816, -0.768, -0.604, -0.56, -0.504, -0.652, - -0.704, -0.916 - ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - }, - { - "ID": 1705437833024, - "name": "Still", - "recordings": [ - { - "ID": 1705437969952, - "data": { - "x": [ - -0.064, -0.06, -0.06, -0.06, -0.06, -0.064, -0.056, -0.056, -0.06, -0.06, - -0.064, -0.056, -0.056, -0.056, -0.06, -0.052, -0.064, -0.06, -0.064, -0.06, - -0.06, -0.052, -0.056, -0.06, -0.064, -0.06, -0.064, -0.06, -0.06, -0.068, - -0.056, -0.056, -0.048, -0.064, -0.056, -0.06, -0.056, -0.056, -0.056, -0.056, - -0.06, -0.06, -0.056, -0.064, -0.064, -0.056, -0.056, -0.056, -0.06, -0.056, - -0.064, -0.06, -0.056, -0.064, -0.064, -0.056, -0.056, -0.064, -0.056, -0.06, - -0.052, -0.06, -0.056, -0.06, -0.06, -0.06, -0.06, -0.056, -0.06, -0.052, - -0.048, -0.06, -0.06, -0.056, -0.064, -0.06, -0.056, -0.056, -0.06, -0.056, - -0.064, -0.06, -0.056, -0.06, -0.06, -0.052, -0.064, -0.056, -0.068, -0.06, - -0.06, -0.052, -0.06 - ], - "y": [ - 0.768, 0.768, 0.772, 0.76, 0.76, 0.772, 0.764, 0.76, 0.764, 0.764, 0.772, - 0.764, 0.76, 0.764, 0.76, 0.768, 0.764, 0.76, 0.764, 0.76, 0.772, 0.76, 0.764, - 0.768, 0.764, 0.764, 0.76, 0.764, 0.756, 0.764, 0.764, 0.76, 0.76, 0.764, - 0.764, 0.76, 0.756, 0.76, 0.76, 0.756, 0.76, 0.764, 0.768, 0.764, 0.752, 0.76, - 0.76, 0.756, 0.756, 0.772, 0.76, 0.764, 0.76, 0.764, 0.76, 0.768, 0.764, - 0.756, 0.76, 0.764, 0.764, 0.764, 0.76, 0.756, 0.768, 0.764, 0.756, 0.76, - 0.764, 0.764, 0.764, 0.764, 0.764, 0.756, 0.76, 0.76, 0.772, 0.76, 0.764, - 0.76, 0.772, 0.764, 0.756, 0.76, 0.768, 0.752, 0.76, 0.76, 0.76, 0.756, 0.76, - 0.764, 0.752 - ], - "z": [ - -0.7, -0.684, -0.7, -0.688, -0.696, -0.696, -0.7, -0.696, -0.7, -0.692, - -0.696, -0.704, -0.696, -0.692, -0.7, -0.696, -0.696, -0.688, -0.692, -0.684, - -0.7, -0.696, -0.704, -0.692, -0.704, -0.7, -0.7, -0.7, -0.708, -0.7, -0.696, - -0.692, -0.696, -0.7, -0.7, -0.692, -0.704, -0.692, -0.708, -0.696, -0.704, - -0.7, -0.692, -0.692, -0.708, -0.704, -0.696, -0.704, -0.704, -0.704, -0.704, - -0.704, -0.7, -0.696, -0.708, -0.7, -0.696, -0.696, -0.692, -0.704, -0.696, - -0.696, -0.688, -0.7, -0.708, -0.696, -0.704, -0.696, -0.708, -0.7, -0.712, - -0.708, -0.696, -0.7, -0.696, -0.696, -0.7, -0.696, -0.704, -0.696, -0.708, - -0.7, -0.7, -0.7, -0.704, -0.7, -0.684, -0.692, -0.696, -0.704, -0.704, -0.7, - -0.7 - ] - } - }, - { - "ID": 1705437870493, - "data": { - "x": [ - -0.804, -0.836, -0.848, -0.812, -0.768, -0.784, -0.808, -0.776, -0.7, -0.648, - -0.636, -0.664, -0.672, -0.704, -0.712, -0.72, -0.756, -0.752, -0.704, -0.68, - -0.692, -0.708, -0.72, -0.756, -0.764, -0.768, -0.772, -0.736, -0.748, -0.74, - -0.772, -0.764, -0.752, -0.736, -0.732, -0.756, -0.76, -0.772, -0.74, -0.74, - -0.748, -0.748, -0.752, -0.772, -0.756, -0.748, -0.732, -0.74, -0.752, -0.756, - -0.748, -0.732, -0.74, -0.76, -0.752, -0.772, -0.764, -0.74, -0.736, -0.748, - -0.764, -0.756, -0.728, -0.74, -0.756, -0.752, -0.744, -0.756, -0.744, -0.732, - -0.728, -0.74, -0.752, -0.76, -0.776, -0.78, -0.772, -0.74, -0.732, -0.74, - -0.764, -0.776, -0.772, -0.764, -0.748, -0.76, -0.736, -0.748, -0.744, -0.768, - -0.812, -0.808 - ], - "y": [ - -0.48, -0.472, -0.48, -0.492, -0.476, -0.432, -0.428, -0.476, -0.548, -0.552, - -0.536, -0.516, -0.496, -0.484, -0.476, -0.484, -0.484, -0.5, -0.504, -0.508, - -0.484, -0.492, -0.496, -0.484, -0.48, -0.476, -0.484, -0.492, -0.468, -0.484, - -0.476, -0.484, -0.492, -0.5, -0.488, -0.484, -0.476, -0.476, -0.488, -0.496, - -0.492, -0.472, -0.464, -0.464, -0.476, -0.48, -0.488, -0.484, -0.468, -0.468, - -0.484, -0.488, -0.484, -0.488, -0.472, -0.476, -0.476, -0.48, -0.492, -0.476, - -0.472, -0.476, -0.484, -0.484, -0.484, -0.484, -0.492, -0.488, -0.456, -0.48, - -0.484, -0.472, -0.476, -0.46, -0.472, -0.472, -0.46, -0.472, -0.488, -0.476, - -0.472, -0.488, -0.492, -0.5, -0.492, -0.488, -0.484, -0.492, -0.488, -0.472, - -0.428, -0.436 - ], - "z": [ - -0.56, -0.592, -0.572, -0.52, -0.512, -0.568, -0.656, -0.656, -0.56, -0.504, - -0.54, -0.608, -0.636, -0.652, -0.66, -0.64, -0.66, -0.66, -0.584, -0.56, - -0.576, -0.6, -0.592, -0.58, -0.62, -0.608, -0.616, -0.576, -0.596, -0.572, - -0.604, -0.592, -0.568, -0.572, -0.56, -0.584, -0.584, -0.612, -0.572, -0.568, - -0.576, -0.588, -0.6, -0.596, -0.572, -0.564, -0.568, -0.592, -0.6, -0.604, - -0.588, -0.572, -0.58, -0.584, -0.588, -0.596, -0.584, -0.564, -0.568, -0.592, - -0.596, -0.592, -0.588, -0.572, -0.588, -0.6, -0.576, -0.592, -0.624, -0.572, - -0.564, -0.584, -0.588, -0.6, -0.6, -0.592, -0.58, -0.564, -0.552, -0.564, - -0.58, -0.592, -0.588, -0.584, -0.568, -0.58, -0.56, -0.568, -0.548, -0.58, - -0.636, -0.608 - ] - } - }, - { - "ID": 1705437864426, - "data": { - "x": [ - 0.892, 0.972, 0.972, 0.92, 0.916, 0.964, 0.924, 0.932, 0.984, 0.932, 0.876, - 0.88, 0.904, 0.92, 0.948, 0.984, 0.992, 0.948, 0.948, 0.992, 0.98, 0.952, - 0.948, 0.928, 0.964, 0.94, 0.94, 0.948, 0.976, 0.964, 0.956, 0.936, 0.948, - 0.94, 0.932, 0.96, 0.952, 0.936, 0.98, 0.984, 0.948, 0.94, 0.928, 0.928, 0.94, - 0.96, 0.94, 0.94, 0.94, 0.936, 0.948, 0.948, 0.952, 0.952, 0.936, 0.96, 0.96, - 0.956, 0.96, 0.952, 0.94, 0.956, 0.94, 0.94, 0.948, 0.94, 0.952, 0.952, 0.952, - 0.944, 0.944, 0.96, 0.976, 0.968, 0.944, 0.928, 0.94, 0.956, 0.952, 0.952, - 0.948, 0.952, 0.948, 0.944, 0.944, 0.94, 0.92, 0.94, 0.952, 0.964, 0.968, - 0.968, 0.944 - ], - "y": [ - -0.02, -0.088, -0.116, -0.144, -0.14, -0.016, 0.012, -0.04, -0.1, -0.076, - -0.088, -0.096, -0.104, -0.088, -0.092, -0.096, -0.076, -0.072, -0.072, -0.08, - -0.076, -0.084, -0.104, -0.088, -0.104, -0.088, -0.116, -0.116, -0.132, - -0.116, -0.108, -0.104, -0.12, -0.116, -0.1, -0.108, -0.112, -0.096, -0.108, - -0.112, -0.1, -0.1, -0.1, -0.104, -0.116, -0.12, -0.096, -0.108, -0.12, - -0.116, -0.108, -0.104, -0.112, -0.112, -0.096, -0.096, -0.104, -0.088, - -0.096, -0.1, -0.108, -0.1, -0.108, -0.096, -0.1, -0.104, -0.108, -0.104, - -0.1, -0.088, -0.092, -0.1, -0.1, -0.096, -0.088, -0.092, -0.096, -0.096, - -0.104, -0.088, -0.08, -0.108, -0.092, -0.096, -0.1, -0.1, -0.08, -0.1, - -0.096, -0.092, -0.092, -0.112, -0.088 - ], - "z": [ - 0.208, -0.032, -0.252, -0.316, -0.292, -0.224, -0.14, 0.116, 0, -0.196, - -0.188, -0.16, -0.172, -0.096, -0.152, -0.228, -0.268, -0.248, -0.172, -0.14, - -0.136, -0.188, -0.204, -0.14, -0.116, -0.104, -0.18, -0.216, -0.192, -0.168, - -0.132, -0.16, -0.188, -0.184, -0.14, -0.124, -0.176, -0.176, -0.16, -0.18, - -0.176, -0.152, -0.156, -0.168, -0.176, -0.172, -0.168, -0.152, -0.16, -0.156, - -0.18, -0.168, -0.176, -0.188, -0.172, -0.18, -0.176, -0.188, -0.168, -0.16, - -0.196, -0.192, -0.184, -0.152, -0.148, -0.2, -0.2, -0.172, -0.168, -0.168, - -0.18, -0.176, -0.168, -0.16, -0.148, -0.148, -0.164, -0.184, -0.184, -0.176, - -0.144, -0.156, -0.176, -0.184, -0.172, -0.172, -0.144, -0.168, -0.188, -0.18, - -0.176, -0.14, -0.144 - ] - } - }, - { - "ID": 1705437860385, - "data": { - "x": [ - 0, 0.004, 0, 0.004, 0.016, 0, 0.004, -0.06, -0.004, -0.04, -0.048, -0.052, - -0.056, -0.048, -0.052, -0.044, -0.052, -0.044, -0.048, -0.04, -0.056, -0.052, - -0.052, -0.056, -0.056, -0.044, -0.044, -0.056, -0.052, -0.048, -0.048, - -0.048, -0.048, -0.048, -0.06, -0.056, -0.052, -0.056, -0.056, -0.052, -0.056, - -0.056, -0.056, -0.048, -0.048, -0.048, -0.06, -0.052, -0.056, -0.048, -0.052, - -0.048, -0.048, -0.048, -0.044, -0.048, -0.052, -0.052, -0.056, -0.056, - -0.044, -0.048, -0.052, -0.052, -0.048, -0.052, -0.056, -0.052, -0.056, - -0.044, -0.048, -0.052, -0.048, -0.052, -0.052, -0.052, -0.048, -0.056, - -0.056, -0.048, -0.052, -0.056, -0.048, -0.056, -0.048, -0.048, -0.052, - -0.052, -0.048, -0.052, -0.052, -0.044 - ], - "y": [ - 0.16, 0.172, 0.184, 0.184, 0.168, 0.188, 0.192, 0.212, 0.16, 0.208, 0.224, - 0.224, 0.22, 0.22, 0.224, 0.22, 0.22, 0.216, 0.2, 0.216, 0.228, 0.224, 0.224, - 0.232, 0.228, 0.232, 0.224, 0.224, 0.228, 0.228, 0.228, 0.228, 0.232, 0.236, - 0.232, 0.232, 0.228, 0.22, 0.232, 0.228, 0.228, 0.232, 0.236, 0.232, 0.232, - 0.224, 0.224, 0.232, 0.224, 0.236, 0.228, 0.232, 0.228, 0.224, 0.228, 0.232, - 0.228, 0.228, 0.232, 0.232, 0.228, 0.224, 0.224, 0.232, 0.236, 0.228, 0.228, - 0.236, 0.232, 0.224, 0.228, 0.224, 0.236, 0.236, 0.232, 0.228, 0.228, 0.236, - 0.232, 0.228, 0.232, 0.232, 0.228, 0.232, 0.228, 0.228, 0.228, 0.228, 0.224, - 0.232, 0.232, 0.232 - ], - "z": [ - 1, 1.016, 1.032, 1.02, 0.98, 1.004, 0.788, 1.06, 1.028, 1.004, 0.996, 1.012, - 1, 1.012, 1.008, 1.004, 0.996, 1.008, 1.012, 1.012, 1.012, 1.012, 1.012, 1, - 1.012, 1.008, 1.004, 1.012, 1.008, 1.008, 1.008, 1.008, 0.996, 0.996, 1.008, - 1.012, 1.008, 1.012, 1.008, 1.012, 1.004, 1.008, 1.004, 1.004, 1.004, 1, - 1.008, 1.004, 1.004, 1.012, 1.008, 1.004, 1.004, 1.008, 1.008, 1.008, 1, - 1.004, 1, 1, 1, 1.008, 1.004, 1, 1.004, 1.004, 1.004, 1, 1.008, 1.012, 1.004, - 1.004, 1.008, 1.008, 1, 1.012, 1.004, 0.996, 1.008, 1, 1.008, 1.012, 0.996, - 0.996, 1.004, 1.008, 1.012, 1.008, 1.004, 1.008, 1.008, 1.008 - ] - } - }, - { - "ID": 1705437854703, - "data": { - "x": [ - -0.076, -0.076, -0.072, -0.068, -0.076, -0.072, -0.072, -0.056, -0.104, - -0.068, -0.072, -0.064, -0.072, -0.044, -0.072, -0.064, -0.064, -0.068, - -0.076, -0.076, -0.068, -0.068, -0.072, -0.068, -0.072, -0.068, -0.072, - -0.068, -0.056, -0.064, -0.068, -0.068, -0.068, -0.068, -0.06, -0.072, -0.076, - -0.072, -0.068, -0.064, -0.072, -0.06, -0.072, -0.068, -0.064, -0.06, -0.064, - -0.068, -0.064, -0.072, -0.064, -0.068, -0.076, -0.068, -0.064, -0.064, - -0.064, -0.068, -0.064, -0.072, -0.068, -0.072, -0.06, -0.06, -0.076, -0.06, - -0.064, -0.064, -0.06, -0.068, -0.076, -0.064, -0.064, -0.064, -0.072, -0.068, - -0.064, -0.064, -0.088, -0.06, -0.06, -0.06, -0.064, -0.056, -0.06, -0.064, - -0.064, -0.064, -0.064, -0.068, -0.072, -0.068, -0.06 - ], - "y": [ - 0.968, 0.96, 0.956, 0.964, 0.964, 0.96, 0.96, 0.976, 0.96, 0.96, 0.96, 0.96, - 0.956, 0.948, 0.952, 0.956, 0.944, 0.944, 0.944, 0.944, 0.948, 0.952, 0.944, - 0.948, 0.948, 0.94, 0.948, 0.944, 0.956, 0.948, 0.944, 0.952, 0.952, 0.952, - 0.952, 0.952, 0.948, 0.948, 0.948, 0.952, 0.944, 0.944, 0.948, 0.948, 0.944, - 0.948, 0.952, 0.948, 0.952, 0.948, 0.94, 0.944, 0.952, 0.952, 0.936, 0.948, - 0.948, 0.944, 0.948, 0.944, 0.944, 0.944, 0.94, 0.956, 0.944, 0.952, 0.94, - 0.952, 0.944, 0.944, 0.944, 0.956, 0.948, 0.952, 0.944, 0.94, 0.936, 0.944, - 0.936, 0.94, 0.956, 0.952, 0.948, 0.944, 0.952, 0.94, 0.948, 0.948, 0.952, - 0.948, 0.948, 0.948, 0.948 - ], - "z": [ - -0.396, -0.388, -0.392, -0.388, -0.38, -0.36, -0.404, -0.416, -0.396, -0.42, - -0.388, -0.42, -0.42, -0.564, -0.424, -0.416, -0.424, -0.44, -0.432, -0.428, - -0.428, -0.432, -0.428, -0.428, -0.432, -0.428, -0.424, -0.432, -0.436, - -0.428, -0.428, -0.432, -0.432, -0.428, -0.424, -0.436, -0.428, -0.432, - -0.432, -0.436, -0.424, -0.424, -0.428, -0.424, -0.436, -0.432, -0.42, -0.428, - -0.436, -0.424, -0.424, -0.424, -0.436, -0.428, -0.428, -0.424, -0.428, - -0.436, -0.424, -0.428, -0.44, -0.424, -0.428, -0.432, -0.432, -0.42, -0.428, - -0.428, -0.428, -0.436, -0.428, -0.428, -0.42, -0.428, -0.436, -0.432, -0.436, - -0.44, -0.428, -0.432, -0.432, -0.432, -0.432, -0.428, -0.44, -0.444, -0.436, - -0.424, -0.424, -0.432, -0.424, -0.432, -0.436 - ] - } - }, - { - "ID": 1705437847993, - "data": { - "x": [ - 0.744, 0.76, 0.66, 0.688, 0.784, 0.736, 0.704, 0.712, 0.732, 0.72, 0.768, - 0.772, 0.76, 0.784, 0.76, 0.776, 0.776, 0.776, 0.744, 0.744, 0.76, 0.748, - 0.764, 0.76, 0.764, 0.776, 0.772, 0.752, 0.76, 0.752, 0.764, 0.76, 0.748, - 0.752, 0.744, 0.76, 0.78, 0.772, 0.768, 0.756, 0.756, 0.748, 0.752, 0.744, - 0.744, 0.752, 0.756, 0.756, 0.752, 0.752, 0.748, 0.752, 0.756, 0.764, 0.756, - 0.756, 0.752, 0.748, 0.752, 0.748, 0.748, 0.744, 0.744, 0.752, 0.76, 0.76, - 0.756, 0.752, 0.756, 0.756, 0.752, 0.744, 0.732, 0.74, 0.744, 0.748, 0.732, - 0.736, 0.732, 0.748, 0.752, 0.748, 0.74, 0.744, 0.752, 0.744, 0.748, 0.732, - 0.736, 0.74, 0.752, 0.74 - ], - "y": [ - 0.292, 0.284, 0.24, 0.264, 0.224, 0.176, 0.232, 0.272, 0.268, 0.264, 0.248, - 0.224, 0.248, 0.248, 0.252, 0.232, 0.248, 0.264, 0.268, 0.268, 0.268, 0.272, - 0.268, 0.268, 0.256, 0.256, 0.26, 0.268, 0.264, 0.264, 0.264, 0.268, 0.268, - 0.276, 0.276, 0.256, 0.256, 0.264, 0.268, 0.272, 0.268, 0.272, 0.272, 0.3, - 0.276, 0.276, 0.284, 0.268, 0.284, 0.276, 0.276, 0.272, 0.276, 0.264, 0.276, - 0.276, 0.28, 0.272, 0.276, 0.28, 0.28, 0.28, 0.284, 0.276, 0.272, 0.264, - 0.268, 0.272, 0.272, 0.272, 0.272, 0.276, 0.28, 0.276, 0.284, 0.288, 0.284, - 0.3, 0.288, 0.272, 0.28, 0.28, 0.276, 0.272, 0.276, 0.284, 0.284, 0.288, - 0.284, 0.276, 0.272, 0.276 - ], - "z": [ - -0.56, -0.604, -0.56, -0.588, -0.616, -0.616, -0.644, -0.572, -0.564, -0.552, - -0.572, -0.552, -0.54, -0.556, -0.56, -0.568, -0.568, -0.572, -0.552, -0.548, - -0.54, -0.544, -0.556, -0.56, -0.56, -0.544, -0.536, -0.54, -0.532, -0.556, - -0.564, -0.572, -0.556, -0.552, -0.536, -0.544, -0.544, -0.548, -0.552, -0.56, - -0.552, -0.556, -0.568, -0.56, -0.56, -0.552, -0.552, -0.556, -0.556, -0.536, - -0.528, -0.536, -0.56, -0.564, -0.556, -0.544, -0.536, -0.54, -0.568, -0.56, - -0.552, -0.54, -0.544, -0.56, -0.568, -0.552, -0.544, -0.548, -0.548, -0.56, - -0.556, -0.544, -0.552, -0.56, -0.556, -0.56, -0.568, -0.564, -0.56, -0.548, - -0.556, -0.56, -0.568, -0.572, -0.564, -0.56, -0.556, -0.552, -0.568, -0.56, - -0.564, -0.56 - ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - }, - { - "ID": 1705437876740, - "name": "Circle", - "recordings": [ - { - "ID": 1705438034019, - "data": { - "x": [ - -0.148, -0.388, -0.552, -0.64, -0.544, -0.616, -0.528, -0.612, -0.536, -0.456, - -0.532, -0.672, -0.796, -0.836, -0.716, -0.756, -0.916, -0.956, -1.032, -1.1, - -1.228, -1.284, -1.312, -1.36, -1.356, -1.296, -1.224, -1.096, -0.844, -0.964, - -0.948, -0.984, -0.896, -0.884, -0.884, -0.772, -0.64, -0.508, -0.388, -0.348, - -0.392, -0.392, -0.396, -0.344, -0.3, -0.264, -0.28, -0.252, -0.2, -0.22, - -0.236, -0.244, -0.208, -0.188, -0.22, -0.252, -0.244, -0.288, -0.36, -0.476, - -0.496, -0.472, -0.452, -0.504, -0.552, -0.576, -0.532, -0.532, -0.608, - -0.652, -0.668, -0.652, -0.764, -0.892, -0.92, -0.864, -0.848, -0.884, -0.872, - -0.848, -0.888, -0.952, -0.992, -1.02, -1.084, -1.068, -0.952, -0.82, -0.748, - -0.732, -0.84 - ], - "y": [ - 0.48, 0.444, 0.34, 0.376, 0.392, 0.424, 0.44, 0.42, 0.416, 0.42, 0.392, 0.376, - 0.352, 0.384, 0.348, 0.284, 0.22, 0.204, 0.284, 0.28, 0.2, 0.152, 0.128, 0.16, - 0.144, 0.108, 0.06, 0.072, 0.02, 0.224, 0.284, 0.372, 0.284, 0.348, 0.412, - 0.408, 0.376, 0.36, 0.396, 0.452, 0.484, 0.424, 0.36, 0.296, 0.296, 0.296, - 0.312, 0.34, 0.356, 0.332, 0.344, 0.344, 0.344, 0.336, 0.336, 0.332, 0.336, - 0.324, 0.308, 0.328, 0.328, 0.316, 0.304, 0.28, 0.284, 0.296, 0.328, 0.348, - 0.348, 0.348, 0.392, 0.428, 0.432, 0.432, 0.452, 0.424, 0.38, 0.356, 0.384, - 0.392, 0.336, 0.272, 0.28, 0.328, 0.348, 0.304, 0.256, 0.224, 0.24, 0.292, - 0.324 - ], - "z": [ - -0.764, -0.612, -0.512, -0.524, -0.512, -0.404, -0.344, -0.372, -0.388, - -0.396, -0.328, -0.252, -0.18, -0.208, -0.228, -0.22, -0.204, -0.272, -0.308, - -0.308, -0.388, -0.424, -0.512, -0.592, -0.66, -0.696, -0.772, -0.812, -0.968, - -0.948, -1.02, -1.168, -1.064, -1.072, -1.128, -1.148, -1.128, -1.148, -1.164, - -1.12, -1.108, -1.12, -1.156, -1.248, -1.26, -1.196, -1.124, -1.008, -0.96, - -0.924, -0.896, -0.848, -0.796, -0.728, -0.708, -0.68, -0.636, -0.556, -0.532, - -0.5, -0.48, -0.456, -0.412, -0.384, -0.364, -0.384, -0.392, -0.356, -0.364, - -0.388, -0.376, -0.388, -0.42, -0.408, -0.416, -0.376, -0.372, -0.368, -0.412, - -0.464, -0.492, -0.516, -0.58, -0.584, -0.68, -0.768, -0.848, -0.876, -0.924, - -0.976, -0.972 - ] - } - }, - { - "ID": 1705438029559, - "data": { - "x": [ - -0.4, -0.504, -0.556, -0.656, -0.988, -0.568, -0.644, -0.664, -0.644, -0.536, - -0.496, -0.776, -0.804, -0.888, -0.868, -0.904, -0.94, -0.912, -0.888, -0.816, - -0.836, -0.872, -0.844, -0.848, -0.832, -0.792, -0.756, -0.74, -0.692, -0.684, - -0.664, -0.636, -0.624, -0.592, -0.568, -0.532, -0.516, -0.412, -0.412, - -0.364, -0.292, -0.2, -0.164, -0.1, -0.1, -0.072, -0.048, 0.004, -0.02, 0.068, - -0.004, -0.072, -0.124, -0.188, -0.192, -0.172, -0.152, -0.172, -0.264, - -0.292, -0.312, -0.288, -0.276, -0.348, -0.48, -0.612, -0.552, -0.576, -0.676, - -0.804, -0.876, -0.864, -0.856, -0.844, -0.836, -0.836, -0.864, -0.92, -0.924, - -0.856, -0.792, -0.744, -0.672, -0.664, -0.644, -0.66, -0.68, -0.724, -0.716, - -0.668, -0.588, -0.508 - ], - "y": [ - 0.228, 0.248, 0.252, 0.252, 0.192, 0.132, 0.2, 0.28, 0.364, 0.276, 0.132, - 0.216, 0.24, 0.296, 0.26, 0.228, 0.26, 0.268, 0.304, 0.232, 0.232, 0.256, - 0.24, 0.232, 0.276, 0.268, 0.268, 0.304, 0.292, 0.296, 0.296, 0.292, 0.304, - 0.312, 0.3, 0.304, 0.328, 0.308, 0.32, 0.348, 0.368, 0.352, 0.356, 0.328, - 0.304, 0.308, 0.32, 0.3, 0.324, 0.24, 0.184, 0.26, 0.276, 0.28, 0.216, 0.224, - 0.24, 0.248, 0.232, 0.196, 0.184, 0.22, 0.232, 0.196, 0.212, 0.188, 0.18, - 0.176, 0.152, 0.144, 0.14, 0.176, 0.184, 0.18, 0.184, 0.18, 0.184, 0.216, - 0.252, 0.188, 0.2, 0.18, 0.208, 0.244, 0.252, 0.248, 0.244, 0.236, 0.244, - 0.276, 0.248, 0.236 - ], - "z": [ - -1.18, -1.18, -1.12, -1.32, -0.928, -1.048, -1.18, -1.024, -1.224, -1.064, - -1.008, -1.02, -0.888, -0.88, -0.812, -0.78, -0.736, -0.696, -0.672, -0.712, - -0.784, -0.516, -0.64, -0.54, -0.524, -0.536, -0.524, -0.484, -0.468, -0.516, - -0.54, -0.596, -0.624, -0.6, -0.596, -0.6, -0.624, -0.632, -0.656, -0.632, - -0.7, -0.744, -0.76, -0.768, -0.788, -0.816, -0.904, -0.908, -1.012, -0.996, - -0.78, -1.112, -1.06, -1, -1.06, -1.1, -1.136, -1.184, -1.216, -1.264, -1.24, - -1.228, -1.228, -1.172, -1.16, -1.068, -1.12, -1.112, -1.068, -1.064, -0.996, - -1.008, -0.976, -0.924, -0.88, -0.864, -0.824, -0.796, -0.808, -0.812, -0.74, - -0.76, -0.72, -0.744, -0.728, -0.704, -0.692, -0.636, -0.644, -0.656, -0.676, - -0.616 - ] - } - }, - { - "ID": 1705438027130, - "data": { - "x": [ - -0.064, -0.104, -0.14, -0.208, -0.3, -0.316, -0.428, -0.564, -0.456, -0.532, - -0.676, -0.74, -0.728, -0.692, -0.792, -1.024, -1.076, -1.056, -0.968, -0.9, - -0.912, -0.86, -0.876, -0.872, -0.848, -0.848, -0.8, -0.788, -0.748, -0.728, - -0.636, -0.56, -0.532, -0.504, -0.492, -0.432, -0.424, -0.464, -0.428, -0.408, - -0.336, -0.296, -0.252, -0.24, -0.248, -0.28, -0.22, -0.204, -0.128, 0, - -0.168, -0.136, -0.064, -0.088, -0.148, -0.228, -0.26, -0.296, -0.352, -0.392, - -0.376, -0.352, -0.364, -0.436, -0.46, -0.496, -0.52, -0.596, -0.628, -0.624, - -0.628, -0.668, -0.792, -0.808, -0.812, -0.824, -0.84, -0.864, -0.888, -0.924, - -0.936, -0.88, -0.848, -0.888, -0.88, -0.832, -0.768, -0.724, -0.68, -0.664, - -0.664, -0.62, -0.572 - ], - "y": [ - 0.228, 0.212, 0.224, 0.236, 0.192, 0.204, 0.208, 0.34, 0.208, 0.184, 0.164, - 0.148, 0.144, 0.104, 0.064, 0.132, 0.104, 0.124, 0.14, 0.188, 0.208, 0.212, - 0.24, 0.224, 0.212, 0.24, 0.256, 0.288, 0.296, 0.308, 0.324, 0.316, 0.32, - 0.316, 0.348, 0.348, 0.312, 0.308, 0.3, 0.3, 0.276, 0.248, 0.232, 0.252, - 0.248, 0.152, 0.172, 0.204, 0.18, -0.08, 0.176, 0.156, 0.136, 0.16, 0.18, - 0.208, 0.224, 0.204, 0.18, 0.188, 0.2, 0.188, 0.184, 0.168, 0.16, 0.14, 0.108, - 0.104, 0.112, 0.084, 0.052, 0.004, 0.056, 0.056, 0.096, 0.084, 0.092, 0.12, - 0.1, 0.14, 0.152, 0.164, 0.156, 0.184, 0.212, 0.224, 0.228, 0.228, 0.236, - 0.268, 0.276, 0.284, 0.296 - ], - "z": [ - -0.908, -0.98, -0.956, -1.076, -1.096, -1.176, -1.12, -1.06, -1.124, -1.176, - -1.12, -1.112, -1.064, -1.06, -1.024, -0.984, -1.012, -0.964, -0.904, -0.824, - -0.816, -0.748, -0.7, -0.676, -0.64, -0.628, -0.568, -0.56, -0.528, -0.468, - -0.492, -0.488, -0.48, -0.492, -0.472, -0.532, -0.544, -0.6, -0.644, -0.656, - -0.704, -0.732, -0.764, -0.776, -0.82, -0.68, -0.912, -0.988, -0.868, -1.148, - -1.056, -1.152, -1.072, -1.12, -1.088, -1.092, -1.092, -1.152, -1.208, -1.208, - -1.18, -1.172, -1.2, -1.192, -1.184, -1.18, -1.104, -1.076, -1.072, -1.028, - -1.028, -0.984, -0.944, -0.968, -0.96, -0.964, -0.964, -0.952, -0.904, -0.856, - -0.808, -0.788, -0.756, -0.696, -0.708, -0.652, -0.672, -0.64, -0.62, -0.584, - -0.604, -0.592, -0.588 - ] - } - }, - { - "ID": 1705437979405, - "data": { - "x": [ - 0.24, 0.22, 0.104, -0.036, -0.1, -0.096, -0.152, -0.22, -0.256, -0.204, - -0.256, -0.056, -0.028, -0.076, -0.108, -0.088, -0.068, -0.136, -0.28, -0.392, - -0.468, -0.508, -0.52, -0.516, -0.476, -0.46, -0.464, -0.516, -0.616, -0.648, - -0.6, -0.52, -0.48, -0.468, -0.468, -0.46, -0.432, -0.404, -0.392, -0.304, - -0.256, -0.208, -0.204, -0.292, -0.388, -0.488, -0.544, -0.656, -0.736, - -0.792, -0.776, -0.716, -0.668, -0.572, -0.504, -0.484, -0.456, -0.404, -0.38, - -0.356, -0.34, -0.328, -0.324, -0.276, -0.2, -0.148, -0.128, -0.136, -0.104, - 0.016, 0.152, 0.268, 0.244, 0.168, 0.128, 0.096, 0.096, 0.092, 0.04, 0, - -0.028, -0.004, 0.128, 0.184, 0.276, 0.348, 0.364, 0.312, 0.188, 0.036, -0.06, - -0.156, -0.248 - ], - "y": [ - 0.488, 0.44, 0.364, 0.304, 0.268, 0.272, 0.416, 0.436, 0.408, 0.364, 0.364, - 0.216, 0.224, 0.264, 0.26, 0.248, 0.288, 0.344, 0.388, 0.392, 0.392, 0.364, - 0.344, 0.332, 0.308, 0.304, 0.316, 0.336, 0.34, 0.336, 0.312, 0.296, 0.312, - 0.336, 0.336, 0.34, 0.34, 0.364, 0.372, 0.38, 0.376, 0.316, 0.292, 0.308, - 0.296, 0.324, 0.44, 0.54, 0.584, 0.624, 0.708, 0.728, 0.74, 0.748, 0.716, - 0.68, 0.624, 0.592, 0.564, 0.536, 0.524, 0.504, 0.48, 0.464, 0.444, 0.428, - 0.416, 0.408, 0.42, 0.408, 0.412, 0.38, 0.388, 0.408, 0.436, 0.448, 0.436, - 0.448, 0.44, 0.464, 0.452, 0.456, 0.312, 0.424, 0.376, 0.388, 0.36, 0.336, - 0.348, 0.368, 0.412, 0.484, 0.5 - ], - "z": [ - -0.996, -0.96, -0.964, -0.896, -0.82, -0.696, -0.552, -0.52, -0.568, -0.652, - -0.652, -1.104, -1.196, -1.4, -1.516, -1.58, -1.54, -1.456, -1.364, -1.312, - -1.248, -1.208, -1.172, -1.112, -1.072, -1.032, -1.004, -0.996, -1.036, - -1.056, -1.032, -0.996, -0.932, -0.868, -0.864, -0.824, -0.808, -0.764, - -0.708, -0.652, -0.624, -0.632, -0.644, -0.628, -0.612, -0.616, -0.692, - -0.788, -0.884, -0.932, -0.956, -0.936, -0.852, -0.824, -0.812, -0.788, - -0.784, -0.74, -0.732, -0.7, -0.668, -0.64, -0.6, -0.56, -0.552, -0.56, -0.56, - -0.556, -0.528, -0.56, -0.616, -0.7, -0.78, -0.844, -0.88, -0.884, -0.92, - -0.96, -1, -1.004, -0.956, -1.008, -1.024, -1.092, -1.076, -1.092, -1.132, - -1.152, -1.148, -1.132, -1.088, -1.084, -1.06 - ] - } - }, - { - "ID": 1705437977128, - "data": { - "x": [ - -0.084, -0.124, -0.188, -0.112, -0.264, -0.244, -0.092, 0.12, 0.228, 0.16, - 0.316, 0.296, 0.224, -0.084, -0.28, -0.372, -0.372, -0.352, -0.42, -0.596, - -0.792, -0.7, -0.612, -0.696, -0.82, -0.82, -0.824, -0.8, -0.868, -0.968, - -0.94, -0.852, -0.756, -0.684, -0.632, -0.516, -0.456, -0.396, -0.436, -0.476, - -0.416, -0.364, -0.296, -0.292, -0.304, -0.332, -0.324, -0.272, -0.208, - -0.156, -0.112, -0.08, -0.008, 0.016, 0.04, 0.092, 0.14, 0.16, 0.136, 0.144, - 0.168, 0.176, 0.152, 0.236, 0.304, 0.248, 0.22, 0.12, 0.044, 0.04, 0.128, - 0.156, 0.108, -0.044, -0.188, -0.248, -0.256, -0.408, -0.516, -0.484, -0.404, - -0.396, -0.504, -0.592, -0.636, -0.64, -0.636, -0.596, -0.58, -0.52, -0.428 - ], - "y": [ - 0.3, 0.304, 0.392, 0.324, 0.236, 0.268, 0.268, 0.36, 0.256, 0.332, 0.316, 0.5, - 0.288, 0.336, 0.392, 0.448, 0.452, 0.46, 0.46, 0.5, 0.52, 0.44, 0.44, 0.464, - 0.488, 0.464, 0.456, 0.484, 0.536, 0.584, 0.604, 0.584, 0.62, 0.608, 0.58, - 0.56, 0.564, 0.576, 0.592, 0.58, 0.532, 0.492, 0.444, 0.444, 0.452, 0.476, - 0.456, 0.44, 0.4, 0.376, 0.352, 0.356, 0.324, 0.316, 0.296, 0.332, 0.348, - 0.38, 0.392, 0.436, 0.452, 0.384, 0.34, 0.3, 0.236, 0.208, 0.22, 0.232, 0.212, - 0.244, 0.28, 0.308, 0.32, 0.312, 0.332, 0.352, 0.34, 0.372, 0.392, 0.392, - 0.352, 0.34, 0.332, 0.36, 0.436, 0.372, 0.396, 0.412, 0.464, 0.416, 0.428 - ], - "z": [ - -0.652, -0.644, -0.74, -0.748, -0.732, -0.756, -0.924, -0.8, -0.828, -0.816, - -0.872, -0.832, -1.012, -0.992, -1.04, -1.124, -1.144, -1.18, -1.196, -1.236, - -1.2, -1.244, -1.228, -1.112, -1.104, -1.084, -1.04, -0.964, -0.888, -0.856, - -0.772, -0.696, -0.62, -0.564, -0.6, -0.592, -0.536, -0.48, -0.432, -0.448, - -0.48, -0.484, -0.516, -0.464, -0.456, -0.452, -0.46, -0.46, -0.504, -0.544, - -0.62, -0.668, -0.76, -0.8, -0.808, -0.844, -0.832, -0.804, -0.788, -0.816, - -0.84, -0.876, -1, -1.048, -1.356, -1.068, -1.184, -1.252, -1.392, -1.36, - -1.32, -1.256, -1.204, -1.208, -1.248, -1.24, -1.22, -1.212, -1.184, -1.152, - -1.108, -1.084, -1.08, -1.092, -1.184, -1.136, -1.084, -1.044, -1, -1, -1.012 - ] - } - }, - { - "ID": 1705437922352, - "data": { - "x": [ - -0.244, -0.216, -0.076, -0.112, -0.196, -0.184, -0.136, -0.044, 0.064, 0.064, - -0.088, -0.244, -0.416, -0.452, -0.48, -0.516, -0.568, -0.688, -0.728, -0.772, - -0.784, -0.768, -0.732, -0.696, -0.648, -0.576, -0.544, -0.52, -0.504, -0.492, - -0.492, -0.484, -0.436, -0.388, -0.376, -0.352, -0.32, -0.268, -0.252, -0.244, - -0.248, -0.22, -0.208, -0.212, -0.212, -0.18, -0.208, -0.252, -0.32, -0.356, - -0.332, -0.252, -0.228, -0.236, -0.212, -0.148, -0.116, -0.112, -0.088, - -0.056, -0.056, -0.04, 0.032, 0.076, 0.004, -0.148, -0.188, -0.176, -0.176, - -0.264, -0.412, -0.476, -0.42, -0.344, -0.32, -0.312, -0.376, -0.46, -0.436, - -0.348, -0.26, -0.268, -0.376, -0.484, -0.508, -0.5, -0.512, -0.492, -0.488, - -0.456, -0.436, -0.448, -0.46 - ], - "y": [ - 0.664, 0.58, 0.64, 0.796, 0.9, 0.844, 0.764, 0.792, 0.788, 0.78, 0.884, 1.036, - 1.16, 1.228, 1.248, 1.252, 1.264, 1.292, 1.26, 1.264, 1.236, 1.188, 1.176, - 1.136, 1.124, 1.06, 1.004, 0.964, 0.964, 1.008, 1.036, 1.004, 1.004, 1, 0.992, - 0.98, 0.94, 0.92, 0.896, 0.884, 0.884, 0.852, 0.816, 0.792, 0.792, 0.764, - 0.76, 0.728, 0.712, 0.724, 0.728, 0.728, 0.72, 0.7, 0.708, 0.728, 0.708, - 0.696, 0.732, 0.752, 0.76, 0.752, 0.756, 0.684, 0.668, 0.752, 0.9, 0.96, - 0.932, 0.892, 0.94, 1, 1.028, 1.04, 1.04, 1.044, 1.052, 1.06, 1.02, 0.98, - 0.932, 0.916, 0.928, 0.96, 0.996, 0.98, 1.024, 1.028, 1, 0.968, 0.924, 0.928, - 0.9 - ], - "z": [ - -0.524, -0.62, -0.732, -0.652, -0.576, -0.608, -0.648, -0.796, -0.868, -0.848, - -0.744, -0.648, -0.604, -0.576, -0.568, -0.528, -0.504, -0.444, -0.416, -0.38, - -0.36, -0.316, -0.26, -0.2, -0.152, -0.136, -0.116, -0.116, -0.108, -0.044, - -0.004, 0.036, 0.072, 0.072, 0.064, 0.072, 0.068, 0.076, 0.08, 0.088, 0.104, - 0.096, 0.092, 0.068, -0.008, -0.084, -0.092, -0.144, -0.184, -0.224, -0.272, - -0.324, -0.332, -0.352, -0.404, -0.436, -0.452, -0.484, -0.492, -0.532, -0.56, - -0.612, -0.688, -0.74, -0.744, -0.688, -0.624, -0.608, -0.628, -0.656, -0.672, - -0.524, -0.46, -0.468, -0.532, -0.596, -0.604, -0.6, -0.644, -0.66, -0.748, - -0.752, -0.76, -0.676, -0.608, -0.508, -0.392, -0.34, -0.296, -0.304, -0.344, - -0.372, -0.38 - ] - } - }, - { - "ID": 1705437913803, - "data": { - "x": [ - 0.864, 0.94, 1.108, 1.224, 1.232, 1.22, 1.212, 1.228, 1.012, 0.944, 0.86, - 0.804, 0.788, 0.76, 0.732, 0.68, 0.64, 0.676, 0.496, 0.356, 0.204, 0.044, - -0.02, -0.008, -0.028, -0.072, -0.184, -0.324, -0.488, -0.536, -0.488, -0.404, - -0.4, -0.448, -0.316, -0.34, -0.516, -0.652, -0.548, -0.376, -0.444, -0.496, - -0.496, -0.428, -0.344, -0.724, -0.196, 0.044, 0.112, 0.248, 0.328, 0.392, - 0.372, 0.34, 0.296, 0.22, 0.192, 0.212, 0.228, 0.32, 0.332, 0.38, 0.416, - 0.456, 0.5, 0.516, 0.508, 0.496, 0.46, 0.448, 0.444, 0.424, 0.34, 0.324, - 0.344, 0.252, 0.228, 0.18, 0.088, 0.016, 0.012, 0.016, 0.004, -0.024, -0.108, - -0.16, -0.212, -0.316, -0.412, -0.42, -0.38, -0.296, -0.244 - ], - "y": [ - 0.056, 0.036, 0.02, -0.044, -0.104, -0.136, -0.152, 0.064, -0.228, -0.192, - -0.224, -0.2, -0.216, -0.2, -0.188, -0.184, -0.164, -0.08, -0.044, -0.004, - 0.068, 0.176, 0.236, 0.24, 0.232, 0.244, 0.308, 0.36, 0.396, 0.424, 0.4, - 0.368, 0.348, 0.388, 0.36, 0.328, 0.3, 0.332, 0.344, 0.244, 0.068, -0.096, - -0.092, -0.06, -0.02, 0.452, -0.112, -0.112, -0.032, 0.056, 0.152, 0.096, - 0.06, 0.072, 0.072, 0.18, 0.236, 0.212, 0.136, 0.1, 0.092, 0.108, 0.108, - 0.076, 0.04, 0.028, 0.052, 0.096, 0.124, 0.088, 0.064, 0.056, 0.148, 0.26, - 0.304, 0.272, 0.26, 0.308, 0.34, 0.416, 0.452, 0.404, 0.428, 0.456, 0.52, - 0.536, 0.528, 0.552, 0.604, 0.648, 0.696, 0.64, 0.596 - ], - "z": [ - -1.236, -1.128, -0.992, -0.916, -0.844, -0.796, -0.724, -0.672, -0.576, - -0.496, -0.552, -0.448, -0.472, -0.452, -0.38, -0.312, -0.28, -0.18, -0.248, - -0.324, -0.428, -0.468, -0.464, -0.432, -0.48, -0.524, -0.58, -0.66, -0.78, - -0.808, -0.784, -0.732, -0.76, -0.744, -0.744, -0.8, -0.904, -1.032, -1.076, - -1.14, -1.3, -1.504, -1.62, -1.652, -1.604, -1.556, -1.52, -1.432, -1.252, - -1.08, -1.064, -1.1, -1.1, -1.048, -1.044, -1.064, -1.132, -1.184, -1.24, - -1.332, -1.292, -1.268, -1.232, -1.224, -1.18, -1.14, -1.088, -1.016, -0.892, - -0.832, -0.812, -0.836, -0.82, -0.792, -0.748, -0.708, -0.764, -0.736, -0.712, - -0.68, -0.668, -0.68, -0.66, -0.672, -0.656, -0.636, -0.64, -0.692, -0.724, - -0.752, -0.768, -0.772, -0.792 - ] - } - }, - { - "ID": 1705437908508, - "data": { - "x": [ - -0.432, -0.432, -0.404, -0.48, -0.588, -0.9, -0.752, -0.852, -1.02, -1.108, - -1.044, -0.944, -0.888, -0.876, -0.852, -0.756, -0.828, -0.868, -0.908, - -0.928, -0.84, -0.756, -0.66, -0.576, -0.512, -0.484, -0.424, -0.42, -0.436, - -0.408, -0.352, -0.272, -0.216, -0.208, -0.236, -0.188, -0.148, -0.104, - -0.084, -0.08, -0.076, -0.064, -0.08, -0.108, -0.132, -0.188, -0.232, -0.212, - -0.212, -0.288, -0.384, -0.392, -0.372, -0.348, -0.388, -0.528, -0.732, -0.76, - -0.684, -0.732, -0.9, -1.032, -1.092, -1.004, -0.98, -1, -0.972, -0.992, -1, - -1.06, -1.084, -1.052, -1.012, -0.996, -0.904, -0.796, -0.692, -0.564, -0.404, - -0.388, -0.312, -0.32, -0.324, -0.324, -0.364, -0.428, -0.484, -0.508, -0.496, - -0.508, -0.508, -0.508, -0.496 - ], - "y": [ - 0.68, 0.644, 0.576, 0.52, 0.496, 0.492, 0.548, 0.68, 0.704, 0.696, 0.712, - 0.772, 0.804, 0.82, 0.812, 0.84, 0.888, 0.948, 0.94, 0.96, 0.96, 0.972, 0.96, - 0.924, 0.916, 0.888, 0.9, 0.904, 0.88, 0.86, 0.876, 0.832, 0.824, 0.8, 0.74, - 0.716, 0.692, 0.672, 0.628, 0.572, 0.604, 0.608, 0.608, 0.592, 0.572, 0.564, - 0.54, 0.528, 0.54, 0.544, 0.512, 0.512, 0.524, 0.536, 0.524, 0.536, 0.468, - 0.472, 0.492, 0.52, 0.564, 0.596, 0.692, 0.748, 0.764, 0.748, 0.812, 0.876, - 0.872, 0.816, 0.8, 0.86, 0.904, 0.892, 0.892, 0.912, 0.932, 0.936, 0.824, 1, - 0.844, 0.86, 0.832, 0.808, 0.788, 0.776, 0.78, 0.76, 0.756, 0.776, 0.772, - 0.772, 0.776 - ], - "z": [ - -0.252, -0.272, -0.324, -0.252, -0.216, -0.104, -0.072, -0.012, -0.036, - -0.128, -0.248, -0.308, -0.364, -0.424, -0.408, -0.572, -0.464, -0.508, - -0.468, -0.504, -0.452, -0.464, -0.496, -0.58, -0.664, -0.72, -0.704, -0.744, - -0.784, -0.856, -0.884, -0.94, -0.856, -0.84, -0.86, -0.864, -0.832, -0.788, - -0.744, -0.744, -0.716, -0.648, -0.556, -0.516, -0.468, -0.38, -0.312, -0.272, - -0.228, -0.184, -0.16, -0.144, -0.108, -0.048, -0.044, -0.004, 0.02, -0.012, - 0.044, 0.1, 0.144, 0.152, 0.156, 0.128, 0.104, 0.116, 0.172, 0.148, 0.088, - 0.032, -0.032, -0.092, -0.188, -0.34, -0.452, -0.548, -0.592, -0.684, -0.652, - -0.912, -0.672, -0.604, -0.6, -0.584, -0.564, -0.504, -0.504, -0.496, -0.484, - -0.472, -0.46, -0.456, -0.448 - ] - } - }, - { - "ID": 1705437905957, - "data": { - "x": [ - -0.436, -0.42, -0.432, -0.388, -0.36, -0.22, -0.12, -0.156, -0.336, -0.496, - -0.56, -0.6, -0.684, -0.856, -1.036, -1.14, -1.048, -0.908, -0.884, -0.936, - -1.016, -1.056, -1.06, -1.024, -1.028, -1.04, -0.964, -0.872, -0.824, -0.796, - -0.832, -0.868, -0.804, -0.716, -0.64, -0.608, -0.584, -0.572, -0.544, -0.512, - -0.516, -0.5, -0.476, -0.464, -0.448, -0.444, -0.444, -0.364, -0.28, -0.212, - -0.228, -0.312, -0.392, -0.4, -0.376, -0.332, -0.256, -0.232, -0.244, -0.244, - -0.26, -0.396, -0.552, -0.68, -0.836, -0.888, -0.852, -0.928, -0.972, -1.004, - -0.976, -0.928, -0.92, -0.94, -0.952, -0.904, -0.848, -0.828, -0.856, -0.844, - -0.804, -0.78, -0.764, -0.764, -0.732, -0.712, -0.712, -0.692, -0.688, -0.692, - -0.64, -0.6, -0.588 - ], - "y": [ - 0.54, 0.504, 0.48, 0.512, 0.524, 0.6, 0.752, 0.936, 0.916, 0.936, 0.92, 0.992, - 0.992, 1.028, 1.056, 1.072, 1.064, 1.016, 0.976, 0.908, 0.856, 0.848, 0.812, - 0.796, 0.784, 0.792, 0.78, 0.752, 0.744, 0.732, 0.724, 0.708, 0.7, 0.692, - 0.672, 0.672, 0.68, 0.652, 0.644, 0.64, 0.628, 0.6, 0.56, 0.552, 0.516, 0.496, - 0.492, 0.472, 0.508, 0.524, 0.556, 0.592, 0.632, 0.664, 0.66, 0.712, 0.768, - 0.808, 0.812, 0.848, 0.876, 0.908, 0.932, 0.984, 1.012, 1.02, 1.004, 0.968, - 0.916, 0.86, 0.868, 0.816, 0.784, 0.74, 0.72, 0.692, 0.684, 0.676, 0.7, 0.712, - 0.732, 0.74, 0.764, 0.788, 0.776, 0.756, 0.776, 0.764, 0.752, 0.732, 0.716, - 0.724, 0.712 - ], - "z": [ - -0.288, -0.312, -0.356, -0.36, -0.44, -0.7, -0.964, -0.852, -0.704, -0.612, - -0.592, -0.588, -0.524, -0.468, -0.368, -0.364, -0.364, -0.356, -0.328, - -0.288, -0.248, -0.256, -0.296, -0.292, -0.232, -0.204, -0.176, -0.148, - -0.132, -0.072, -0.004, 0.08, 0.132, 0.164, 0.188, 0.216, 0.204, 0.164, 0.088, - 0.032, 0.044, 0.04, 0.068, 0.06, 0.016, -0.048, -0.124, -0.208, -0.296, - -0.404, -0.428, -0.4, -0.38, -0.408, -0.512, -0.624, -0.7, -0.712, -0.76, - -0.8, -0.872, -0.88, -0.824, -0.684, -0.6, -0.528, -0.468, -0.384, -0.292, - -0.272, -0.28, -0.3, -0.296, -0.276, -0.3, -0.32, -0.34, -0.372, -0.388, - -0.376, -0.396, -0.412, -0.404, -0.376, -0.38, -0.368, -0.364, -0.396, -0.4, - -0.38, -0.356, -0.32, -0.328 - ] - } - }, - { - "ID": 1705437896254, - "data": { - "x": [ - -0.632, -0.608, -0.592, -0.584, -0.644, -0.868, -0.492, -0.528, -0.712, - -0.784, -0.708, -0.588, -0.632, -0.752, -0.876, -0.852, -0.808, -0.84, -0.944, - -0.936, -0.9, -0.936, -1.02, -1.104, -1.084, -1.076, -1.048, -1.048, -1.112, - -1.144, -1.188, -1.208, -1.228, -1.288, -1.296, -1.264, -1.2, -1.18, -1.132, - -1.02, -0.956, -0.912, -0.872, -0.848, -0.824, -0.876, -0.892, -0.844, -0.808, - -0.732, -0.716, -0.78, -0.852, -0.76, -0.62, -0.588, -0.636, -0.632, -0.564, - -0.52, -0.508, -0.52, -0.484, -0.412, -0.432, -0.428, -0.444, -0.496, -0.48, - -0.452, -0.46, -0.508, -0.516, -0.512, -0.448, -0.4, -0.404, -0.46, -0.532, - -0.568, -0.484, -0.38, -0.444, -0.572, -0.728, -0.728, -0.616, -0.644, -0.656, - -0.704, -0.688, -0.644, -0.652 - ], - "y": [ - 0.364, 0.344, 0.352, 0.38, 0.396, 0.604, 0.4, 0.428, 0.468, 0.48, 0.472, - 0.436, 0.42, 0.408, 0.42, 0.424, 0.38, 0.304, 0.26, 0.244, 0.244, 0.232, - 0.184, 0.176, 0.112, 0.128, 0.14, 0.12, 0.092, 0.072, 0.056, 0.076, 0.104, - 0.124, 0.14, 0.164, 0.2, 0.216, 0.224, 0.248, 0.28, 0.308, 0.324, 0.348, 0.38, - 0.404, 0.408, 0.408, 0.384, 0.372, 0.356, 0.372, 0.3, 0.284, 0.352, 0.372, - 0.38, 0.364, 0.412, 0.32, 0.36, 0.32, 0.308, 0.276, 0.332, 0.34, 0.324, 0.344, - 0.372, 0.368, 0.368, 0.408, 0.464, 0.476, 0.44, 0.424, 0.468, 0.484, 0.496, - 0.468, 0.46, 0.484, 0.5, 0.504, 0.464, 0.448, 0.432, 0.396, 0.352, 0.34, 0.32, - 0.32, 0.316 - ], - "z": [ - -0.524, -0.552, -0.576, -0.58, -0.58, -0.724, -0.484, -0.496, -0.556, -0.524, - -0.552, -0.58, -0.648, -0.732, -0.784, -0.596, -0.644, -0.72, -0.756, -0.744, - -0.724, -0.7, -0.684, -0.716, -0.716, -0.68, -0.668, -0.656, -0.708, -0.736, - -0.696, -0.712, -0.684, -0.7, -0.688, -0.644, -0.596, -0.556, -0.572, -0.552, - -0.524, -0.496, -0.472, -0.504, -0.464, -0.368, -0.412, -0.42, -0.42, -0.436, - -0.372, -0.352, -0.352, -0.4, -0.372, -0.336, -0.292, -0.376, -0.392, -0.444, - -0.456, -0.436, -0.504, -0.56, -0.58, -0.62, -0.68, -0.716, -0.76, -0.76, - -0.768, -0.764, -0.792, -0.784, -0.76, -0.74, -0.728, -0.66, -0.7, -0.756, - -0.86, -0.776, -0.76, -0.812, -0.876, -0.872, -0.908, -0.96, -0.976, -0.996, - -1.032, -0.976, -0.96 - ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - } -] diff --git a/src/__tests__/fixtures/test-data-shake-still.json b/src/__tests__/fixtures/test-data-shake-still.json deleted file mode 100644 index 23acfa6c3..000000000 --- a/src/__tests__/fixtures/test-data-shake-still.json +++ /dev/null @@ -1,573 +0,0 @@ -[ - { - "ID": 1705437793875, - "name": "Shake", - "recordings": [ - { - "ID": 1718706806260, - "data": { - "x": [ - 2.04, 2.04, 2.008, 1.516, 1.152, 0.612, 0.056, -0.528, -1.224, -1.716, -1.632, - -1.072, -0.512, 0.408, 1.4, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.68, 1.304, - 0.836, 0.248, -0.412, -1.152, -1.776, -1.868, -1.384, -0.744, 0.232, 1.376, - 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.584, 1.156, 0.656, 0.096, -0.6, -1.352, - -1.792, -1.644, -0.996, -0.316, 0.612, 1.648, 2.04, 2.04, 2.04, 2.04, 2.04, - 2.04, 1.5, 1.096, 0.6, -0.012, -0.656, -1.272, -1.596, -1.408, -0.872, -0.22, - 0.544, 1.488, 2.036, 2.04, 2.04, 2.04, 2.04, 2.04, 1.948, 1.42, 0.928, 0.428, - -0.216, -0.788, -1.272, -1.604, -1.396, -0.856, -0.268, 0.544, 1.488, 2.04, - 2.04, 2.04 - ], - "y": [ - 1.236, 0.976, 0.7, 0.58, 0.496, 0.316, 0.176, 0.004, -0.152, -0.248, -0.312, - -0.372, -0.356, -0.024, 0.372, 0.816, 1.24, 1.416, 1.416, 1.216, 0.932, 0.688, - 0.552, 0.388, 0.208, -0.028, -0.188, -0.292, -0.388, -0.464, -0.504, -0.268, - 0.248, 0.78, 1.28, 1.52, 1.492, 1.26, 0.924, 0.628, 0.48, 0.332, 0.164, - -0.032, -0.172, -0.288, -0.428, -0.416, -0.34, -0.036, 0.5, 0.996, 1.296, - 1.52, 1.42, 1.168, 0.804, 0.6, 0.484, 0.344, 0.164, -0.028, -0.168, -0.264, - -0.304, -0.3, -0.18, 0.084, 0.512, 0.832, 1.08, 1.228, 1.3, 1.268, 1.064, - 0.764, 0.62, 0.452, 0.312, 0.12, -0.088, -0.184, -0.324, -0.404, -0.392, - -0.308, -0.024, 0.408, 0.844, 1.252, 1.536 - ], - "z": [ - 2.04, 2.024, 1.264, 0.56, 0.044, -0.34, -0.664, -1.004, -1.416, -1.656, - -1.488, -0.916, -0.496, -0.2, 0.276, 0.928, 1.888, 2.04, 2.04, 2.04, 1.448, - 0.712, 0.192, -0.2, -0.576, -0.888, -1.384, -1.7, -1.568, -1.144, -0.636, - -0.208, 0.288, 0.952, 1.824, 2.04, 2.04, 2.04, 1.416, 0.68, 0.112, -0.328, - -0.676, -1, -1.424, -1.568, -1.324, -0.852, -0.404, 0.104, 0.492, 1.204, - 1.948, 2.04, 2.04, 1.98, 1.352, 0.632, 0.124, -0.352, -0.744, -0.988, -1.328, - -1.368, -1.192, -0.812, -0.388, -0.004, 0.368, 0.892, 1.448, 1.944, 2.04, - 2.036, 1.696, 1.1, 0.38, -0.032, -0.4, -0.732, -0.844, -1.196, -1.332, -1.12, - -0.764, -0.428, -0.068, 0.4, 0.708, 1.248, 1.852 - ] - } - }, - { - "ID": 1718706797873, - "data": { - "x": [ - -0.732, -0.276, 0.012, 0.188, 0.368, 0.704, 1.132, 1.32, 1.36, 1.184, 0.884, - 0.628, 0.396, 0.156, -0.036, -0.388, -0.748, -1.092, -0.984, -0.592, -0.212, - 0.056, 0.348, 0.612, 0.892, 1.228, 1.304, 1.272, 1.04, 0.792, 0.628, 0.452, - 0.168, -0.14, -0.5, -0.9, -1.008, -0.736, -0.308, 0.064, 0.284, 0.532, 0.84, - 1.216, 1.42, 1.384, 1.148, 0.928, 0.736, 0.536, 0.328, 0.092, -0.156, -0.504, - -0.872, -1.112, -0.776, -0.324, 0.036, 0.292, 0.472, 0.772, 1.248, 1.452, - 1.488, 1.3, 0.996, 0.736, 0.492, 0.268, 0.032, -0.268, -0.672, -1.088, -1.1, - -0.7, -0.228, 0.116, 0.44, 0.644, 0.928, 1.196, 1.392, 1.328, 1.088, 0.808, - 0.584, 0.368, 0.144, -0.108, -0.48 - ], - "y": [ - -1.64, -0.936, -0.288, 0.332, 1.16, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, - 1.276, 0.536, -0.084, -0.608, -1.136, -1.7, -1.756, -1.372, -0.9, -0.376, - 0.52, 1.464, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.84, 1.208, 0.46, -0.22, - -0.972, -1.644, -1.968, -1.796, -1.296, -0.66, 0.092, 1.008, 2.04, 2.04, 2.04, - 2.04, 2.04, 2.04, 2.036, 1.344, 0.704, 0.104, -0.516, -1.112, -1.672, -2.036, - -1.672, -1.064, -0.416, 0.46, 1.224, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 2, - 1.332, 0.704, 0.156, -0.512, -1.228, -1.816, -1.864, -1.424, -0.768, -0.08, - 0.832, 1.788, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.7, 1.14, 0.524, -0.06, - -0.744 - ], - "z": [ - -0.536, -0.372, -0.476, -0.588, -0.716, -0.54, -0.004, 0.384, 0.452, 0.28, - -0.072, -0.48, -0.68, -0.752, -0.636, -0.74, -0.876, -0.952, -0.732, -0.408, - -0.192, -0.224, -0.34, -0.292, -0.12, 0.292, 0.46, 0.464, 0.156, -0.1, -0.376, - -0.652, -0.844, -0.932, -0.868, -0.864, -0.696, -0.424, -0.152, -0.156, -0.42, - -0.512, -0.488, -0.04, 0.272, 0.384, 0.16, -0.076, -0.376, -0.604, -0.668, - -0.616, -0.508, -0.54, -0.688, -0.748, -0.548, -0.404, -0.392, -0.56, -0.616, - -0.372, 0.196, 0.584, 0.764, 0.624, 0.16, -0.24, -0.54, -0.696, -0.78, -0.756, - -0.792, -0.904, -0.8, -0.5, -0.264, -0.352, -0.348, -0.312, 0.024, 0.396, - 0.696, 0.736, 0.476, 0.136, -0.236, -0.516, -0.62, -0.66, -0.684 - ] - } - }, - { - "ID": 1718706789113, - "data": { - "x": [ - 2.04, 2.04, 2.04, 2.04, 1.856, 1.276, 0.684, 0.096, -0.62, -1.172, -1.54, - -1.592, -1.34, -0.828, -0.212, 0.588, 1.496, 2.04, 2.04, 2.04, 2.04, 2.04, - 2.04, 2.04, 1.504, 0.88, 0.268, -0.368, -0.896, -1.464, -1.768, -1.608, - -1.104, -0.452, 0.248, 1.216, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.66, - 1.088, 0.532, -0.084, -0.672, -1.288, -1.596, -1.6, -1.316, -0.76, 0.004, - 0.784, 1.784, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.872, 1.344, 0.716, 0.168, - -0.436, -1.032, -1.548, -1.752, -1.528, -1.028, -0.1, 1.092, 2.04, 2.04, 2.04, - 2.04, 2.04, 2.04, 2.04, 1.616, 1.088, 0.408, -0.196, -0.88, -1.46, -1.552, - -1.448, -0.96 - ], - "y": [ - -0.248, -0.212, -0.224, -0.232, -0.228, -0.196, -0.132, -0.08, 0.036, 0.232, - 0.392, 0.332, 0.136, -0.052, -0.176, -0.232, -0.284, -0.268, -0.196, -0.208, - -0.192, -0.228, -0.276, -0.26, -0.232, -0.16, -0.1, -0.008, 0.184, 0.376, - 0.452, 0.26, -0.016, -0.26, -0.364, -0.356, -0.276, -0.244, -0.172, -0.108, - -0.144, -0.184, -0.232, -0.216, -0.156, -0.092, -0.032, 0.052, 0.232, 0.368, - 0.316, 0.124, -0.124, -0.272, -0.336, -0.368, -0.376, -0.396, -0.344, -0.328, - -0.336, -0.312, -0.264, -0.244, -0.176, -0.124, -0.076, 0.112, 0.404, 0.464, - 0.256, -0.044, -0.3, -0.504, -0.516, -0.52, -0.484, -0.448, -0.42, -0.368, - -0.312, -0.244, -0.184, -0.12, 0.028, 0.228, 0.44, 0.396, 0.216, -0.076 - ], - "z": [ - 1.396, 1.324, 1.044, 0.564, 0.164, -0.164, -0.396, -0.564, -0.652, -0.892, - -1.004, -0.796, -0.512, -0.328, -0.28, -0.176, 0.064, 0.496, 0.88, 1.22, - 1.208, 1.08, 0.8, 0.316, -0.084, -0.404, -0.544, -0.616, -0.844, -0.996, - -0.96, -0.632, -0.28, -0.096, 0.076, 0.12, 0.264, 0.576, 0.952, 1.128, 1.192, - 1.008, 0.608, 0.148, -0.164, -0.42, -0.572, -0.684, -0.852, -0.956, -0.76, - -0.596, -0.336, -0.22, -0.08, 0.104, 0.536, 1, 1.124, 1.12, 1.028, 0.716, - 0.288, -0.02, -0.288, -0.468, -0.68, -0.94, -1.148, -1.116, -0.692, -0.292, - -0.072, -0.052, 0.04, 0.336, 0.8, 1.06, 1.036, 0.748, 0.368, -0.02, -0.308, - -0.496, -0.672, -0.804, -0.984, -0.864, -0.544, -0.2 - ] - } - }, - { - "ID": 1718706779890, - "data": { - "x": [ - -1.548, -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, -1.484, -0.74, - -0.032, 0.68, 1.348, 1.836, 2.04, 1.992, 1.532, 0.892, 0.192, -0.668, -1.624, - -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, -1.516, -0.944, -0.368, - 0.308, 0.94, 1.572, 2.04, 2.04, 1.688, 1.068, 0.444, -0.396, -1.288, -2.04, - -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, -1.748, -1.164, -0.664, -0.16, - 0.368, 0.788, 1.16, 1.5, 1.608, 1.38, 0.828, 0.272, -0.352, -1.188, -2.04, - -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, -1.684, -1.044, -0.56, 0.024, 0.768, - 1.476, 1.768, 1.728, 1.38, 0.768, 0.336, -0.392, -1.576, -2.04, -2.04, -2.04, - -2.04, -2.04, -2.04, -2.04, -1.476, -0.944 - ], - "y": [ - 0.588, 0.692, 0.696, 0.708, 0.804, 0.704, 0.58, 0.496, 0.36, 0.248, 0.096, - -0.12, -0.384, -0.58, -0.732, -0.7, -0.464, -0.124, 0.144, 0.32, 0.4, 0.536, - 0.652, 0.632, 0.628, 0.58, 0.508, 0.404, 0.3, 0.224, 0.108, -0.088, -0.232, - -0.436, -0.72, -0.72, -0.532, -0.236, 0.008, 0.272, 0.412, 0.396, 0.416, - 0.516, 0.54, 0.484, 0.404, 0.232, 0.104, 0.048, -0.024, -0.108, -0.216, - -0.264, -0.348, -0.472, -0.556, -0.496, -0.308, -0.168, -0.048, 0.056, 0.236, - 0.204, 0.292, 0.388, 0.356, 0.324, 0.176, 0.076, 0.012, 0.008, -0.032, -0.196, - -0.444, -0.572, -0.544, -0.408, -0.156, -0.044, 0.1, 0.352, 0.212, 0.1, 0.028, - 0.036, 0.092, 0.108, 0.012, -0.072, -0.112 - ], - "z": [ - -0.832, -0.824, -0.684, -0.528, -0.164, 0.232, 0.268, -0.156, -0.62, -0.94, - -0.916, -0.732, -0.428, -0.128, 0.06, 0.26, 0.38, 0.248, -0.052, -0.464, - -0.716, -0.932, -0.736, -0.372, 0.008, 0.252, 0.224, -0.156, -0.484, -0.712, - -0.764, -0.632, -0.392, -0.088, 0.016, 0.104, 0.208, 0.28, 0.14, -0.324, - -0.66, -0.78, -0.572, -0.18, 0.004, 0.04, 0.02, -0.1, -0.344, -0.54, -0.668, - -0.676, -0.508, -0.292, -0.084, 0.052, 0.024, 0.128, 0.148, 0.2, -0.116, - -0.52, -0.62, -0.408, 0.024, 0.328, 0.388, 0.232, -0.116, -0.444, -0.564, - -0.648, -0.664, -0.592, -0.464, -0.2, 0.148, 0.492, 0.664, 0.528, 0.188, - -0.332, -0.632, -0.64, -0.468, -0.252, -0.02, 0.132, 0.028, -0.18, -0.432 - ] - } - }, - { - "ID": 1718706773634, - "data": { - "x": [ - -0.892, -0.768, -0.66, -0.468, -0.236, -0.028, 0.168, 0.56, 1.188, 1.368, - 0.772, 0.044, -0.28, -0.448, -0.552, -0.8, -1.128, -1.216, -1.164, -0.964, - -0.672, -0.404, -0.156, 0.028, 0.276, 0.704, 1.336, 1.444, 0.784, 0.096, - -0.236, -0.408, -0.624, -1.048, -1.364, -1.356, -1.224, -1.016, -0.736, - -0.424, -0.188, 0.032, 0.216, 0.448, 0.804, 1.252, 1.068, 0.544, 0.1, -0.128, - -0.324, -0.712, -1.136, -1.492, -1.496, -1.224, -0.792, -0.436, -0.2, 0.048, - 0.268, 0.66, 1.092, 1.38, 1.036, 0.352, -0.088, -0.32, -0.516, -0.876, -1.232, - -1.28, -1.232, -1.016, -0.732, -0.432, -0.212, 0.036, 0.296, 0.788, 1.2, - 1.192, 0.668, 0.068, -0.224, -0.464, -0.712, -0.916, -1.096, -1.132 - ], - "y": [ - -2.04, -2.04, -2.04, -1.98, -1.152, -0.24, 0.632, 1.668, 2.04, 2.04, 2.04, - 1.408, 0.456, -0.696, -1.936, -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, - -1.556, -0.8, -0.112, 0.664, 1.672, 2.04, 2.04, 2.04, 1.104, 0.228, -0.928, - -2.032, -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, -1.704, -1.04, -0.416, - 0.284, 1.172, 1.904, 2.04, 2.04, 1.616, 0.724, -0.028, -1.208, -2.04, -2.04, - -2.04, -2.04, -2.04, -2.04, -1.924, -1.132, -0.32, 0.432, 1.292, 2.04, 2.04, - 2.04, 1.516, 0.7, -0.328, -1.54, -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, - -1.92, -1.044, -0.168, 0.744, 1.812, 2.04, 2.04, 2.024, 1.124, 0.34, -0.54, - -1.588, -2.04, -2.04, -2.04 - ], - "z": [ - 0.532, 0.264, -0.124, -0.568, -0.896, -0.932, -0.804, -0.712, -0.792, -0.724, - -0.376, -0.108, -0.356, -0.676, -0.76, -0.472, 0.228, 0.66, 0.732, 0.388, - -0.172, -0.628, -0.816, -0.8, -0.712, -0.732, -0.928, -0.856, -0.484, -0.288, - -0.428, -0.728, -0.696, -0.26, 0.312, 0.732, 0.744, 0.42, -0.092, -0.468, - -0.852, -0.928, -0.884, -0.712, -0.64, -0.588, -0.38, -0.18, -0.188, -0.476, - -0.748, -0.56, -0.016, 0.66, 1.004, 0.716, 0.012, -0.556, -0.824, -0.936, - -0.852, -0.768, -0.744, -0.676, -0.432, -0.096, -0.208, -0.584, -0.872, - -0.624, -0.108, 0.268, 0.432, 0.232, -0.232, -0.668, -0.916, -0.996, -0.944, - -0.828, -0.596, -0.304, 0.024, 0.108, -0.204, -0.544, -0.704, -0.704, -0.5, - -0.284 - ] - } - }, - { - "ID": 1718706765639, - "data": { - "x": [ - -0.228, -0.092, -0.24, -0.212, -0.136, -0.076, -0.08, -0.212, -0.316, -0.444, - -0.696, -0.808, -0.86, -0.704, -0.46, -0.368, -0.268, -0.216, -0.16, -0.108, - -0.136, -0.192, -0.272, -0.24, -0.212, -0.108, -0.108, -0.324, -0.548, -0.764, - -0.916, -0.948, -0.836, -0.648, -0.516, -0.46, -0.38, -0.308, -0.296, -0.252, - -0.172, -0.144, -0.072, 0.008, 0.052, 0.036, -0.096, -0.304, -0.596, -0.748, - -0.96, -0.884, -0.656, -0.42, -0.32, -0.308, -0.296, -0.208, -0.212, -0.196, - -0.156, -0.184, -0.232, -0.276, -0.304, -0.288, -0.412, -0.444, -0.424, - -0.548, -0.488, -0.436, -0.304, -0.252, -0.328, -0.312, -0.352, -0.312, -0.28, - -0.312, -0.268, -0.336, -0.292, -0.244, -0.188, -0.24, -0.32, -0.636, -0.564, - -0.672, -0.52 - ], - "y": [ - 0.156, 0.344, 0.556, 0.664, 0.652, 0.508, 0.236, -0.128, -0.548, -1.116, - -1.524, -1.8, -1.712, -1.388, -1.22, -1.036, -0.796, -0.548, -0.284, 0.016, - 0.416, 0.708, 0.864, 0.816, 0.612, 0.304, -0.028, -0.492, -1.044, -1.504, - -1.704, -1.764, -1.592, -1.328, -1.112, -0.9, -0.684, -0.488, -0.284, -0.04, - 0.284, 0.604, 0.804, 0.796, 0.588, 0.28, -0.128, -0.704, -1.212, -1.608, - -1.796, -1.776, -1.536, -1.248, -1.012, -0.748, -0.52, -0.324, -0.072, 0.232, - 0.472, 0.6, 0.672, 0.596, 0.42, 0.132, -0.296, -0.904, -1.492, -1.872, -2.008, - -1.804, -1.52, -1.284, -1.06, -0.864, -0.644, -0.448, -0.148, 0.208, 0.504, - 0.716, 0.788, 0.72, 0.46, 0.124, -0.38, -0.9, -1.348, -1.612, -1.752 - ], - "z": [ - 0.804, 1.304, 1.548, 1.548, 1.308, 0.928, 0.388, -0.352, -1.12, -1.984, -2.04, - -2.04, -2.04, -2.04, -2.04, -2.008, -1.324, -0.656, -0.016, 0.58, 1.032, 1.44, - 1.764, 1.648, 1.28, 0.764, 0.08, -0.788, -1.712, -2.04, -2.04, -2.04, -2.04, - -2.04, -2.04, -1.836, -1.172, -0.472, 0.104, 0.592, 1.116, 1.676, 1.86, 1.72, - 1.248, 0.568, -0.144, -1.124, -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, - -1.976, -1.42, -0.844, -0.188, 0.432, 0.872, 1.264, 1.5, 1.46, 1.112, 0.66, - 0.164, -0.528, -1.348, -2.04, -2.04, -2.04, -2.04, -2.04, -2.04, -1.852, - -1.204, -0.708, -0.148, 0.456, 1.052, 1.464, 1.624, 1.476, 1.176, 0.716, 0.12, - -0.54, -1.46, -2.04, -2.04, -2.04 - ] - } - }, - { - "ID": 1718706760274, - "data": { - "x": [ - -0.2, -0.024, 0.12, 0.308, 0.468, 0.468, 0.292, 0.004, -0.26, -0.404, -0.484, - -0.6, -0.68, -0.712, -0.712, -0.632, -0.524, -0.408, -0.18, 0.004, 0.176, - 0.304, 0.416, 0.404, 0.28, 0.092, -0.14, -0.296, -0.444, -0.596, -0.668, -0.7, - -0.652, -0.592, -0.52, -0.448, -0.256, -0.092, 0.056, 0.212, 0.432, 0.592, - 0.432, 0.084, -0.2, -0.376, -0.504, -0.628, -0.772, -0.752, -0.76, -0.676, - -0.612, -0.492, -0.3, -0.104, 0.084, 0.264, 0.464, 0.524, 0.336, 0.024, - -0.236, -0.372, -0.528, -0.636, -0.74, -0.784, -0.788, -0.672, -0.524, -0.476, - -0.276, -0.156, 0.036, 0.24, 0.392, 0.476, 0.276, 0.016, -0.236, -0.364, - -0.476, -0.624, -0.752, -0.812, -0.84, -0.72, -0.636, -0.524, -0.252 - ], - "y": [ - -0.528, -0.732, -0.76, -0.728, -0.64, -0.552, -0.476, -0.412, -0.332, -0.276, - -0.26, -0.136, 0.188, 0.536, 0.688, 0.544, 0.192, -0.172, -0.476, -0.664, - -0.712, -0.6, -0.492, -0.364, -0.32, -0.276, -0.232, -0.192, -0.16, -0.012, - 0.18, 0.444, 0.564, 0.516, 0.276, -0.068, -0.372, -0.516, -0.54, -0.512, - -0.48, -0.508, -0.444, -0.36, -0.284, -0.284, -0.28, -0.176, 0.052, 0.344, - 0.544, 0.444, 0.184, -0.16, -0.388, -0.516, -0.596, -0.552, -0.444, -0.42, - -0.316, -0.228, -0.188, -0.228, -0.172, -0.064, 0.076, 0.316, 0.536, 0.496, - 0.236, -0.092, -0.376, -0.516, -0.564, -0.524, -0.456, -0.488, -0.396, -0.328, - -0.344, -0.396, -0.332, -0.164, 0.08, 0.312, 0.44, 0.296, 0.004, -0.304, - -0.524 - ], - "z": [ - 1.668, 0.78, -0.188, -1.188, -1.884, -2.04, -1.928, -1.268, -0.472, 0.396, - 1.224, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.5, 0.64, -0.212, -0.976, - -1.52, -1.804, -1.704, -1.184, -0.496, 0.236, 1.08, 2.008, 2.04, 2.04, 2.04, - 2.04, 2.04, 2.04, 1.644, 0.88, 0.088, -0.884, -1.732, -2.04, -1.964, -1.328, - -0.496, 0.332, 1.204, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.472, 0.708, - -0.176, -0.996, -1.64, -1.944, -1.676, -1.064, -0.396, 0.332, 1.18, 2.04, - 2.04, 2.04, 2.04, 2.04, 2.04, 2.04, 1.556, 0.744, -0.108, -0.96, -1.608, - -1.956, -1.732, -1.116, -0.348, 0.552, 1.556, 2.04, 2.04, 2.04, 2.04, 2.04, - 2.04, 1.9, 1.18 - ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - }, - { - "ID": 1705437833024, - "name": "Still", - "recordings": [ - { - "ID": 1718706751151, - "data": { - "x": [ - 0.444, 0.416, 0.412, 0.416, 0.44, 0.428, 0.44, 0.404, 0.432, 0.432, 0.428, - 0.424, 0.416, 0.412, 0.416, 0.424, 0.436, 0.424, 0.412, 0.42, 0.42, 0.428, - 0.428, 0.416, 0.412, 0.456, 0.424, 0.412, 0.404, 0.412, 0.416, 0.428, 0.436, - 0.412, 0.412, 0.396, 0.42, 0.436, 0.42, 0.416, 0.408, 0.4, 0.388, 0.404, - 0.428, 0.408, 0.404, 0.408, 0.42, 0.44, 0.42, 0.4, 0.396, 0.432, 0.424, 0.396, - 0.4, 0.392, 0.392, 0.424, 0.416, 0.408, 0.412, 0.412, 0.412, 0.408, 0.404, - 0.42, 0.424, 0.404, 0.4, 0.416, 0.412, 0.408, 0.388, 0.396, 0.408, 0.392, - 0.396, 0.404, 0.416, 0.396, 0.408, 0.404, 0.42, 0.408, 0.396, 0.38, 0.392, - 0.4, 0.42 - ], - "y": [ - -0.828, -0.82, -0.82, -0.808, -0.804, -0.804, -0.804, -0.828, -0.816, -0.808, - -0.816, -0.808, -0.816, -0.82, -0.816, -0.82, -0.816, -0.82, -0.816, -0.816, - -0.808, -0.808, -0.824, -0.816, -0.824, -0.864, -0.808, -0.812, -0.824, - -0.824, -0.824, -0.812, -0.812, -0.82, -0.824, -0.836, -0.84, -0.816, -0.812, - -0.816, -0.812, -0.804, -0.804, -0.804, -0.836, -0.824, -0.824, -0.828, - -0.824, -0.828, -0.816, -0.816, -0.828, -0.824, -0.816, -0.804, -0.8, -0.804, - -0.812, -0.816, -0.82, -0.816, -0.824, -0.824, -0.824, -0.82, -0.824, -0.82, - -0.828, -0.824, -0.828, -0.836, -0.816, -0.836, -0.812, -0.816, -0.82, -0.816, - -0.812, -0.816, -0.816, -0.828, -0.828, -0.824, -0.824, -0.816, -0.816, - -0.812, -0.82, -0.812, -0.824 - ], - "z": [ - 0.384, 0.384, 0.384, 0.38, 0.392, 0.376, 0.376, 0.372, 0.368, 0.384, 0.384, - 0.392, 0.392, 0.384, 0.376, 0.372, 0.388, 0.4, 0.388, 0.376, 0.38, 0.384, - 0.392, 0.384, 0.376, 0.36, 0.408, 0.408, 0.38, 0.368, 0.364, 0.388, 0.4, - 0.392, 0.4, 0.38, 0.376, 0.392, 0.404, 0.4, 0.4, 0.372, 0.372, 0.38, 0.388, - 0.372, 0.376, 0.38, 0.392, 0.404, 0.404, 0.4, 0.376, 0.384, 0.4, 0.38, 0.388, - 0.372, 0.38, 0.4, 0.396, 0.4, 0.392, 0.396, 0.392, 0.376, 0.384, 0.404, 0.408, - 0.392, 0.384, 0.388, 0.388, 0.404, 0.396, 0.408, 0.396, 0.388, 0.388, 0.408, - 0.404, 0.4, 0.392, 0.396, 0.392, 0.408, 0.4, 0.392, 0.396, 0.392, 0.408 - ] - } - }, - { - "ID": 1718706742225, - "data": { - "x": [ - -1.024, -1.004, -0.976, -0.98, -1.024, -1.04, -1.02, -0.992, -0.98, -1.008, - -1.032, -1.024, -1.012, -1.004, -1.008, -1.016, -1.04, -1.012, -0.984, -0.988, - -1.008, -1.004, -0.996, -1.012, -0.988, -0.976, -0.996, -1.004, -1.016, - -0.984, -0.972, -0.984, -1.008, -1.032, -1.036, -1, -0.992, -1.032, -1.036, - -1.036, -0.996, -0.984, -0.996, -1.008, -1.032, -1.024, -0.984, -0.984, - -1.008, -1.024, -1.036, -1.012, -0.992, -1.024, -1.008, -0.976, -1.016, - -0.984, -0.984, -1.012, -1.036, -1.016, -1.016, -1, -1.016, -1.036, -1.004, - -0.996, -0.988, -1.004, -1.016, -1.012, -1.008, -0.984, -1, -1.016, -1.032, - -0.992, -0.984, -1.012, -1.024, -1.036, -1.004, -0.98, -0.992, -1.032, -1.016, - -0.996, -0.988, -1.016, -1.036 - ], - "y": [ - 0.028, 0.02, 0.008, 0, 0.016, 0.02, 0.032, 0.02, 0.016, 0.016, 0.032, 0.04, - 0.056, 0.056, 0.036, 0.024, 0.012, 0.004, 0.004, 0.004, 0.008, 0.012, 0.016, - 0.02, 0.02, 0.02, 0.02, 0.016, 0.008, 0.008, 0, 0, 0.016, 0.036, 0.032, 0.024, - 0.02, 0.028, 0.028, 0.028, 0.012, 0.02, 0.032, 0.012, 0.008, 0.012, 0.016, - 0.004, 0.012, 0.032, 0.028, 0.032, 0.008, 0.008, 0.012, 0.004, -0.004, 0.012, - 0.008, 0.012, 0.02, 0.028, 0.016, 0.02, 0.004, 0.02, 0.036, 0.048, 0.036, - 0.012, 0.024, 0.032, 0.028, 0.012, 0, 0.004, 0.012, 0.008, 0, 0.012, 0.02, - 0.036, 0.028, 0.016, 0.024, 0.02, 0.012, 0.02, 0.02, 0.032, 0.024 - ], - "z": [ - -0.22, -0.188, -0.172, -0.172, -0.192, -0.216, -0.204, -0.2, -0.188, -0.176, - -0.172, -0.2, -0.192, -0.164, -0.156, -0.184, -0.236, -0.232, -0.224, -0.208, - -0.2, -0.184, -0.196, -0.208, -0.192, -0.196, -0.196, -0.212, -0.204, -0.196, - -0.192, -0.204, -0.208, -0.196, -0.196, -0.164, -0.14, -0.16, -0.176, -0.204, - -0.196, -0.168, -0.144, -0.156, -0.22, -0.212, -0.184, -0.168, -0.204, -0.204, - -0.2, -0.184, -0.164, -0.196, -0.184, -0.172, -0.192, -0.176, -0.152, -0.16, - -0.204, -0.192, -0.204, -0.18, -0.188, -0.208, -0.204, -0.172, -0.144, -0.16, - -0.172, -0.184, -0.18, -0.18, -0.2, -0.224, -0.22, -0.18, -0.16, -0.176, - -0.188, -0.192, -0.188, -0.168, -0.14, -0.164, -0.188, -0.188, -0.18, -0.188, - -0.184 - ] - } - }, - { - "ID": 1718706735565, - "data": { - "x": [ - -0.06, -0.084, -0.088, -0.096, -0.104, -0.088, -0.076, -0.092, -0.084, -0.08, - -0.076, -0.08, -0.08, -0.084, -0.084, -0.068, -0.068, -0.084, -0.088, -0.08, - -0.08, -0.092, -0.088, -0.092, -0.088, -0.092, -0.096, -0.088, -0.088, -0.092, - -0.076, -0.068, -0.072, -0.076, -0.076, -0.072, -0.068, -0.096, -0.096, -0.08, - -0.084, -0.064, -0.068, -0.084, -0.076, -0.08, -0.064, -0.068, -0.084, -0.08, - -0.06, -0.056, -0.056, -0.06, -0.08, -0.068, -0.076, -0.092, -0.084, -0.076, - -0.068, -0.072, -0.088, -0.1, -0.1, -0.084, -0.08, -0.068, -0.08, -0.084, - -0.072, -0.06, -0.06, -0.068, -0.072, -0.08, -0.092, -0.092, -0.084, -0.084, - -0.076, -0.076, -0.08, -0.08, -0.076, -0.08, -0.096, -0.108, -0.096, -0.084 - ], - "y": [ - 1.012, 1.02, 1.02, 1.004, 1, 1.004, 1, 1.016, 1.02, 1.016, 1.02, 1.032, 1.048, - 1.032, 1.036, 1.008, 1.008, 1.02, 1.024, 1.02, 1.008, 1.016, 1.012, 1.012, - 1.016, 1.008, 1.012, 1.012, 1.016, 1.004, 1.004, 1.008, 1.016, 1.04, 1.02, - 1.004, 1.008, 1.056, 1.028, 1.024, 1.028, 1.012, 1.02, 1.02, 1.016, 1.008, - 0.992, 1.008, 1.02, 1.028, 1.016, 1.012, 1.02, 1.024, 1.024, 1.004, 1.012, - 1.028, 1.016, 1.008, 1.012, 1.016, 1.028, 1.024, 1.024, 0.996, 0.996, 1.02, - 1.02, 1.012, 1.004, 1.02, 1.024, 1.02, 1.012, 1.016, 1.02, 1.016, 1.028, - 1.012, 1.004, 1.012, 1.024, 1.016, 1.008, 1, 1.016, 1.028, 1.024, 1.008 - ], - "z": [ - 0.076, 0.076, 0.084, 0.084, 0.076, 0.088, 0.1, 0.064, 0.064, 0.064, 0.08, - 0.096, 0.1, 0.088, 0.072, 0.08, 0.088, 0.072, 0.076, 0.084, 0.092, 0.1, 0.076, - 0.072, 0.08, 0.088, 0.08, 0.068, 0.056, 0.068, 0.08, 0.084, 0.092, 0.088, - 0.088, 0.084, 0.084, 0.06, 0.084, 0.092, 0.108, 0.1, 0.084, 0.052, 0.04, - 0.056, 0.056, 0.072, 0.08, 0.096, 0.1, 0.092, 0.096, 0.088, 0.084, 0.1, 0.096, - 0.08, 0.08, 0.072, 0.076, 0.096, 0.108, 0.092, 0.08, 0.076, 0.092, 0.096, - 0.076, 0.056, 0.072, 0.088, 0.084, 0.1, 0.084, 0.088, 0.08, 0.1, 0.096, 0.088, - 0.088, 0.096, 0.1, 0.096, 0.08, 0.08, 0.088, 0.096, 0.076, 0.064 - ] - } - }, - { - "ID": 1718706729969, - "data": { - "x": [ - 0.992, 0.996, 0.988, 0.992, 1, 0.996, 0.956, 0.96, 0.972, 1, 0.996, 0.972, - 0.984, 1.004, 1.012, 1.02, 1, 0.984, 0.988, 0.98, 0.984, 0.972, 0.988, 0.968, - 1.028, 1.004, 1.028, 1, 0.98, 0.972, 1.012, 1.008, 0.992, 0.976, 0.992, 0.992, - 1.008, 0.988, 0.972, 0.972, 0.988, 1.008, 1, 0.956, 0.984, 1, 1, 0.996, 0.996, - 0.992, 0.996, 0.992, 0.984, 0.98, 0.988, 0.98, 1.004, 0.996, 0.964, 0.956, - 1.008, 1.016, 0.98, 0.984, 1, 1.004, 1.008, 0.984, 0.988, 0.984, 0.984, 1.016, - 0.984, 0.984, 0.984, 1, 0.992, 0.992, 0.976, 0.972, 1.016, 1, 0.992, 0.968, - 0.976, 1.012, 1.012, 0.988, 0.968, 0.968 - ], - "y": [ - 0.012, 0.02, 0.024, 0.024, 0.02, 0.032, 0.04, 0.044, 0.04, 0.004, 0.024, - 0.008, 0.004, -0.004, 0.004, 0, 0, 0, 0.008, 0.02, 0.024, 0.004, 0.004, 0.008, - 0.048, 0.004, 0, -0.008, 0, 0.004, -0.008, 0.004, -0.004, 0.012, 0, 0, 0, - -0.008, -0.004, 0.016, 0.004, -0.004, 0, 0, 0.004, 0.012, 0.008, -0.004, 0, 0, - 0.008, -0.008, -0.008, 0.004, 0.02, 0.008, -0.008, -0.008, -0.012, 0.004, - -0.004, -0.016, -0.012, -0.004, -0.004, -0.012, -0.016, -0.004, 0.004, 0.008, - 0, -0.02, -0.032, -0.016, -0.012, -0.008, -0.004, 0, -0.02, -0.008, -0.008, - -0.008, -0.008, -0.012, 0, -0.016, -0.008, -0.012, -0.008, 0 - ], - "z": [ - -0.16, -0.14, -0.152, -0.152, -0.156, -0.16, -0.172, -0.168, -0.16, -0.168, - -0.16, -0.164, -0.152, -0.148, -0.14, -0.14, -0.152, -0.164, -0.168, -0.164, - -0.164, -0.172, -0.16, -0.168, -0.152, -0.128, -0.14, -0.144, -0.148, -0.168, - -0.156, -0.152, -0.14, -0.164, -0.16, -0.152, -0.136, -0.156, -0.164, -0.148, - -0.144, -0.136, -0.132, -0.164, -0.168, -0.152, -0.152, -0.152, -0.144, - -0.148, -0.148, -0.16, -0.168, -0.164, -0.136, -0.144, -0.14, -0.148, -0.156, - -0.176, -0.156, -0.144, -0.156, -0.14, -0.148, -0.164, -0.148, -0.144, -0.136, - -0.14, -0.16, -0.136, -0.16, -0.152, -0.152, -0.148, -0.136, -0.144, -0.16, - -0.168, -0.144, -0.132, -0.144, -0.156, -0.168, -0.152, -0.14, -0.144, -0.16, - -0.156 - ] - } - }, - { - "ID": 1718706724105, - "data": { - "x": [ - -0.036, -0.056, -0.044, -0.028, -0.028, -0.044, -0.06, -0.036, -0.024, -0.02, - -0.056, -0.06, -0.032, -0.032, -0.032, -0.044, -0.04, -0.032, -0.032, -0.052, - -0.052, -0.036, -0.024, -0.028, -0.048, -0.072, -0.056, -0.056, -0.024, - -0.016, -0.052, -0.072, -0.032, 0.088, -0.036, -0.056, -0.048, -0.036, -0.028, - -0.036, -0.036, -0.04, -0.032, -0.032, -0.04, -0.04, -0.044, -0.052, -0.024, - -0.044, -0.048, -0.056, -0.04, -0.032, -0.032, -0.04, -0.04, -0.052, -0.044, - -0.028, -0.036, -0.048, -0.04, -0.052, -0.052, -0.032, -0.036, -0.052, -0.052, - -0.048, -0.052, -0.036, -0.036, -0.032, -0.044, -0.036, -0.06, -0.052, -0.04, - -0.04, -0.036, -0.028, -0.052, -0.048, -0.04, -0.04, -0.048, -0.076, -0.072, - -0.044 - ], - "y": [ - -0.984, -0.976, -0.98, -0.98, -0.984, -0.98, -0.992, -0.996, -0.992, -0.996, - -0.996, -1, -1.008, -0.992, -0.992, -1, -1, -0.988, -0.98, -0.964, -0.972, - -0.992, -1, -1, -0.996, -0.984, -0.98, -0.992, -1.008, -1.024, -1.016, -0.992, - -0.992, -1.072, -0.972, -0.988, -0.992, -0.988, -0.984, -0.984, -0.992, - -1.004, -0.992, -0.992, -0.996, -0.992, -0.984, -0.984, -0.988, -0.992, - -1.008, -0.996, -1, -1, -0.992, -0.988, -0.996, -0.996, -0.988, -0.984, - -0.992, -0.996, -0.996, -0.984, -0.98, -0.992, -0.988, -0.98, -0.988, -0.996, - -0.996, -0.996, -0.988, -0.992, -0.992, -0.98, -0.98, -0.984, -0.996, -1.004, - -1, -0.996, -0.996, -0.988, -0.984, -0.984, -0.988, -0.984, -0.988, -0.976 - ], - "z": [ - -0.228, -0.228, -0.216, -0.192, -0.184, -0.204, -0.216, -0.212, -0.188, - -0.184, -0.2, -0.216, -0.22, -0.204, -0.216, -0.212, -0.228, -0.224, -0.2, - -0.208, -0.208, -0.2, -0.2, -0.2, -0.204, -0.208, -0.204, -0.204, -0.196, - -0.196, -0.2, -0.236, -0.22, -0.22, -0.188, -0.208, -0.216, -0.22, -0.2, - -0.204, -0.224, -0.232, -0.212, -0.2, -0.208, -0.216, -0.208, -0.212, -0.212, - -0.22, -0.212, -0.228, -0.204, -0.216, -0.208, -0.212, -0.216, -0.228, -0.228, - -0.22, -0.2, -0.216, -0.232, -0.212, -0.208, -0.22, -0.208, -0.196, -0.208, - -0.22, -0.22, -0.216, -0.22, -0.212, -0.212, -0.2, -0.212, -0.228, -0.232, - -0.216, -0.212, -0.208, -0.208, -0.216, -0.204, -0.196, -0.204, -0.228, - -0.228, -0.212 - ] - } - }, - { - "ID": 1718706718209, - "data": { - "x": [ - -0.028, -0.044, -0.068, -0.068, -0.056, -0.028, -0.036, -0.064, -0.064, - -0.036, -0.04, -0.06, -0.06, -0.052, -0.032, -0.04, -0.048, -0.076, -0.064, - -0.036, -0.032, -0.048, -0.044, -0.052, -0.04, -0.032, -0.052, -0.064, -0.052, - -0.04, -0.044, -0.056, -0.052, -0.04, -0.048, -0.064, -0.048, -0.052, -0.04, - -0.056, -0.048, -0.056, -0.048, -0.08, -0.04, 0.04, -0.036, -0.036, -0.044, - -0.044, -0.04, -0.044, -0.048, -0.044, -0.048, -0.036, -0.044, -0.052, -0.044, - -0.044, -0.032, -0.048, -0.06, -0.044, -0.036, -0.048, -0.06, -0.056, -0.052, - -0.04, -0.04, -0.048, -0.056, -0.064, -0.06, -0.044, -0.048, -0.076, -0.052, - -0.044, -0.048, -0.056, -0.064, -0.06, -0.06, -0.06, -0.068, -0.06, -0.048, - -0.044 - ], - "y": [ - -0.024, -0.028, -0.024, -0.024, -0.016, -0.024, -0.028, -0.032, -0.02, -0.028, - -0.032, -0.024, -0.024, -0.016, -0.02, -0.02, -0.024, -0.016, -0.016, -0.012, - -0.032, -0.036, -0.036, -0.032, -0.008, -0.016, -0.024, -0.02, -0.02, -0.028, - -0.02, -0.02, -0.028, -0.02, -0.032, -0.028, -0.032, -0.028, -0.028, -0.02, - -0.016, -0.024, -0.024, -0.028, -0.028, -0.072, -0.044, -0.04, -0.04, -0.024, - -0.024, -0.024, -0.044, -0.024, -0.02, -0.028, -0.04, -0.04, -0.044, -0.028, - -0.028, -0.032, -0.04, -0.04, -0.02, -0.016, -0.024, -0.036, -0.032, -0.036, - -0.036, -0.04, -0.04, -0.032, -0.028, -0.028, -0.04, -0.032, -0.04, -0.036, - -0.036, -0.04, -0.032, -0.028, -0.036, -0.032, -0.032, -0.032, -0.036, -0.048 - ], - "z": [ - 1.016, 1.016, 1.008, 1.012, 1, 1.028, 1.028, 1.02, 1.008, 1.008, 1.024, 1.024, - 1.016, 1.016, 1.028, 1.016, 1.02, 1.02, 0.98, 1.028, 1.04, 1.02, 1.032, 1.012, - 1.02, 1.016, 1.012, 1.016, 1.044, 1.016, 1.02, 0.972, 1.004, 1.036, 1.048, - 1.004, 1.008, 1.004, 1, 0.988, 1.012, 1.032, 1.016, 1.032, 1.008, 0.92, 1.036, - 1.016, 1.032, 1.024, 1.036, 1.012, 1.008, 1.024, 1.012, 1.024, 1.012, 1, 1, - 1.008, 1.056, 1.032, 0.988, 1.008, 1.032, 1.02, 1.024, 1.004, 1.004, 1.012, - 1.044, 1.028, 1.016, 1.036, 1.02, 1.024, 1.028, 1.008, 1.02, 1.004, 1.008, - 1.012, 1.004, 1.012, 1.032, 1.036, 1.036, 1.02, 1.02, 1.02 - ] - } - }, - { - "ID": 1718706711804, - "data": { - "x": [ - 0.004, -0.004, 0, 0, 0, 0.024, 0.012, 0, 0.004, -0.008, 0.004, 0.024, 0.012, - 0.004, 0, 0.004, 0.008, -0.008, 0.004, -0.012, 0.016, 0.02, 0.012, 0.004, 0, - 0.008, 0.024, 0.02, 0.012, 0, 0.004, 0.004, 0.004, 0.008, 0.008, 0.004, 0.004, - 0, 0, 0.016, 0.016, 0.012, 0.008, -0.004, -0.004, 0.016, 0.004, 0.008, -0.008, - 0, 0.012, 0.012, 0, 0, 0.004, 0.008, 0.004, 0.008, 0.008, 0.028, 0.012, - -0.004, -0.02, -0.004, 0, -0.004, -0.008, -0.004, 0.004, 0, 0.004, -0.004, - 0.004, 0.008, 0.004, -0.004, 0, -0.008, -0.004, 0.004, -0.004, -0.004, -0.004, - 0.004, -0.004, 0.004, 0.004, 0, -0.004, -0.004, 0.008 - ], - "y": [ - -0.04, -0.048, -0.04, -0.056, -0.036, -0.048, -0.048, -0.048, -0.048, -0.056, - -0.044, -0.048, -0.048, -0.044, -0.048, -0.048, -0.044, -0.028, -0.032, - -0.032, -0.04, -0.068, -0.036, -0.044, -0.044, -0.044, -0.052, -0.04, -0.044, - -0.036, -0.036, -0.044, -0.028, -0.04, -0.032, -0.04, -0.052, -0.04, -0.044, - -0.044, -0.044, -0.04, -0.04, -0.04, -0.048, -0.052, -0.048, -0.044, -0.036, - -0.036, -0.04, -0.04, -0.04, -0.044, -0.044, -0.048, -0.044, -0.036, -0.036, - -0.044, -0.044, -0.044, -0.056, -0.06, -0.052, -0.044, -0.04, -0.048, -0.06, - -0.052, -0.056, -0.036, -0.048, -0.044, -0.052, -0.044, -0.044, -0.036, - -0.048, -0.048, -0.04, -0.044, -0.04, -0.052, -0.048, -0.052, -0.044, -0.044, - -0.052, -0.048, -0.048 - ], - "z": [ - -1.06, -1.06, -1.068, -1.068, -1.052, -1.028, -1.032, -1.06, -1.096, -1.092, - -1.068, -1.064, -1.072, -1.072, -1.084, -1.068, -1.056, -1.064, -1.056, - -1.056, -1.048, -1.048, -1.064, -1.072, -1.08, -1.076, -1.052, -1.056, -1.06, - -1.056, -1.084, -1.064, -1.06, -1.064, -1.072, -1.072, -1.068, -1.08, -1.076, - -1.056, -1.056, -1.064, -1.06, -1.076, -1.08, -1.052, -1.072, -1.064, -1.06, - -1.052, -1.064, -1.064, -1.072, -1.076, -1.064, -1.064, -1.068, -1.064, - -1.056, -1.052, -1.044, -1.068, -1.092, -1.072, -1.064, -1.064, -1.064, -1.06, - -1.068, -1.068, -1.076, -1.064, -1.068, -1.06, -1.068, -1.064, -1.064, -1.056, - -1.064, -1.064, -1.068, -1.068, -1.068, -1.064, -1.056, -1.064, -1.056, - -1.068, -1.084, -1.064, -1.068 - ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - }, - { - "ID": 1705437876740, - "name": "Circle", - "recordings": [], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - } - } -] diff --git a/src/__tests__/getPrediction.test.ts b/src/__tests__/getPrediction.test.ts deleted file mode 100644 index 52295ddf5..000000000 --- a/src/__tests__/getPrediction.test.ts +++ /dev/null @@ -1,87 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import { getPrediction } from '../script/getPrediction'; -import { GestureData } from '../script/stores/mlStore'; - -interface GestureConfig { - name: string; - currentConfidence: number; - requiredConfidence: number; -} - -const createGesture = (g: GestureConfig): GestureData => ({ - name: g.name, - ID: 1, - recordings: [], - output: {}, - confidence: { - currentConfidence: g.currentConfidence, - requiredConfidence: g.requiredConfidence, - isConfident: g.currentConfidence >= g.requiredConfidence, - }, -}); - -describe('getPrediction', () => { - test('1 gesture, under required confidence', () => { - const gesture1 = createGesture({ - name: 'gesture 1', - currentConfidence: 0.7, - requiredConfidence: 0.9, - }); - expect(getPrediction([gesture1])).toEqual(undefined); - }); - test('1 gesture, over required confidence', () => { - const gesture1 = createGesture({ - name: 'gesture 1', - currentConfidence: 0.7, - requiredConfidence: 0.5, - }); - expect(getPrediction([gesture1])).toEqual(gesture1); - }); - test('>1 gesture, one over required confidence', () => { - const gesture1 = createGesture({ - name: 'gesture 1', - currentConfidence: 0.7, - requiredConfidence: 0.5, - }); - const gesture2 = createGesture({ - name: 'gesture 2', - currentConfidence: 0.7, - requiredConfidence: 0.8, - }); - expect(getPrediction([gesture1, gesture2])).toEqual(gesture1); - }); - test('>1 gesture, both over required confidence', () => { - const gesture1 = createGesture({ - name: 'gesture 1', - currentConfidence: 0.7, - requiredConfidence: 0.5, - }); - const gesture2 = createGesture({ - name: 'gesture 2', - currentConfidence: 0.9, - requiredConfidence: 0.8, - }); - expect(getPrediction([gesture1, gesture2])).toEqual(gesture2); - }); - test('>1 gesture, both under required confidence', () => { - const gesture1 = createGesture({ - name: 'gesture 1', - currentConfidence: 0.4, - requiredConfidence: 0.5, - }); - const gesture2 = createGesture({ - name: 'gesture 2', - currentConfidence: 0.3, - requiredConfidence: 0.8, - }); - expect(getPrediction([gesture1, gesture2])).toEqual(undefined); - }); -}); diff --git a/src/__tests__/i18n.test.ts b/src/__tests__/i18n.test.ts deleted file mode 100644 index dc5c6a036..000000000 --- a/src/__tests__/i18n.test.ts +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ -import { get } from 'svelte/store'; -import { MockInstance } from 'vitest'; -import { spyOn } from '@vitest/spy'; - -describe('Initialization tests', () => { - let windowSpy: MockInstance<[], any>; - - beforeEach(() => { - windowSpy = spyOn(window, 'window', 'get'); - }); - - afterEach(() => { - windowSpy.mockRestore(); - localStorage.clear(); - vitest.resetModules(); - }); - - // Welsh disabled for now - test.skip('Language is set to welsh when it is the preferred browser option', async () => { - windowSpy.mockImplementation(() => ({ - navigator: { - languages: ['cy', 'en'], - }, - location: { - search: '', - }, - })); - const { t, waitLocale } = await import('../i18n'); - await waitLocale(); - const getText = get(t); - - const translatedText = getText('alert.isRecording'); - expect(translatedText).toBe("Rydych chi'n recordio ar hyn o bryd!"); - }); - - test('Language falls back to english when an unsupported language is selected', async () => { - windowSpy.mockImplementation(() => ({ - navigator: { - languages: ['random-language'], - }, - location: { - search: '', - }, - })); - const { t, waitLocale } = await import('../i18n'); - await waitLocale(); - const getText = get(t); - - const translatedText = getText('alert.isRecording'); - expect(translatedText).toBe('You are currently recording!'); - }); - - // Welsh disabled for now - test.skip('Language is set to welsh when it is defined query string', async () => { - windowSpy.mockImplementation(() => ({ - navigator: { - languages: ['some languages'], - }, - location: { - search: '?l=cy', - }, - })); - const { t, waitLocale } = await import('../i18n'); - await waitLocale(); - const getText = get(t); - - const translatedText = getText('alert.isRecording'); - expect(translatedText).toBe("Rydych chi'n recordio ar hyn o bryd!"); - }); -}); diff --git a/src/__tests__/license-identifiers.test.ts b/src/__tests__/license-identifiers.test.ts deleted file mode 100644 index c32e3ba08..000000000 --- a/src/__tests__/license-identifiers.test.ts +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import fs from 'fs'; -import * as path from 'path'; - -// Place files you wish to ignore by name in here -const ignoredFiles: RegExp[] = [ - /^\.DS_Store$/, - /^.+\.json$/, - /\.(gif|svg|png|jpg|jpeg)$/, - /^README.md$/, -]; -const directoriesToScan = ['./src/', './microbit/v2/source/', './microbit/v1/source/']; - -const licenseIdentifierStringSPDX = 'SPDX-License-Identifier:'; - -const readFile = (fileLocation: string, expect: string) => { - const fileContent = fs.readFileSync(fileLocation); - return fileContent.toString().toLowerCase().includes(expect.toLowerCase()); -}; - -type DirectoryContents = { - files: string[]; - folders: string[]; -}; - -const readDirectory = (directory: string, ignoreList: RegExp[]): DirectoryContents => { - const files: string[] = []; - const folders: string[] = []; - const filesRead = fs.readdirSync(directory); - filesRead.forEach(file => { - if (ignoreList.some(ignoreRegExp => ignoreRegExp.test(file))) return; - const fileLocation = path.join(directory, file); - const stats = fs.statSync(fileLocation); - if (stats.isFile()) { - files.push(fileLocation); - } else { - folders.push(fileLocation); - } - }); - return { files: files, folders: folders }; -}; - -const flattenDirectory = (directory: string): string[] => { - const files: string[] = []; - const content = readDirectory(directory, ignoredFiles); - const filesFromSubFolders: string[] = []; - content.folders.forEach(value => { - const subFolderFlat = flattenDirectory(value); - subFolderFlat.forEach(value => filesFromSubFolders.push(value)); - }); - filesFromSubFolders.forEach(value => files.push(value)); - content.files.forEach(value => files.push(value)); - return files; -}; - -const filesMissingIdentifier = (files: string[], expects: string[]): string[] => { - const filesWithMissingIdentifier: string[] = []; - - for (let i = 0; i < files.length; i++) { - for (const expect of expects) { - if (!readFile('./' + files[i], expect)) { - if (!filesWithMissingIdentifier.includes(files[i])) { - filesWithMissingIdentifier.push(files[i]); - } - } - } - } - return filesWithMissingIdentifier; -}; - -describe('License identifier tests', () => { - test( - 'All files should contain license identifier', - () => { - const flatten = directoriesToScan.reduce((acc: any, current) => { - return acc.concat(flattenDirectory(current)); - }, []); - - const faultyFiles = filesMissingIdentifier(flatten, [licenseIdentifierStringSPDX]); - expect( - faultyFiles.length, - 'Some files do not contain identifier! ' + - faultyFiles - .map(val => `\n \u001b[35m${val} \u001b[0mis missing license identifier`) - .join(), - ).toEqual(0); - }, - 60000 * 10, - ); -}); diff --git a/src/__tests__/microbit-usb-conection.test.ts b/src/__tests__/microbit-usb-conection.test.ts deleted file mode 100644 index ca60c3df4..000000000 --- a/src/__tests__/microbit-usb-conection.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import MockUSBDevice, { TestableMicrobitUSB } from './mocks/mock-usb'; - -describe('Microbit USB connection tests', () => { - beforeAll(() => { - /** Adds the usb property to the navigator for mocking */ - Object.assign(navigator, { - usb: { - predefined: undefined, - requestDevice(options?: USBDeviceRequestOptions): any { - const result = this.predefined - ? this.predefined - : Promise.resolve(new MockUSBDevice().build()); - this.predefined = undefined; - return Promise.resolve(result); - }, - }, - }); - }); - - test('Serial number 9900 should be a version 1', async () => { - const mockUsbDevice = new MockUSBDevice().withSerialNumber('9900serno').build(); - const connection = new TestableMicrobitUSB(mockUsbDevice); - expect(connection.getModelNumber()).toBe(1); - }); - - test('Serial number 9901 should be a version 1', async () => { - const mockUsbDevice = new MockUSBDevice().withSerialNumber('9901serno').build(); - const connection = new TestableMicrobitUSB(mockUsbDevice); - expect(connection.getModelNumber()).toBe(1); - }); - - test('Serial number 9903 should be a version 2', async () => { - const mockUsbDevice = new MockUSBDevice().withSerialNumber('9903serno').build(); - const connection = new TestableMicrobitUSB(mockUsbDevice); - expect(connection.getModelNumber()).toBe(2); - }); - - test('Serial number 9904 should be a version 2', async () => { - const mockUsbDevice = new MockUSBDevice().withSerialNumber('9904serno').build(); - const connection = new TestableMicrobitUSB(mockUsbDevice); - expect(connection.getModelNumber()).toBe(2); - }); -}); diff --git a/src/__tests__/ml.test.ts b/src/__tests__/ml.test.ts deleted file mode 100644 index 3ed84fe99..000000000 --- a/src/__tests__/ml.test.ts +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2024, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import * as tf from '@tensorflow/tfjs'; -import { makeInputs, trainModel } from '../script/ml'; -import { gestures } from '../script/stores/Stores'; -import gestureData from './fixtures/gesture-data.json'; -import gestureDataBadLabels from './fixtures/gesture-data-bad-labels.json'; -import testdataShakeStill from './fixtures/test-data-shake-still.json'; -import { PersistantGestureData } from '../script/domain/Gestures'; - -let tensorFlowModel: tf.LayersModel | void; -beforeAll(async () => { - // No webgl in tests running in node. - tf.setBackend('cpu'); - - // This creates determinism in the model training step. - const randomSpy = vi.spyOn(Math, 'random'); - randomSpy.mockImplementation(() => 0.5); - - gestures.importFrom(gestureData); - tensorFlowModel = await trainModel(); -}); - -const getModelResults = (data: PersistantGestureData[]) => { - const x: number[][] = []; - const y: number[][] = []; - const numActions = data.length; - data.forEach((action, index) => { - action.recordings.forEach(recording => { - x.push(makeInputs(recording.data)); - const label = new Array(numActions); - label.fill(0, 0, numActions); - label[index] = 1; - y.push(label); - }); - }); - - if (!tensorFlowModel) { - throw Error('No model returned'); - } - - const tensorFlowResult = tensorFlowModel.evaluate(tf.tensor(x), tf.tensor(y)); - const tensorFlowResultAccuracy = (tensorFlowResult as tf.Scalar[])[1] - .dataSync()[0] - .toFixed(4); - const tensorflowPredictionResult = ( - tensorFlowModel.predict(tf.tensor(x)) as tf.Tensor - ).dataSync(); - return { - tensorFlowResultAccuracy, - tensorflowPredictionResult, - labels: y, - }; -}; - -describe('Model tests', () => { - test('returns acceptable results on training data', async () => { - const { tensorFlowResultAccuracy, tensorflowPredictionResult, labels } = - getModelResults(gestureData); - const d = labels[0].length; // dimensions - for (let i = 0, j = 0; i < tensorflowPredictionResult.length; i += d, j++) { - const result = tensorflowPredictionResult.slice(i, i + d); - expect(result.indexOf(Math.max(...result))).toBe( - labels[j].indexOf(Math.max(...labels[j])), - ); - } - expect(tensorFlowResultAccuracy).toBe('1.0000'); - }); - - // The action names don't matter, the order of the actions in the data.json file does. - // Training data is shake, still, circle. This data is still, circle, shake. - test('returns incorrect results on wrongly labelled training data', async () => { - const { tensorFlowResultAccuracy, tensorflowPredictionResult, labels } = - getModelResults(gestureDataBadLabels); - const d = labels[0].length; // dimensions - for (let i = 0, j = 0; i < tensorflowPredictionResult.length; i += d, j++) { - const result = tensorflowPredictionResult.slice(i, i + d); - expect(result.indexOf(Math.max(...result))).not.toBe( - labels[j].indexOf(Math.max(...labels[j])), - ); - } - expect(tensorFlowResultAccuracy).toBe('0.0000'); - }); - - test('returns correct results on testing data', async () => { - const { tensorFlowResultAccuracy } = getModelResults(testdataShakeStill); - // The model thinks two samples of still are circle. - // 14 samples; 1.0 / 14 = 0.0714; 0.0714 * 12 correct inferences = 0.8571 - expect(parseFloat(tensorFlowResultAccuracy)).toBeGreaterThan(0.85); - }); -}); diff --git a/src/__tests__/mocks/mock-bluetooth-accelerometer-service.ts b/src/__tests__/mocks/mock-bluetooth-accelerometer-service.ts deleted file mode 100644 index 13527eacf..000000000 --- a/src/__tests__/mocks/mock-bluetooth-accelerometer-service.ts +++ /dev/null @@ -1,218 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import MBSpecs from '../../script/microbit-interfacing/MBSpecs'; -import { MockBluetoothCharacteristicProperties } from './mock-bluetooth'; - -class MockBluetoothAccelerometerService implements BluetoothRemoteGATTService { - readonly device: BluetoothDevice; - readonly isPrimary: boolean = false; - readonly uuid: string = ''; - private characteristic; - - constructor(device: any) { - this.device = device; - this.characteristic = new MockBluetoothAccelerometerCharacteristic(this); - } - - oncharacteristicvaluechanged(ev: Event): any {} - - onserviceadded(ev: Event): any {} - - onservicechanged(ev: Event): any {} - - onserviceremoved(ev: Event): any {} - - addEventListener( - type: 'serviceadded', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: 'servicechanged', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: 'serviceremoved', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: 'serviceadded' | 'servicechanged' | 'serviceremoved' | string, - listener: - | ((this: this, ev: Event) => any) - | EventListenerOrEventListenerObject - | null, - useCapture?: boolean | AddEventListenerOptions, - ): void {} - - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean { - return false; - } - - getCharacteristic( - characteristic: BluetoothCharacteristicUUID, - ): Promise { - if (characteristic === MBSpecs.Characteristics.ACCEL_DATA) { - return Promise.resolve(this.characteristic); - } - return Promise.resolve(this.characteristic); // always returns characteristic - } - - getCharacteristics( - characteristic?: BluetoothCharacteristicUUID, - ): Promise { - return Promise.resolve([]); - } - - getIncludedService(service: BluetoothServiceUUID): Promise { - return Promise.resolve(this); - } - - getIncludedServices( - service?: BluetoothServiceUUID, - ): Promise { - return Promise.resolve([]); - } - - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void {} -} - -export class MockBluetoothAccelerometerCharacteristic - implements BluetoothRemoteGATTCharacteristic -{ - readonly properties: BluetoothCharacteristicProperties = - new MockBluetoothCharacteristicProperties(); - readonly service: BluetoothRemoteGATTService; - readonly uuid: string = ''; - - constructor(service: BluetoothRemoteGATTService) { - this.service = service; - } - - oncharacteristicvaluechanged(ev: Event): any {} - - addEventListener( - type: 'characteristicvaluechanged', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: 'characteristicvaluechanged' | string, - listener: - | ((this: this, ev: Event) => any) - | EventListenerOrEventListenerObject - | null, - useCapture?: boolean | AddEventListenerOptions, - ): void {} - - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean { - return false; - } - - getDescriptor( - descriptor: BluetoothDescriptorUUID, - ): Promise { - return Promise.resolve(undefined as unknown as BluetoothRemoteGATTDescriptor); - } - - getDescriptors( - descriptor?: BluetoothDescriptorUUID, - ): Promise { - return Promise.resolve([]); - } - - readValue(): Promise { - return Promise.resolve(undefined as unknown as DataView); - } - - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void {} - - startNotifications(): Promise { - return Promise.resolve(undefined as unknown as BluetoothRemoteGATTCharacteristic); - } - - stopNotifications(): Promise { - return Promise.resolve(undefined as unknown as BluetoothRemoteGATTCharacteristic); - } - - writeValue(value: BufferSource): Promise { - return Promise.resolve(undefined); - } - - writeValueWithResponse(value: BufferSource): Promise { - return Promise.resolve(undefined); - } - - writeValueWithoutResponse(value: BufferSource): Promise { - return Promise.resolve(undefined); - } -} - -export default MockBluetoothAccelerometerService; diff --git a/src/__tests__/mocks/mock-bluetooth-gattcharacteristic.ts b/src/__tests__/mocks/mock-bluetooth-gattcharacteristic.ts deleted file mode 100644 index 6fe67bc1f..000000000 --- a/src/__tests__/mocks/mock-bluetooth-gattcharacteristic.ts +++ /dev/null @@ -1,119 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -class MockBluetoothCharacteristicProperties implements BluetoothCharacteristicProperties { - readonly authenticatedSignedWrites: boolean = false; - readonly broadcast: boolean = false; - readonly indicate: boolean = false; - readonly notify: boolean = false; - readonly read: boolean = false; - readonly reliableWrite: boolean = false; - readonly writableAuxiliaries: boolean = false; - readonly write: boolean = false; - readonly writeWithoutResponse: boolean = false; -} - -class MockBluetoothGattcharacteristic implements BluetoothRemoteGATTCharacteristic { - readonly properties: BluetoothCharacteristicProperties = - new MockBluetoothCharacteristicProperties(); - readonly service: BluetoothRemoteGATTService; - readonly uuid: string = ''; - - constructor(service: BluetoothRemoteGATTService) { - this.service = service; - } - - oncharacteristicvaluechanged(ev: Event): any {} - - addEventListener( - type: 'characteristicvaluechanged', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: 'characteristicvaluechanged' | string, - listener: - | ((this: this, ev: Event) => any) - | EventListenerOrEventListenerObject - | null, - useCapture?: boolean | AddEventListenerOptions, - ): void {} - - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean { - return false; - } - - getDescriptor( - descriptor: BluetoothDescriptorUUID, - ): Promise { - return Promise.resolve(undefined as unknown as BluetoothRemoteGATTDescriptor); - } - - getDescriptors( - descriptor?: BluetoothDescriptorUUID, - ): Promise { - return Promise.resolve([]); - } - - readValue(): Promise { - return Promise.resolve(undefined as unknown as DataView); - } - - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void {} - - startNotifications(): Promise { - return Promise.resolve(undefined as unknown as BluetoothRemoteGATTCharacteristic); - } - - stopNotifications(): Promise { - return Promise.resolve(undefined as unknown as BluetoothRemoteGATTCharacteristic); - } - - writeValue(value: BufferSource): Promise { - return Promise.resolve(undefined); - } - - writeValueWithResponse(value: BufferSource): Promise { - return Promise.resolve(undefined); - } - - writeValueWithoutResponse(value: BufferSource): Promise { - return Promise.resolve(undefined); - } -} - -export default MockBluetoothGattcharacteristic; diff --git a/src/__tests__/mocks/mock-bluetooth-gattservice.ts b/src/__tests__/mocks/mock-bluetooth-gattservice.ts deleted file mode 100644 index f6a8e162a..000000000 --- a/src/__tests__/mocks/mock-bluetooth-gattservice.ts +++ /dev/null @@ -1,122 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import MockBluetoothGattcharacteristic from './mock-bluetooth-gattcharacteristic'; - -class MockBluetoothGattservice implements BluetoothRemoteGATTService { - readonly device: BluetoothDevice; - readonly isPrimary: boolean = false; - readonly uuid: string = ''; - - constructor(device: BluetoothDevice) { - this.device = device; - } - - oncharacteristicvaluechanged(ev: Event): any { - /* Empty */ - } - - onserviceadded(ev: Event): any { - /* Empty */ - } - - onservicechanged(ev: Event): any { - /* Empty */ - } - - onserviceremoved(ev: Event): any { - /* Empty */ - } - - addEventListener( - type: 'serviceadded', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: 'servicechanged', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: 'serviceremoved', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: 'serviceadded' | 'servicechanged' | 'serviceremoved' | string, - listener: - | ((this: this, ev: Event) => any) - | EventListenerOrEventListenerObject - | null, - useCapture?: boolean | AddEventListenerOptions, - ): void { - /* Empty */ - } - - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean { - return false; - } - - getCharacteristic( - characteristic: BluetoothCharacteristicUUID, - ): Promise { - return Promise.resolve(new MockBluetoothGattcharacteristic(this)); - } - - getCharacteristics( - characteristic?: BluetoothCharacteristicUUID, - ): Promise { - return Promise.resolve([]); - } - - getIncludedService(service: BluetoothServiceUUID): Promise { - return Promise.resolve(undefined as unknown as BluetoothRemoteGATTService); - } - - getIncludedServices( - service?: BluetoothServiceUUID, - ): Promise { - return Promise.resolve([]); - } - - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void { - /* Empty */ - } -} - -export default MockBluetoothGattservice; diff --git a/src/__tests__/mocks/mock-bluetooth-info-service.ts b/src/__tests__/mocks/mock-bluetooth-info-service.ts deleted file mode 100644 index a63392608..000000000 --- a/src/__tests__/mocks/mock-bluetooth-info-service.ts +++ /dev/null @@ -1,234 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import MBSpecs from '../../script/microbit-interfacing/MBSpecs'; -import { MockBluetoothCharacteristicProperties } from './mock-bluetooth'; - -class MockInfoService implements BluetoothRemoteGATTService { - readonly device: BluetoothDevice; - readonly isPrimary: boolean = false; - readonly uuid: string = ''; - modelNumberCharacteristic: BluetoothRemoteGATTCharacteristic = - new MockBluetoothModelNumberCharacteristic(0, this); - - constructor(device: any) { - this.device = device; - } - - oncharacteristicvaluechanged(ev: Event): any {} - - onserviceadded(ev: Event): any {} - - onservicechanged(ev: Event): any {} - - onserviceremoved(ev: Event): any {} - - withModelNumber(modelNumberCharacteristic: BluetoothRemoteGATTCharacteristic) { - this.modelNumberCharacteristic = modelNumberCharacteristic; - return this; - } - - addEventListener( - type: 'serviceadded', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: 'servicechanged', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: 'serviceremoved', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: 'serviceadded' | 'servicechanged' | 'serviceremoved' | string, - listener: - | ((this: this, ev: Event) => any) - | EventListenerOrEventListenerObject - | null, - useCapture?: boolean | AddEventListenerOptions, - ): void {} - - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean { - return false; - } - - getCharacteristic( - characteristic: BluetoothCharacteristicUUID, - ): Promise { - if (characteristic === MBSpecs.Characteristics.MODEL_NUMBER) { - return Promise.resolve(this.modelNumberCharacteristic); - } - return Promise.reject(undefined); - } - - getCharacteristics( - characteristic?: BluetoothCharacteristicUUID, - ): Promise { - return Promise.resolve([]); - } - - getIncludedService(service: BluetoothServiceUUID): Promise { - return Promise.reject(undefined); - } - - getIncludedServices( - service?: BluetoothServiceUUID, - ): Promise { - return Promise.resolve([]); - } - - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void {} -} - -export class MockBluetoothModelNumberCharacteristic - implements BluetoothRemoteGATTCharacteristic -{ - readonly properties: BluetoothCharacteristicProperties = - new MockBluetoothCharacteristicProperties(); - readonly service: BluetoothRemoteGATTService; - readonly uuid: string = ''; - - constructor( - public versionNumber: number, - service: BluetoothRemoteGATTService, - ) { - this.service = service; - } - - oncharacteristicvaluechanged(ev: Event): any {} - - addEventListener( - type: 'characteristicvaluechanged', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: 'characteristicvaluechanged' | string, - listener: - | ((this: this, ev: Event) => any) - | EventListenerOrEventListenerObject - | null, - useCapture?: boolean | AddEventListenerOptions, - ): void {} - - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean { - return false; - } - - getDescriptor( - descriptor: BluetoothDescriptorUUID, - ): Promise { - return Promise.reject(undefined); - } - - getDescriptors( - descriptor?: BluetoothDescriptorUUID, - ): Promise { - return Promise.resolve([]); - } - - readValue(): Promise { - const v2VersionString = 'BBC micro:bit V2.0'; - const v1VersionString = 'BBC micro:bit'; - - const selectedVersionString = - this.versionNumber === 1 ? v1VersionString : v2VersionString; - const enc = new TextEncoder(); - const buff = enc.encode(selectedVersionString); - const dataView = new DataView(buff.buffer); - return Promise.resolve(dataView); - } - - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void {} - - startNotifications(): Promise { - return Promise.reject(undefined); - } - - stopNotifications(): Promise { - return Promise.reject(undefined); - } - - writeValue(value: BufferSource): Promise { - return Promise.resolve(undefined); - } - - writeValueWithResponse(value: BufferSource): Promise { - return Promise.resolve(undefined); - } - - writeValueWithoutResponse(value: BufferSource): Promise { - return Promise.resolve(undefined); - } -} - -export default MockInfoService; diff --git a/src/__tests__/mocks/mock-bluetooth.ts b/src/__tests__/mocks/mock-bluetooth.ts deleted file mode 100644 index 6ccca29e1..000000000 --- a/src/__tests__/mocks/mock-bluetooth.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -export class MockBluetoothCharacteristicProperties - implements BluetoothCharacteristicProperties -{ - readonly authenticatedSignedWrites: boolean = false; - readonly broadcast: boolean = false; - readonly indicate: boolean = false; - readonly notify: boolean = false; - readonly read: boolean = false; - readonly reliableWrite: boolean = false; - readonly writableAuxiliaries: boolean = false; - readonly write: boolean = false; - readonly writeWithoutResponse: boolean = false; -} diff --git a/src/__tests__/mocks/mock-microbit-bluetooth.ts b/src/__tests__/mocks/mock-microbit-bluetooth.ts deleted file mode 100644 index 8d3921ae6..000000000 --- a/src/__tests__/mocks/mock-microbit-bluetooth.ts +++ /dev/null @@ -1,217 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import MBSpecs from '../../script/microbit-interfacing/MBSpecs'; -import MockInfoService, { - MockBluetoothModelNumberCharacteristic, -} from './mock-bluetooth-info-service'; -import MockBluetoothAccelerometerService from './mock-bluetooth-accelerometer-service'; -import MockBluetoothGattservice from './mock-bluetooth-gattservice'; - -class MockBTDevice implements BluetoothDevice { - readonly id: string = ''; - readonly watchingAdvertisements: boolean = false; - public gatt: BluetoothRemoteGATTServer; - public willFailConnection = false; - private microbitVersion = 0; - private listeners: DeviceListener[] = []; - - constructor() { - this.gatt = new MockGattServer(this, this); - } - - public withMicrobitVersion(versionNumber: 1 | 2) { - this.microbitVersion = versionNumber; - return this; - } - - public withFailingConnection() { - this.willFailConnection = true; - return this; - } - - public build() { - let gatt = new MockGattServer(this, this); - if (!this.microbitVersion) { - this.microbitVersion = 1; - } - let deviceInfoService = new MockInfoService(this); - const modelNumberCharacteristic = new MockBluetoothModelNumberCharacteristic( - this.microbitVersion, - deviceInfoService, - ); - deviceInfoService = deviceInfoService.withModelNumber(modelNumberCharacteristic); - gatt = gatt.withDeviceInfo(deviceInfoService); - this.gatt = gatt; - return this; - } - - onadvertisementreceived(ev: BluetoothAdvertisingEvent): any { - /* Empty */ - } - - oncharacteristicvaluechanged(ev: Event): any { - /* Empty */ - } - - ongattserverdisconnected(ev: Event): any { - /* Empty */ - } - - onserviceadded(ev: Event): any { - /* Empty */ - } - - onservicechanged(ev: Event): any { - /* Empty */ - } - - onserviceremoved(ev: Event): any { - /* Empty */ - } - - addEventListener( - type: 'gattserverdisconnected', - listener: (this: this, ev: Event) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: 'advertisementreceived', - listener: (this: this, ev: BluetoothAdvertisingEvent) => any, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - useCapture?: boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: 'gattserverdisconnected' | 'advertisementreceived' | string, - listener: - | ((this: this, ev: Event) => any) - | ((this: this, ev: BluetoothAdvertisingEvent) => any) - | EventListenerOrEventListenerObject - | null, - useCapture?: boolean | AddEventListenerOptions, - ): void { - this.listeners.push({ eventType: type, listener: listener }); - } - - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean; - dispatchEvent(event: Event): boolean { - this.listeners.forEach(value => { - if (event.type == value.eventType) { - if (value.listener) { - value.listener(value); - } - } - }); - return false; - } - - forget(): Promise { - return Promise.resolve(undefined); - } - - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: EventListenerOptions | boolean, - ): void { - /* Empty */ - } - - watchAdvertisements(options?: WatchAdvertisementsOptions): Promise { - return Promise.resolve(undefined); - } -} - -class MockGattServer implements BluetoothRemoteGATTServer { - connected: boolean; - readonly device: BluetoothDevice; - mockDevice: MockBTDevice; - deviceInfoService: BluetoothRemoteGATTService; - accelerometerService: BluetoothRemoteGATTService; - - constructor(device: BluetoothDevice, mock: MockBTDevice) { - this.connected = false; - this.device = device; - this.mockDevice = mock; - this.deviceInfoService = new MockInfoService(device); - this.accelerometerService = new MockBluetoothAccelerometerService(device); - } - - withDeviceInfo(deviceInfoService: BluetoothRemoteGATTService) { - this.deviceInfoService = deviceInfoService; - return this; - } - - connect(): Promise { - if (this.mockDevice.willFailConnection) { - return Promise.reject(undefined); - } - this.connected = true; - return Promise.resolve(this); - } - - disconnect(): void { - this.device.dispatchEvent(new Event('gattserverdisconnected')); - this.connected = false; - } - - getPrimaryService(service: BluetoothServiceUUID): Promise { - if (service === MBSpecs.Services.DEVICE_INFO_SERVICE) { - return Promise.resolve(this.deviceInfoService); - } - if (service === MBSpecs.Services.ACCEL_SERVICE) { - return Promise.resolve(this.accelerometerService); - } - if (service === MBSpecs.Services.BUTTON_SERVICE) { - return Promise.resolve(new MockBluetoothGattservice(this.device)); - } - if (service === MBSpecs.Services.UART_SERVICE) { - return Promise.resolve(new MockBluetoothGattservice(this.device)); - } - console.warn( - 'The primary service, you tried to fetch were unknown. Was this on purpose?', - ); - return Promise.reject(undefined); - } - - getPrimaryServices( - service?: BluetoothServiceUUID, - ): Promise { - return Promise.resolve([]); - } -} - -type DeviceListener = { - eventType: 'gattserverdisconnected' | 'advertisementreceived' | string; - listener: any; -}; - -export default MockBTDevice; diff --git a/src/__tests__/mocks/mock-usb.ts b/src/__tests__/mocks/mock-usb.ts deleted file mode 100644 index abd548fef..000000000 --- a/src/__tests__/mocks/mock-usb.ts +++ /dev/null @@ -1,160 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import USBConfiguration from 'dapjs'; -import USBInterface from 'dapjs'; -import USBAlternateInterface from 'dapjs'; -import MicrobitUSB from '../../script/microbit-interfacing/MicrobitUSB'; - -class SimpleUSBInterfaceAlternate implements USBAlternateInterface { - alternateSetting = 0; - interfaceClass = 0; - interfaceSubclass = 0; - interfaceProtocol = 0; - interfaceName?: string; - endpoints: USBEndpoint[] = []; -} - -class SimpleUSBInterface implements USBInterface { - interfaceNumber: number; - alternate: USBAlternateInterface; - alternates: USBAlternateInterface[] = []; - claimed = false; - - constructor() { - this.alternate = new SimpleUSBInterfaceAlternate(); - this.interfaceNumber = 1; - } -} - -class SimpleUSBConfig implements USBConfiguration { - configurationValue: number; - configurationName?: string; - interfaces: USBInterface[]; - - constructor() { - this.configurationName = 'some name'; - this.configurationValue = 1; - this.interfaces = []; - this.interfaces.push(new SimpleUSBInterface()); - } -} - -class MockUSBDevice implements USBDevice { - configurations: USBConfiguration[] = []; - readonly deviceClass: number = 0; - readonly deviceProtocol: number = 0; - readonly deviceSubclass: number = 0; - readonly deviceVersionMajor: number = 0; - readonly deviceVersionMinor: number = 0; - readonly deviceVersionSubminor: number = 0; - readonly opened: boolean = false; - readonly productId: number = 0; - readonly usbVersionMajor: number = 0; - readonly usbVersionMinor: number = 0; - readonly usbVersionSubminor: number = 0; - readonly vendorId: number = 0; - interfaceNumber = 0; - public serialNumber = ''; - - public withSerialNumber(serno: string) { - this.serialNumber = serno; - return this; - } - - public build() { - this.configurations = []; - const usbConfig = new SimpleUSBConfig(); - this.configurations = [usbConfig]; - this.interfaceNumber = 1; - return this; - } - - claimInterface(interfaceNumber: number): Promise { - return Promise.resolve(); - } - - clearHalt(direction: USBDirection, endpointNumber: number): Promise { - return Promise.resolve(); - } - - close(): Promise { - return Promise.resolve(); - } - - controlTransferIn( - setup: USBControlTransferParameters, - length: number, - ): Promise { - return Promise.resolve(new USBInTransferResult('ok', undefined)); - } - - controlTransferOut( - setup: USBControlTransferParameters, - data?: BufferSource, - ): Promise { - return Promise.resolve(new USBOutTransferResult('ok', 1)); - } - - forget(): Promise { - return Promise.resolve(); - } - - isochronousTransferIn( - endpointNumber: number, - packetLengths: number[], - ): Promise { - return Promise.resolve(new USBIsochronousInTransferResult([], undefined)); - } - - isochronousTransferOut( - endpointNumber: number, - data: BufferSource, - packetLengths: number[], - ): Promise { - return Promise.resolve(new USBIsochronousOutTransferResult([])); - } - - open(): Promise { - return Promise.resolve(); - } - - releaseInterface(interfaceNumber: number): Promise { - return Promise.resolve(); - } - - reset(): Promise { - return Promise.resolve(); - } - - selectAlternateInterface( - interfaceNumber: number, - alternateSetting: number, - ): Promise { - return Promise.resolve(); - } - - selectConfiguration(configurationValue: number): Promise { - return Promise.resolve(); - } - - transferIn(endpointNumber: number, length: number): Promise { - return Promise.resolve(new USBInTransferResult('ok', undefined)); - } - - transferOut(endpointNumber: number, data: BufferSource): Promise { - return Promise.resolve(new USBOutTransferResult('ok', 1)); - } -} - -export default MockUSBDevice; - -export class TestableMicrobitUSB extends MicrobitUSB { - /** Just overrides the protected constructor to be able to use the Mock USB device to test */ - public constructor(usbDevice: USBDevice) { - super(usbDevice); - } -} diff --git a/src/__tests__/serialProtocol.test.ts b/src/__tests__/serialProtocol.test.ts deleted file mode 100644 index 96b5b719e..000000000 --- a/src/__tests__/serialProtocol.test.ts +++ /dev/null @@ -1,391 +0,0 @@ -/** - * @jest-environment jsdom - */ -/** - * (c) 2024, Micro:bit Educational Foundation and contributors - * - * SPDX-License-Identifier: MIT - */ - -import { - MicrobitSensorState, - splitMessages, - processPeriodicMessage, - processResponseMessage, -} from '../script/microbit-interfacing/serialProtocol'; - -describe('splitMessages', () => { - it('splits a single message', () => { - const message = 'P0E80495C4341\n'; - - const got = splitMessages(message); - - expect(got.messages.length).toEqual(1); - expect(got.messages[0]).toEqual(message.slice(0, -1)); - expect(got.remainingInput).toEqual(''); - }); - - it('splits multiple messages', () => { - const message1 = 'P21998AEC2F80'; - const message2 = 'P21FFF000FFF3'; - const message3 = 'P45000FFF0002'; - - const msgs = splitMessages(message1 + '\n' + message2 + '\n' + message3 + '\n'); - - expect(msgs.messages.length).toEqual(3); - expect(msgs.messages[0]).toEqual(message1); - expect(msgs.messages[1]).toEqual(message2); - expect(msgs.messages[2]).toEqual(message3); - expect(msgs.remainingInput).toEqual(''); - }); - - it('splits multiple messages with extra input', () => { - const message1 = 'P188009584343'; - const message2 = 'P19998AEC2F80'; - const message3 = 'P201234'; - - const msgs = splitMessages(message1 + '\n' + message2 + '\n' + message3); - - expect(msgs.messages.length).toEqual(2); - expect(msgs.messages[0]).toEqual(message1); - expect(msgs.messages[1]).toEqual(message2); - expect(msgs.remainingInput).toEqual(message3); - }); - - it('sets the remainingInput from incomplete message', () => { - const message1 = 'R[0]INCOMPLETE'; - - const msgs = splitMessages(message1); - - expect(msgs.messages.length).toEqual(0); - expect(msgs.remainingInput).toEqual(message1); - }); - - it('processes empty input correctly', () => { - const msgs = splitMessages(''); - - expect(msgs.messages.length).toEqual(0); - expect(msgs.remainingInput).toEqual(''); - }); - - it('throws away empty lines correctly', () => { - const msgs = splitMessages('\n\n\n'); - - expect(msgs.messages.length).toEqual(0); - expect(msgs.remainingInput).toEqual(''); - }); - - it('throws away remainingInput of invalid type', () => { - const message1 = 'R[0]START[]'; - const message_invalid_start = 'NOT_A_VALID_MSG_START'; - - const msgs = splitMessages(message1 + '\n' + message_invalid_start); - - expect(msgs.messages.length).toEqual(1); - expect(msgs.messages[0]).toEqual(message1); - expect(msgs.remainingInput).toEqual(''); - }); - - it('throws messages of invalid type', () => { - const msgs = splitMessages('P00\nC11\nR22\nX33\n'); - - expect(msgs.messages.length).toEqual(3); - expect(msgs.messages[0]).toEqual('P00'); - expect(msgs.messages[1]).toEqual('C11'); - expect(msgs.messages[2]).toEqual('R22'); - expect(msgs.remainingInput).toEqual(''); - }); -}); - -describe('processPeriodicMessage', () => { - it('extracts the micro:bit state from the message', () => { - const message = 'P0E80495C4341'; - - const got = processPeriodicMessage(message); - - const want: MicrobitSensorState = { - accelerometerX: 4, - accelerometerY: 348, - accelerometerZ: -972, - buttonA: 1, - buttonB: 0, - }; - expect(got).toEqual(want); - }); - - it('processes min/max values correctly', () => { - const message1 = 'P00FFF000FFF0'; - const want1: MicrobitSensorState = { - accelerometerX: 2047, - accelerometerY: -2048, - accelerometerZ: 2047, - buttonA: 0, - buttonB: 0, - }; - const message2 = 'PFF000FFF0003'; - const want2: MicrobitSensorState = { - accelerometerX: -2048, - accelerometerY: 2047, - accelerometerZ: -2048, - buttonA: 1, - buttonB: 1, - }; - - const got1 = processPeriodicMessage(message1); - const got2 = processPeriodicMessage(message2); - - expect(got1).toEqual(want1); - expect(got2).toEqual(want2); - }); - - it('ignores messages that are not periodic', () => { - const message1 = 'C001112223334'; - const message2 = 'R001112223334'; - - const got1 = processPeriodicMessage(message1); - const got2 = processPeriodicMessage(message2); - - expect(got1).toBeUndefined(); - expect(got2).toBeUndefined(); - }); - - it('ignores wrong length input', () => { - const message1 = 'P21998AEC2F8\n'; - const message2 = 'P21998AEC2F'; - - const got1 = processPeriodicMessage(message1); - const got2 = processPeriodicMessage(message2); - - expect(got1).toBeUndefined(); - expect(got2).toBeUndefined(); - }); - - it('detects invalid button values', () => { - const message1 = 'P000000000004'; - const message2 = 'P00000000000F'; - - const got1 = processPeriodicMessage(message1); - const got2 = processPeriodicMessage(message2); - - expect(got1).toBeUndefined(); - expect(got2).toBeUndefined(); - }); - - it('detects invalid hex values', () => { - const message1 = 'Pz01112223334'; - - const got1 = processPeriodicMessage(message1); - - expect(got1).toBeUndefined(); - }); -}); - -describe('processResponseMessage', () => { - it('processes valid Handshake responses', () => { - const message1 = 'R[0]HS[1]'; - const message2 = 'R[1122aabb]HS[255]'; - - const got1 = processResponseMessage(message1); - const got2 = processResponseMessage(message2); - - expect(got1).toEqual({ - message: message1, - messageId: 0, - type: 'HS', - value: 1, - }); - expect(got2).toEqual({ - message: message2, - messageId: 0x1122aabb, - type: 'HS', - value: 255, - }); - }); - - it('processes valid Radio Frequency response', () => { - const message = 'R[1234]RF[42]'; - - const got = processResponseMessage(message); - - expect(got).toEqual({ - message: message, - messageId: 0x1234, - type: 'RF', - value: 42, - }); - }); - - it('processes valid Remote micro:bit ID response', () => { - const message = 'R[1234]RMBID[4294967295]'; - - const got = processResponseMessage(message); - - expect(got).toEqual({ - message: message, - messageId: 0x1234, - type: 'RMBID', - value: 4294967295, - }); - }); - - it('processes valid Software Versions responses', () => { - const message1 = 'R[1234]SWVER[0.0.0]'; - const message2 = 'R[1234]SWVER[99.99.99]'; - const message3 = 'R[1234]SWVER[1.2.3]'; - - const got1 = processResponseMessage(message1); - const got2 = processResponseMessage(message2); - const got3 = processResponseMessage(message3); - - expect(got1).toEqual({ - message: message1, - messageId: 0x1234, - type: 'SWVER', - value: '0.0.0', - }); - expect(got2).toEqual({ - message: message2, - messageId: 0x1234, - type: 'SWVER', - value: '99.99.99', - }); - expect(got3).toEqual({ - message: message3, - messageId: 0x1234, - type: 'SWVER', - value: '1.2.3', - }); - }); - - it('processes valid Hardware Versions responses', () => { - const message1 = 'R[1234]HWVER[0]'; - const message2 = 'R[1234]HWVER[9999]'; - - const got1 = processResponseMessage(message1); - const got2 = processResponseMessage(message2); - - expect(got1).toEqual({ - message: message1, - messageId: 0x1234, - type: 'HWVER', - value: 0, - }); - expect(got2).toEqual({ - message: message2, - messageId: 0x1234, - type: 'HWVER', - value: 9999, - }); - }); - - it('processes valid Zstart response', () => { - const message = 'R[1234]ZSTART[]'; - - const got = processResponseMessage(message); - - expect(got).toEqual({ - message: message, - messageId: 0x1234, - type: 'ZSTART', - value: '', - }); - }); - - it('processes valid Stop response', () => { - const message = 'R[1234]STOP[]'; - - const got = processResponseMessage(message); - - expect(got).toEqual({ - message: message, - messageId: 0x1234, - type: 'STOP', - value: '', - }); - }); - - it('processes valid Error response', () => { - const message = 'R[1234]ERROR[1]'; - - const got = processResponseMessage(message); - - expect(got).toEqual({ - message: message, - messageId: 0x1234, - type: 'ERROR', - value: 1, - }); - }); - - it('throws away messages that are not a response', () => { - // First a valid response to stablish a baseline - expect(processResponseMessage('R[0]STOP[]')).not.toBeUndefined(); - // Now non-response messages types - expect(processResponseMessage('C[0]STOP[]')).toBeUndefined(); - expect(processResponseMessage('P[0]STOP[]')).toBeUndefined(); - expect(processResponseMessage('P0E80495C4341')).toBeUndefined(); - // Invalid message types - expect(processResponseMessage('Z[0]STOP[]')).toBeUndefined(); - expect(processResponseMessage('9[0]STOP[]')).toBeUndefined(); - }); - - it('throws away response messages with invalid IDs', () => { - // First a valid response to stablish a baseline - expect(processResponseMessage('R[0]STOP[]')).not.toBeUndefined(); - // Now invalid IDs - expect(processResponseMessage('R[]STOP[]')).toBeUndefined(); - expect(processResponseMessage('R[123456789]STOP[]')).toBeUndefined(); - expect(processResponseMessage('R[12G]STOP[]')).toBeUndefined(); - expect(processResponseMessage('R[-1]STOP[]')).toBeUndefined(); - expect(processResponseMessage('R[1.1]STOP[]')).toBeUndefined(); - expect(processResponseMessage('R[word]STOP[]')).toBeUndefined(); - }); - - it('throws away response messages with invalid number values', () => { - // First valid messages to stablish a baseline - expect(processResponseMessage('R[0]RF[10000]')).not.toBeUndefined(); - expect(processResponseMessage('R[0]RMBID[4294967295]')).not.toBeUndefined(); - // Now invalid values - expect(processResponseMessage('R[0]RMBID[4294967296]')).toBeUndefined(); - expect(processResponseMessage('R[0]RF[-1]')).toBeUndefined(); - expect(processResponseMessage('R[0]RF[1-2]')).toBeUndefined(); - expect(processResponseMessage('R[0]RF[1,2]')).toBeUndefined(); - expect(processResponseMessage('R[0]RF[1F]')).toBeUndefined(); - expect(processResponseMessage('R[0]RF[word]')).toBeUndefined(); - }); - - it('throws away response messages with invalid version values', () => { - // First valid messages to stablish a baseline - expect(processResponseMessage('R[0]SWVER[1.1.1]')).not.toBeUndefined(); - // Now invalid values - expect(processResponseMessage('R[0]SWVER[1]')).toBeUndefined(); - expect(processResponseMessage('R[0]SWVER[1.1]')).toBeUndefined(); - expect(processResponseMessage('R[0]SWVER[123.1.1]')).toBeUndefined(); - expect(processResponseMessage('R[0]SWVER[1.123.1]')).toBeUndefined(); - expect(processResponseMessage('R[0]SWVER[1.1.123]')).toBeUndefined(); - expect(processResponseMessage('R[0]SWVER[11.22.AA]')).toBeUndefined(); - expect(processResponseMessage('R[0]SWVER[word]')).toBeUndefined(); - }); - - it('throws away response messages with invalid empty value', () => { - // First a valid response to stablish a baseline - expect(processResponseMessage('R[0]STOP[]')).not.toBeUndefined(); - // Now non-response messages types - expect(processResponseMessage('R[0]STOP[0]')).toBeUndefined(); - expect(processResponseMessage('R[0]STOP[-1]')).toBeUndefined(); - expect(processResponseMessage('R[0]STOP[a]')).toBeUndefined(); - }); - - it('throws away other types of invalid responses', () => { - expect(processResponseMessage('R0STOP[]')).toBeUndefined(); - expect(processResponseMessage('[0]STOP[]')).toBeUndefined(); - expect(processResponseMessage('R[0]STOP')).toBeUndefined(); - expect(processResponseMessage('R[0][]')).toBeUndefined(); - expect(processResponseMessage('R[0]')).toBeUndefined(); - expect(processResponseMessage('R[0]STOP[]STOP[]')).toBeUndefined(); - expect(processResponseMessage('R[0]R[1]STOP[]')).toBeUndefined(); - expect(processResponseMessage('R[0]STOP[]S')).toBeUndefined(); - expect(processResponseMessage('R[0]RF[1')).toBeUndefined(); - expect(processResponseMessage('R[0]RF1]')).toBeUndefined(); - }); -}); diff --git a/src/__tests__/translations.test.ts b/src/__tests__/translations.test.ts deleted file mode 100644 index 323be2434..000000000 --- a/src/__tests__/translations.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ -import en from './../messages/ui.en.json'; -// TODO: actually import the right one! -const da = en; - -// We're moving translations to Crowdin so expect the English to be the only -// updated language for now -describe.skip('Translation tests', () => { - test('Should be same number of translations', () => { - const danishTranslationCount = Object.keys(da).length; - const englishTranslationCount = Object.keys(en).length; - expect(danishTranslationCount).toEqual(englishTranslationCount); - }); - - test('Translations are the same', () => { - const danishTranslationKeys = Object.getOwnPropertyNames(da) as (keyof typeof da)[]; - for (let i = 0; i < danishTranslationKeys.length; i++) { - const danishKey = danishTranslationKeys[i]; - // @ts-ignore - as translations are intentionally allowed to differ - expect(en[danishKey], 'Something not the same -> ' + danishKey).toBeDefined(); - } - }); - - // Mostly an architecture test - test('Translations should be in the same order', () => { - const danishTranslationKeys = Object.getOwnPropertyNames(da); - const englishTranslationKeys = Object.getOwnPropertyNames(en); - for (let i = 0; i < englishTranslationKeys.length; i++) { - const danishKey = danishTranslationKeys[i]; - const englishKey = englishTranslationKeys[i]; - expect(danishKey, `Not the same order found for -> ${danishKey}`).toEqual( - englishKey, - ); - } - }); -}); - -export {}; diff --git a/src/__tests__/unusedTranslations.test.ts b/src/__tests__/unusedTranslations.test.ts deleted file mode 100644 index e6c33fc85..000000000 --- a/src/__tests__/unusedTranslations.test.ts +++ /dev/null @@ -1,95 +0,0 @@ -/** - * @vitest-environment jsdom - */ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import en from './../messages/ui.en.json'; -import * as fs from 'fs'; -import * as path from 'path'; - -const ignoredFiles: RegExp[] = [ - // Alphabetical ignore list - /^smoothie.js$/, - /^__tests__$/, - /^ui.[a-z-]+.json$/, -]; - -const readFile = (fileLocation: string, expect: string) => { - const fileContent = fs.readFileSync(fileLocation); - return fileContent.toString().toLowerCase().includes(expect.toLowerCase()); -}; - -type DirectoryContents = { - files: string[]; - folders: string[]; -}; - -const readDirectory = (directory: string, ignoreList: RegExp[]): DirectoryContents => { - const files: string[] = []; - const folders: string[] = []; - const filesRead = fs.readdirSync(directory); - filesRead.forEach(file => { - if (ignoreList.some(pattern => pattern.test(file))) return; - const fileLocation = path.join(directory, file); - const stats = fs.statSync(fileLocation); - if (stats.isFile()) { - files.push(fileLocation); - } else { - folders.push(fileLocation); - } - }); - return { files: files, folders: folders }; -}; - -const flattenDirectory = (directory: string): string[] => { - const files: string[] = []; - const content = readDirectory(directory, ignoredFiles); - const filesFromSubFolders: string[] = []; - content.folders.forEach(value => { - const subFolderFlat = flattenDirectory(value); - subFolderFlat.forEach(value => filesFromSubFolders.push(value)); - }); - filesFromSubFolders.forEach(value => files.push(value)); - content.files.forEach(value => files.push(value)); - return files; -}; - -const filesIncludesExpression = (files: string[], expect: string): boolean => { - for (let i = 0; i < files.length; i++) { - if (readFile('./' + files[i], expect)) { - return true; - } - } - return false; -}; - -test( - 'All translations should be used', - () => { - const allowedUnused = [ - // We have some strings we plan to reinstate - /^popup.outdatedmicrobit/, - ]; - const translationKeys = Object.getOwnPropertyNames(en); - const flatten = flattenDirectory('./src/'); - for (let i = 0; i < translationKeys.length; i++) { - const translationKey = translationKeys[i]; - if (allowedUnused.some(regexp => regexp.test(translationKey))) { - continue; - } - expect( - filesIncludesExpression(flatten, translationKey), - "unused translation --> '" + - translationKey + - "' \n confirm with command .. \n grep -rnw ./src -e '" + - translationKey + - "'", - ).toEqual(true); - } - }, - 60000 * 10, -); diff --git a/src/__viteBuildVariants__/ml-machine/windi.config.js b/src/__viteBuildVariants__/ml-machine/windi.config.js deleted file mode 100644 index f9daee663..000000000 --- a/src/__viteBuildVariants__/ml-machine/windi.config.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -//Ml-Machine colors - -export default { - theme: { - extend: { - colors: { - primary: '#2c92d6', - primarytext: '#000000', - secondary: '#a0a0a0', - secondarytext: '#FFFFFF', - info: '#98A2B3', - backgrounddark: '#F5F5F5', - backgroundlight: '#ffffff', - infolight: '#93c5fd', - link: '#6c4bc1', - warning: '#cd0365', - disabled: '#8892A3', - primaryborder: '#E5E7EB', - infobglight: '#E7E5E4', - infobgdark: '#57534E', - infoiconlight: '#FFFFFF7F', - infoicondark: '#787878', - infotextlight: '#ffffff', - infotextdark: '#787878', - }, - }, - }, -}; diff --git a/src/__tests__/patternMatrixTransforms.test.ts b/src/bt-pattern-matrix-utils.test.ts similarity index 78% rename from src/__tests__/patternMatrixTransforms.test.ts rename to src/bt-pattern-matrix-utils.test.ts index da49f6871..5d2248139 100644 --- a/src/__tests__/patternMatrixTransforms.test.ts +++ b/src/bt-pattern-matrix-utils.test.ts @@ -12,10 +12,10 @@ import { transformColumnsToMatrix, transformMatrixToColumns, updateMatrixColumns, -} from '../script/patternMatrixTransforms'; +} from "./bt-pattern-matrix-utils"; -describe('transformMatrixToColumns', () => { - test('2 x 2', () => { +describe("transformMatrixToColumns", () => { + test("2 x 2", () => { const dim = 2; const matrix = [1, 2, 3, 4]; const columns = [ @@ -26,8 +26,8 @@ describe('transformMatrixToColumns', () => { }); }); -describe('transformColumnsToMatrix', () => { - test('2 x 2', () => { +describe("transformColumnsToMatrix", () => { + test("2 x 2", () => { const matrix = [1, 2, 3, 4]; const columns = [ [1, 3], @@ -37,8 +37,8 @@ describe('transformColumnsToMatrix', () => { }); }); -describe('getHighlightedColumns', () => { - test('cell position is above lit up cell', () => { +describe("getHighlightedColumns", () => { + test("cell position is above lit up cell", () => { const matrixColumns = [ [false, false, true], [false, false, false], @@ -50,9 +50,11 @@ describe('getHighlightedColumns', () => { [false, false, false], [false, false, false], ]; - expect(getHighlightedColumns(matrixColumns, cellPos)).toEqual(highlightedColumns); + expect(getHighlightedColumns(matrixColumns, cellPos)).toEqual( + highlightedColumns + ); }); - test('cell position is below lit up cell', () => { + test("cell position is below lit up cell", () => { const matrixColumns = [ [true, true, true], [false, false, false], @@ -64,9 +66,11 @@ describe('getHighlightedColumns', () => { [false, false, false], [false, false, false], ]; - expect(getHighlightedColumns(matrixColumns, cellPos)).toEqual(highlightedColumns); + expect(getHighlightedColumns(matrixColumns, cellPos)).toEqual( + highlightedColumns + ); }); - test('cell position is on lit up cell', () => { + test("cell position is on lit up cell", () => { const matrixColumns = [ [false, true, true], [false, false, false], @@ -78,12 +82,14 @@ describe('getHighlightedColumns', () => { [false, false, false], [false, false, false], ]; - expect(getHighlightedColumns(matrixColumns, cellPos)).toEqual(highlightedColumns); + expect(getHighlightedColumns(matrixColumns, cellPos)).toEqual( + highlightedColumns + ); }); }); -describe('updateMatrixColumns', () => { - test('cell position is above lit up cell', () => { +describe("updateMatrixColumns", () => { + test("cell position is above lit up cell", () => { const matrixColumns = [ [false, false, true], [false, false, true], @@ -95,9 +101,11 @@ describe('updateMatrixColumns', () => { [true, true, true], [false, false, true], ]; - expect(updateMatrixColumns(matrixColumns, cellPos)).toEqual(newMatrixColumns); + expect(updateMatrixColumns(matrixColumns, cellPos)).toEqual( + newMatrixColumns + ); }); - test('cell position is below lit up cell', () => { + test("cell position is below lit up cell", () => { const matrixColumns = [ [false, false, true], [true, true, true], @@ -109,9 +117,11 @@ describe('updateMatrixColumns', () => { [false, false, true], [false, false, true], ]; - expect(updateMatrixColumns(matrixColumns, cellPos)).toEqual(newMatrixColumns); + expect(updateMatrixColumns(matrixColumns, cellPos)).toEqual( + newMatrixColumns + ); }); - test('cell position is on lit up cell', () => { + test("cell position is on lit up cell", () => { const matrixColumns = [ [false, false, true], [false, false, true], diff --git a/src/script/patternMatrixTransforms.ts b/src/bt-pattern-matrix-utils.ts similarity index 72% rename from src/script/patternMatrixTransforms.ts rename to src/bt-pattern-matrix-utils.ts index 41c18e615..20a564c1c 100644 --- a/src/script/patternMatrixTransforms.ts +++ b/src/bt-pattern-matrix-utils.ts @@ -4,7 +4,10 @@ * SPDX-License-Identifier: MIT */ -export const transformMatrixToColumns = (m: T[], matrixDimension: number): T[][] => { +export const transformMatrixToColumns = ( + m: T[], + matrixDimension: number +): T[][] => { const cols = []; for (let colId = 1; colId <= matrixDimension; colId++) { const remainder = colId === matrixDimension ? 0 : colId; @@ -16,13 +19,15 @@ export const transformMatrixToColumns = (m: T[], matrixDimension: number): T[ export const transformColumnsToMatrix = (cols: T[][]): T[] => { let matrix: T[] = []; for (let i = 0; i < cols.length; i++) { - matrix = [...matrix, ...cols.map(c => c[i])]; + matrix = [...matrix, ...cols.map((c) => c[i])]; } return matrix; }; export const generateMatrix = (dimension: number, fillValue: T) => { - return new Array(dimension).fill(new Array(dimension).fill(fillValue)); + return new Array(dimension).fill( + new Array(dimension).fill(fillValue) + ); }; export type MatrixColumns = boolean[][]; @@ -34,11 +39,12 @@ export interface CellPosition { export const getHighlightedColumns = ( matrixColumns: MatrixColumns, - cellPos: CellPosition, + cellPos: CellPosition ) => { const col = matrixColumns[cellPos.colIdx]; const highlightedCol = col.map( - (isOn, idx) => (!isOn && cellPos.rowIdx <= idx) || (isOn && cellPos.rowIdx > idx), + (isOn, idx) => + (!isOn && cellPos.rowIdx <= idx) || (isOn && cellPos.rowIdx > idx) ); const highlightedColumns = generateMatrix(matrixColumns.length, false); highlightedColumns[cellPos.colIdx] = highlightedCol; @@ -47,9 +53,11 @@ export const getHighlightedColumns = ( export const updateMatrixColumns = ( matrixColumns: MatrixColumns, - cellPos: CellPosition, + cellPos: CellPosition ) => { - const newCol = Array(matrixColumns.length).fill(false).fill(true, cellPos.rowIdx); + const newCol = Array(matrixColumns.length) + .fill(false) + .fill(true, cellPos.rowIdx); return [ ...matrixColumns.slice(0, cellPos.colIdx), newCol, diff --git a/src/bt-pattern-utils.ts b/src/bt-pattern-utils.ts new file mode 100644 index 000000000..957596425 --- /dev/null +++ b/src/bt-pattern-utils.ts @@ -0,0 +1,93 @@ +/** + * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors + * + * SPDX-License-Identifier: MIT + */ + +export type BluetoothPattern = boolean[]; +const microbitNameLength = 5; + +/** + * This is a version of the microbit codebook, where the original codebook is transposed + * and the rows are flipped. This gives an easier to use version for the bluetooth pattern + * connection. + * This could be done programatically, but having it typed out hopefully helps + * with the understanding of pattern <-> friendly name conversion + */ +const microbitBluetoothCodebook: string[][] = [ + ["t", "a", "t", "a", "t"], + ["p", "e", "p", "e", "p"], + ["g", "i", "g", "i", "g"], + ["v", "o", "v", "o", "v"], + ["z", "u", "z", "u", "z"], +]; + +export const microbitNameToBluetoothPattern = ( + name: string +): BluetoothPattern => { + const pattern: BluetoothPattern = new Array(25).fill(true); + + // if wrong name length, return empty pattern + if (name.length != microbitNameLength) { + return pattern.map(() => false); + } + + for (let column = 0; column < microbitNameLength; column++) { + for (let row = 0; row < microbitNameLength; row++) { + if (microbitBluetoothCodebook[row][column] === name.charAt(column)) { + break; + } + pattern[5 * row + column] = false; + } + } + + return pattern; +}; + +const deviceIdToNameCodebook = [ + ["z", "v", "g", "p", "t"], + ["u", "o", "i", "e", "a"], + ["z", "v", "g", "p", "t"], + ["u", "o", "i", "e", "a"], + ["z", "v", "g", "p", "t"], +]; + +export const deviceIdToMicrobitName = (deviceId: number): string => { + let d = microbitNameLength; + let ld = 1; + let name = ""; + + for (let i = 0; i < microbitNameLength; i++) { + const h = Math.floor((deviceId % d) / ld); + deviceId -= h; + d *= microbitNameLength; + ld *= microbitNameLength; + name = deviceIdToNameCodebook[i][h] + name; + } + return name; +}; + +/** + * Converts a pairing pattern to a name. + * See guide on microbit names to understand how a pattern is turned into a name + * https://support.microbit.org/support/solutions/articles/19000067679-how-to-find-the-name-of-your-micro-bit + * @param {boolean[]} pattern The pattern to convert. + * @returns {string} The name of the micro:bit. + */ +export const microbitPatternToName = (pattern: boolean[]): string => { + const code: string[] = [" ", " ", " ", " ", " "]; + + for (let col = 0; col < microbitNameLength; col++) { + for (let row = 0; row < microbitNameLength; row++) { + if (pattern[row * microbitNameLength + col]) { + // Find the first vertical on/true in each column + code[col] = microbitBluetoothCodebook[row][col]; // Use code-book to find char + break; // Rest of column is irrelevant + } + // If we get to here the pattern is not legal, and the returned name + // will not match any microbit. + } + } + + return code.join(""); +}; diff --git a/src/buffered-data-hooks.tsx b/src/buffered-data-hooks.tsx new file mode 100644 index 000000000..8c12727db --- /dev/null +++ b/src/buffered-data-hooks.tsx @@ -0,0 +1,61 @@ +import { AccelerometerDataEvent } from "@microbit/microbit-connection"; +import { ReactNode, createContext, useContext, useEffect, useRef } from "react"; +import { BufferedData } from "./buffered-data"; +import { useConnectActions } from "./connect-actions-hooks"; +import { ConnectionStatus, useConnectStatus } from "./connect-status-hooks"; +import { mlSettings } from "./ml"; + +const BufferedDataContext = createContext(null); + +interface ConnectProviderProps { + children: ReactNode; +} + +export const BufferedDataProvider = ({ children }: ConnectProviderProps) => { + const bufferedData = useBufferedDataInternal(); + return ( + + {children} + + ); +}; + +export const useBufferedData = (): BufferedData => { + const value = useContext(BufferedDataContext); + if (!value) { + throw new Error("Missing provider"); + } + return value; +}; + +const useBufferedDataInternal = (): BufferedData => { + const [connectStatus] = useConnectStatus(); + const connection = useConnectActions(); + const bufferRef = useRef(); + const getBuffer = () => { + if (bufferRef.current) { + return bufferRef.current; + } + bufferRef.current = new BufferedData(mlSettings.numSamples * 2); + return bufferRef.current; + }; + useEffect(() => { + if (connectStatus !== ConnectionStatus.Connected) { + return; + } + const listener = (e: AccelerometerDataEvent) => { + const { x, y, z } = e.data; + const sample = { + x: x / 1000, + y: y / 1000, + z: z / 1000, + }; + getBuffer().addSample(sample, Date.now()); + }; + connection.addAccelerometerListener(listener); + return () => { + connection.removeAccelerometerListener(listener); + }; + }, [connection, connectStatus]); + return getBuffer(); +}; diff --git a/src/buffered-data.test.ts b/src/buffered-data.test.ts new file mode 100644 index 000000000..f47f002b3 --- /dev/null +++ b/src/buffered-data.test.ts @@ -0,0 +1,129 @@ +import { describe, it } from "vitest"; +import { BufferedData, RingBuffer } from "./buffered-data"; + +describe("RingBuffer", () => { + it("toArray empty", () => { + const buffer = new RingBuffer(5); + expect(buffer.size).toEqual(0); + expect(buffer.toArray()).toEqual([]); + }); + it("toArray part full", () => { + const buffer = new RingBuffer(5); + buffer.add(1); + expect(buffer.size).toEqual(1); + buffer.add(2); + expect(buffer.size).toEqual(2); + expect(buffer.toArray()).toEqual([1, 2]); + }); + it("toArray full", () => { + const buffer = new RingBuffer(3); + buffer.add(1); + buffer.add(2); + buffer.add(3); + expect(buffer.size).toEqual(3); + expect(buffer.toArray()).toEqual([1, 2, 3]); + }); + it("toArray wrap", () => { + const buffer = new RingBuffer(3); + buffer.add(1); + buffer.add(2); + buffer.add(3); + buffer.add(4); + expect(buffer.toArray()).toEqual([2, 3, 4]); + }); +}); + +describe("BufferedData", () => { + it("picks by timestamp", () => { + const buffer = new BufferedData(10); + buffer.addSample({ x: 0, y: 0, z: 0 }, 0); + buffer.addSample({ x: 1, y: 0, z: 0 }, 10); + buffer.addSample({ x: 2, y: 0, z: 0 }, 20); + buffer.addSample({ x: 3, y: 0, z: 0 }, 30); + expect(buffer.getSamples(0)).toEqual({ + x: [0, 1, 2, 3], + y: [0, 0, 0, 0], + z: [0, 0, 0, 0], + }); + expect(buffer.getSamples(1)).toEqual({ + x: [1, 2, 3], + y: [0, 0, 0], + z: [0, 0, 0], + }); + expect(buffer.getSamples(9)).toEqual({ + x: [1, 2, 3], + y: [0, 0, 0], + z: [0, 0, 0], + }); + expect(buffer.getSamples(10)).toEqual({ + x: [1, 2, 3], + y: [0, 0, 0], + z: [0, 0, 0], + }); + expect(buffer.getSamples(11)).toEqual({ + x: [2, 3], + y: [0, 0], + z: [0, 0], + }); + }); + + it("copes when full/wrapping", () => { + const buffer = new BufferedData(3); + buffer.addSample({ x: 0, y: 0, z: 0 }, 0); + buffer.addSample({ x: 1, y: 0, z: 0 }, 10); + buffer.addSample({ x: 2, y: 0, z: 0 }, 20); + buffer.addSample({ x: 3, y: 0, z: 0 }, 30); + expect(buffer.getSamples(0)).toEqual({ + x: [1, 2, 3], + y: [0, 0, 0], + z: [0, 0, 0], + }); + }); + + it("copes when full/wrapping 2", () => { + const buffer = new BufferedData(3); + buffer.addSample({ x: 0, y: 0, z: 0 }, 0); + buffer.addSample({ x: 1, y: 0, z: 0 }, 10); + buffer.addSample({ x: 2, y: 0, z: 0 }, 20); + buffer.addSample({ x: 3, y: 0, z: 0 }, 30); + buffer.addSample({ x: 4, y: 0, z: 0 }, 40); + expect(buffer.getSamples(40)).toEqual({ + x: [4], + y: [0], + z: [0], + }); + expect(buffer.getSamples(30)).toEqual({ + x: [3, 4], + y: [0, 0], + z: [0, 0], + }); + expect(buffer.getSamples(20)).toEqual({ + x: [2, 3, 4], + y: [0, 0, 0], + z: [0, 0, 0], + }); + expect(buffer.getSamples(10)).toEqual({ + x: [2, 3, 4], + y: [0, 0, 0], + z: [0, 0, 0], + }); + + buffer.addSample({ x: 5, y: 0, z: 0 }, 50); + buffer.addSample({ x: 6, y: 0, z: 0 }, 60); + expect(buffer.getSamples(10)).toEqual({ + x: [4, 5, 6], + y: [0, 0, 0], + z: [0, 0, 0], + }); + }); + + it("returns nothing when it has nothing since start time", () => { + const buffer = new BufferedData(3); + buffer.addSample({ x: 0, y: 0, z: 0 }, 0); + expect(buffer.getSamples(10)).toEqual({ + x: [], + y: [], + z: [], + }); + }); +}); diff --git a/src/buffered-data.ts b/src/buffered-data.ts new file mode 100644 index 000000000..d18e38eba --- /dev/null +++ b/src/buffered-data.ts @@ -0,0 +1,86 @@ +import { XYZData } from "./model"; + +export interface TimedXYZ { + x: number; + y: number; + z: number; + timestamp: number; +} + +type SampleListener = (v: TimedXYZ) => void; + +export class BufferedData { + private buffer: RingBuffer; + private listeners = new Set(); + + constructor(size: number) { + this.buffer = new RingBuffer(size); + } + + addListener(listener: SampleListener): void { + this.listeners.add(listener); + } + + removeListener(listener: SampleListener): void { + this.listeners.delete(listener); + } + + addSample(data: { x: number; y: number; z: number }, timestamp: number) { + const sample = { ...data, timestamp }; + this.buffer.add(sample); + if (this.listeners.size) { + this.listeners.forEach((l) => l(sample)); + } + } + + getSamples(startTimeMillis: number, endTimeMillis: number = -1): XYZData { + const ordered = this.buffer.toArray(); + const result: XYZData = { x: [], y: [], z: [] }; + // Go backwards until we have `duration` of samples + let start: number; + for ( + start = ordered.length - 1; + start >= 0 && ordered[start].timestamp >= startTimeMillis; + start-- + ) { + /* empty */ + } + + for (let i = start + 1; i < ordered.length; ++i) { + if (endTimeMillis === -1 || ordered[i].timestamp < endTimeMillis) { + result.x.push(ordered[i].x); + result.y.push(ordered[i].y); + result.z.push(ordered[i].z); + } + } + return result; + } +} + +export class RingBuffer { + private buffer: T[]; + private pos: number = 0; + size: number = 0; + + constructor(size: number) { + this.buffer = new Array(size); + } + + add(value: T) { + this.buffer[this.pos] = value; + if (this.size < this.pos + 1) { + this.size = this.pos + 1; + } + this.pos = (this.pos + 1) % this.buffer.length; + } + + toArray() { + if (this.size === 0) { + return []; + } + if (this.size < this.buffer.length) { + return this.buffer.slice(0, this.size); + } + return this.buffer.slice(this.pos).concat(this.buffer.slice(0, this.pos)); + } +} diff --git a/src/components/3d-inspector/RecordingInspector.svelte b/src/components/3d-inspector/RecordingInspector.svelte deleted file mode 100644 index 957359dcb..000000000 --- a/src/components/3d-inspector/RecordingInspector.svelte +++ /dev/null @@ -1,37 +0,0 @@ - - - - -{#if isOpen} -
-
- -
-
-{/if} diff --git a/src/components/3d-inspector/View3D.svelte b/src/components/3d-inspector/View3D.svelte deleted file mode 100644 index 2e13037a4..000000000 --- a/src/components/3d-inspector/View3D.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - -{#if webGlCompatible} - -{:else} -
-
- {$t('compatibility.webgl.notSupported')} -
-
-{/if} diff --git a/src/components/3d-inspector/View3DLive.svelte b/src/components/3d-inspector/View3DLive.svelte deleted file mode 100644 index 1c99df7a7..000000000 --- a/src/components/3d-inspector/View3DLive.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/src/components/3d-inspector/View3DUnsafe.svelte b/src/components/3d-inspector/View3DUnsafe.svelte deleted file mode 100644 index ad9ca878c..000000000 --- a/src/components/3d-inspector/View3DUnsafe.svelte +++ /dev/null @@ -1,212 +0,0 @@ - - - - -
- -
diff --git a/src/components/3d-inspector/View3DUtility.ts b/src/components/3d-inspector/View3DUtility.ts deleted file mode 100644 index 3d292b4e7..000000000 --- a/src/components/3d-inspector/View3DUtility.ts +++ /dev/null @@ -1,158 +0,0 @@ -/** - * (c) 2023, Center for Computational Thinking and Design at Aarhus University and contributors - * - * SPDX-License-Identifier: MIT - */ - -import { writable } from 'svelte/store'; -import * as THREE from 'three'; -import { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; - -// TODO: Why is this a class? No methods mutates object state, and -// only one method uses class state. -// Refacor to pure functions and simply create the loader where needed -class Live3DUtility { - private loader: GLTFLoader; - - constructor() { - this.loader = new GLTFLoader(); - } - - // TODO: Fix naming - createSceneWith(array: THREE.Object3D[]) { - return new THREE.Scene().add(...array); - } - - instantiateRenderer(canvas: HTMLCanvasElement, width: number, height: number) { - const renderer = new THREE.WebGLRenderer({ antialias: true, canvas }); - renderer.setClearColor('#ffffff', 0); - renderer.setSize(width, height); - renderer.outputColorSpace = THREE.SRGBColorSpace; - renderer.toneMapping = THREE.ACESFilmicToneMapping; - renderer.toneMappingExposure = 1.5; - renderer.setPixelRatio(window.devicePixelRatio); - - return renderer; - } - - instantiateLighting() { - const light1 = new THREE.PointLight(0xffffff, 0.7, 250); // 100, 5000 - light1.position.set(3, 6, 3); - light1.lookAt(new THREE.Vector3(-3, -6, -3)); - - const light2 = new THREE.PointLight(0xffffff, 0.7, 250); // 100, 5000 - light2.position.set(5, 0, 5); - light2.lookAt(new THREE.Vector3(-5, 0, -5)); - - return this.createSceneWith([light1, light2]); - } - - setupLightingIn(scene: THREE.Scene): void { - scene.add(this.instantiateLighting()); - } - - instantiateCameraSetup(width: number, height: number, perspective = 85) { - const camera = new THREE.PerspectiveCamera(perspective, width / height, 0.1, 1000); - - // Position - camera.position.z = 5; - camera.position.x = 5; - camera.position.y = 4; - - // Rotation - camera.lookAt(new THREE.Vector3(-5, -2, -5)); - - return camera; - } - - /** - * Apply pose to a mesh - * @param mesh to which the pose is applied - * @param pos the new position - * @param dir the new direction - */ - applyPose( - mesh: THREE.Mesh, // TODO: Fix any - pos: THREE.Vector3, - dir: THREE.Vector3, - ) { - mesh.position.set(pos.x, pos.y, pos.z); - mesh.rotation.x = this.toRadian(dir.x); - mesh.rotation.y = this.toRadian(dir.y); - mesh.rotation.z = this.toRadian(dir.z); - } - - toRadian(degrees: number) { - return (degrees / 180) * Math.PI; - } - - instantiateBar( - color: THREE.ColorRepresentation, - ): THREE.Mesh { - const material = new THREE.MeshLambertMaterial({ color }); - const cylinder = new THREE.CylinderGeometry(0.4, 0.4, 2, 16); - const cylinderMesh = new THREE.Mesh(cylinder, material); - return cylinderMesh; - } - - /** - * Instantiate and add three bars to a scene. Used for visualising three data points in 3D - * @param scene the scene in which the bars should be added - * @returns The bars - */ - setupBarsIn(scene: THREE.Scene): Bars { - const barX = this.instantiateBar(0xff1515); - const barY = this.instantiateBar(0x10ff10); - const barZ = this.instantiateBar(0x2222ff); - scene.add(barX, barY, barZ); - this.applyPose(barX, new THREE.Vector3(-4, -5, -5), new THREE.Vector3(0, 0, 90)); - this.applyPose(barY, new THREE.Vector3(-5, -5, -4), new THREE.Vector3(90, 0, 0)); - this.applyPose(barZ, new THREE.Vector3(-5, -4, -5), new THREE.Vector3(0, 90, 0)); - - return { barX, barY, barZ }; - } - - async loadMicrobitModel(onProgress?: (event: ProgressEvent) => void) { - return new Promise((resolve, reject) => { - // When loaded. Extract the actual model from the loaded model. Rotate it properly. Resolve. - const onFinished = (gltf: GLTF) => { - const model = gltf.scene.children[0].children[0].children[0]; - const group = new THREE.Scene(); - group.add(model); - model.lookAt(0, 0, 1); - resolve(group); - }; - - this.loader.load( - `${import.meta.env.BASE_URL}models/microbit.gltf`, - onFinished, - onProgress, - reject, - ); - }); - } -} - -export type Bars = { - barX: THREE.Mesh; - barY: THREE.Mesh; - barZ: THREE.Mesh; -}; - -export type Vector3 = { - x: number; - y: number; - z: number; -}; - -export default Live3DUtility; - -export const graphInspectorState = writable<{ - isOpen: boolean; - dataPoint: Vector3; - inspectorPosition: { x: number; y: number }; -}>({ - isOpen: false, - dataPoint: { x: 0, y: 0, z: 0 }, - inspectorPosition: { x: 0, y: 0 }, -}); diff --git a/src/components/AboutDialog.tsx b/src/components/AboutDialog.tsx new file mode 100644 index 000000000..3a9520932 --- /dev/null +++ b/src/components/AboutDialog.tsx @@ -0,0 +1,161 @@ +import { + Modal, + ModalBody, + ModalContent, + ModalFooter, + ModalOverlay, +} from "@chakra-ui/modal"; +import { + AspectRatio, + Box, + Button, + HStack, + Icon, + Image, + Link, + ModalCloseButton, + SimpleGrid, + Table, + TableCaption, + Tbody, + Td, + Text, + Tr, + VStack, + VisuallyHidden, + useClipboard, +} from "@chakra-ui/react"; +import { ReactNode } from "react"; +import { RiFileCopy2Line, RiGithubFill } from "react-icons/ri"; +import { FormattedMessage, useIntl } from "react-intl"; +import { useDeployment } from "../deployment"; +import aarhusLogo from "../images/aulogo_uk_var2_blue.png"; +import microbitHeartImage from "../images/microbit-heart.png"; + +interface AboutDialogProps { + isOpen: boolean; + onClose: () => void; + finalFocusRef?: React.RefObject; +} + +/** + * An about dialog with version information. + */ +const AboutDialog = ({ isOpen, onClose, finalFocusRef }: AboutDialogProps) => { + const { appNameFull, OrgLogo } = useDeployment(); + const versionInfo = [ + { + name: appNameFull, + value: import.meta.env.VITE_VERSION, + href: "https://github.com/microbit-foundation/ml-trainer", + }, + ]; + + const clipboardVersion = versionInfo + .map((x) => `${x.name} ${x.value}`) + .join("\n"); + + const { hasCopied, onCopy } = useClipboard(clipboardVersion); + const intl = useIntl(); + return ( + + + + + + + + {OrgLogo && } + + + + ( + + {chunks} + + ), + }} + /> + + + + + {intl.formatMessage({ + + + + + + {versionInfo.map((v) => ( + + + + + + ))} + + + + +
{v.name}{v.value} + {/* Move padding so we get a reasonable click target. */} + + + GitHub + +
+ +
+
+
+
+ + + +
+
+
+ ); +}; + +export default AboutDialog; diff --git a/src/components/ActionBar.tsx b/src/components/ActionBar.tsx new file mode 100644 index 000000000..d8ed539ff --- /dev/null +++ b/src/components/ActionBar.tsx @@ -0,0 +1,37 @@ +import { BoxProps, HStack } from "@chakra-ui/react"; +import { ReactNode } from "react"; + +export interface ActionBarProps extends BoxProps { + itemsLeft?: ReactNode; + itemsCenter?: ReactNode; + itemsRight?: ReactNode; +} + +const ActionBar = ({ + itemsLeft, + itemsCenter, + itemsRight, + ...rest +}: ActionBarProps) => { + return ( + + + {itemsLeft} + + {itemsCenter && {itemsCenter}} + + {itemsRight} + + + ); +}; + +export default ActionBar; diff --git a/src/components/AddDataGridRow.tsx b/src/components/AddDataGridRow.tsx new file mode 100644 index 000000000..3caeb3853 --- /dev/null +++ b/src/components/AddDataGridRow.tsx @@ -0,0 +1,78 @@ +import { GridItem, Text, useDisclosure } from "@chakra-ui/react"; +import { FormattedMessage, useIntl } from "react-intl"; +import { GestureData } from "../model"; +import { useStore } from "../store"; +import AddDataGridWalkThrough from "./AddDataGridWalkThrough"; +import { ConfirmDialog } from "./ConfirmDialog"; +import DataRecordingGridItem from "./DataRecordingGridItem"; +import GestureNameGridItem from "./GestureNameGridItem"; + +interface AddDataGridRowProps { + gesture: GestureData; + selected: boolean; + onSelectRow: () => void; + onRecord: () => void; + showWalkThrough: boolean; +} + +const DataSampleGridRow = ({ + gesture, + selected, + onSelectRow, + onRecord, + showWalkThrough, +}: AddDataGridRowProps) => { + const intl = useIntl(); + const deleteConfirmDisclosure = useDisclosure(); + const deleteGesture = useStore((s) => s.deleteGesture); + return ( + <> + + + + } + onConfirm={() => deleteGesture(gesture.ID)} + onCancel={deleteConfirmDisclosure.onClose} + /> + + {showWalkThrough ? ( + + ) : ( + <> + {gesture.name.length > 0 || gesture.recordings.length > 0 ? ( + + ) : ( + // Empty grid item to fill column space + + )} + + )} + + ); +}; + +export default DataSampleGridRow; diff --git a/src/components/AddDataGridWalkThrough.tsx b/src/components/AddDataGridWalkThrough.tsx new file mode 100644 index 000000000..cfc030418 --- /dev/null +++ b/src/components/AddDataGridWalkThrough.tsx @@ -0,0 +1,56 @@ +import { GridItem, HStack, Text, VStack } from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; +import { GestureData } from "../model"; +import DataRecordingGridItem from "./DataRecordingGridItem"; +import GreetingEmojiWithArrow from "./GreetingEmojiWithArrow"; +import UpCurveArrow from "./UpCurveArrow"; + +interface AddDataGridWalkThrough { + gesture: GestureData; + onRecord: () => void; +} + +const AddDataGridWalkThrough = ({ + gesture, + onRecord, +}: AddDataGridWalkThrough) => { + return ( + <> + {gesture.name.length === 0 ? ( + + + + + + + + + ) : ( + <> + + {/* Empty grid item to fill first column of grid */} + + + + + + + + + + + )} + + ); +}; + +export default AddDataGridWalkThrough; diff --git a/src/components/AppLogo.tsx b/src/components/AppLogo.tsx new file mode 100644 index 000000000..559715961 --- /dev/null +++ b/src/components/AppLogo.tsx @@ -0,0 +1,38 @@ +import { As, Divider, HStack } from "@chakra-ui/react"; +import { useDeployment } from "../deployment"; + +const AppLogo = ({ + color = "#FFF", + as, +}: { + color?: string; + beta?: boolean; + as?: As; +}) => { + const { AppLogo, OrgLogo } = useDeployment(); + return ( + + {OrgLogo && ( + <> + + + + )} + + + ); +}; + +export default AppLogo; diff --git a/src/components/ArrowOne.tsx b/src/components/ArrowOne.tsx new file mode 100644 index 000000000..d7fd82be1 --- /dev/null +++ b/src/components/ArrowOne.tsx @@ -0,0 +1,33 @@ +import { Box, Text } from "@chakra-ui/react"; + +const ArrowOne = () => { + return ( + + + + + + + + 1 + + + + + ); +}; + +export default ArrowOne; diff --git a/src/components/ArrowTwo.tsx b/src/components/ArrowTwo.tsx new file mode 100644 index 000000000..a4c05f310 --- /dev/null +++ b/src/components/ArrowTwo.tsx @@ -0,0 +1,33 @@ +import { Box, Text } from "@chakra-ui/react"; + +const ArrowTwo = () => { + return ( + + + + + + + + + 2 + + + + + ); +}; +export default ArrowTwo; diff --git a/src/components/BackArrow.tsx b/src/components/BackArrow.tsx new file mode 100644 index 000000000..80dad60b0 --- /dev/null +++ b/src/components/BackArrow.tsx @@ -0,0 +1,12 @@ +import { Icon, IconProps } from "@chakra-ui/react"; + +const BackArrow = (props: IconProps) => ( + + + +); + +export default BackArrow; diff --git a/src/components/BluetoothPatternInput.tsx b/src/components/BluetoothPatternInput.tsx new file mode 100644 index 000000000..86388515b --- /dev/null +++ b/src/components/BluetoothPatternInput.tsx @@ -0,0 +1,177 @@ +import { + Button, + FormControl, + FormLabel, + Grid, + GridItem, + NumberInput, + NumberInputField, + VisuallyHidden, +} from "@chakra-ui/react"; +import { useCallback, useState } from "react"; +import { FormattedMessage } from "react-intl"; +import { + generateMatrix, + getHighlightedColumns, + transformColumnsToMatrix, + transformMatrixToColumns, + updateMatrixColumns, +} from "../bt-pattern-matrix-utils"; +import React from "react"; + +interface BluetoothPatternInputProps { + pattern: boolean[]; + onChange: (matrix: boolean[]) => void; + invalid: boolean; +} + +const matrixDim = 5; + +const BluetoothPatternInput = ({ + pattern, + onChange, + invalid, +}: BluetoothPatternInputProps) => { + const [highlighted, setHighlighted] = useState( + generateMatrix(matrixDim, false) + ); + const matrixColumns = transformMatrixToColumns(pattern, matrixDim); + + const clearHighlighted = useCallback(() => { + setHighlighted(generateMatrix(matrixDim, false)); + }, []); + + const updateMatrix = useCallback( + (colIdx: number, rowIdx: number) => { + const columns = updateMatrixColumns(matrixColumns, { colIdx, rowIdx }); + const matrix = transformColumnsToMatrix(columns) as boolean[]; + onChange(matrix); + }, + [matrixColumns, onChange] + ); + + const columnInputOnChange = useCallback( + (colIdx: number): ((value: string) => void) => { + return (v) => { + updateMatrix(colIdx, matrixDim - parseInt(v)); + }; + }, + [updateMatrix] + ); + + return ( + + {matrixColumns.map((cells, colIdx) => ( + + {cells.map((c, rowIdx) => ( + + { + clearHighlighted(); + updateMatrix(colIdx, rowIdx); + }} + onMouseEnter={() => { + setHighlighted( + getHighlightedColumns(matrixColumns, { colIdx, rowIdx }) + ); + }} + onMouseLeave={clearHighlighted} + isOn={c} + isHighlighted={highlighted[colIdx][rowIdx]} + /> + + ))} + + c).length} + /> + + + ))} + + ); +}; + +interface PatternBoxProps { + isOn: boolean; + onClick: () => void; + onMouseEnter: () => void; + onMouseLeave: () => void; + isHighlighted: boolean; +} + +const PatternBox = ({ + isOn, + onClick, + onMouseEnter, + onMouseLeave, + isHighlighted, +}: PatternBoxProps) => { + return ( + + + + + + + + + ); +}; + +export default BrokenFirmwareDialog; diff --git a/src/components/CertaintyThresholdGridItem.tsx b/src/components/CertaintyThresholdGridItem.tsx new file mode 100644 index 000000000..90dd5557c --- /dev/null +++ b/src/components/CertaintyThresholdGridItem.tsx @@ -0,0 +1,123 @@ +import { + Card, + CardBody, + GridItem, + HStack, + Slider, + SliderFilledTrack, + SliderMark, + SliderThumb, + SliderTrack, + Text, + VStack, +} from "@chakra-ui/react"; +import { useCallback, useMemo } from "react"; +import { FormattedMessage, useIntl } from "react-intl"; +import { tourElClassname } from "../tours"; +import PercentageDisplay from "./PercentageDisplay"; +import PercentageMeter from "./PercentageMeter"; + +const markClass = "CertaintyThresholdGridItem--mark"; + +interface CertaintyThresholdGridItemProps { + requiredConfidence?: number; + currentConfidence?: number; + onThresholdChange: (val: number) => void; + isTriggered: boolean; +} + +const CertaintyThresholdGridItem = ({ + requiredConfidence = 0, + currentConfidence = 0, + onThresholdChange, + isTriggered, +}: CertaintyThresholdGridItemProps) => { + const intl = useIntl(); + const barWidth = 240; + const colorScheme = useMemo( + () => (isTriggered ? "brand2.500" : undefined), + [isTriggered] + ); + + const handleThresholdChange = useCallback( + (val: number) => onThresholdChange(val * 0.01), + [onThresholdChange] + ); + const sliderValue = requiredConfidence * 100; + return ( + + + + + + + + + + + + + + {sliderValue.toFixed(0)}% + + + + + + + + + + + ); +}; + +export default CertaintyThresholdGridItem; diff --git a/src/components/ClickableTooltip.tsx b/src/components/ClickableTooltip.tsx new file mode 100644 index 000000000..b23cca6d1 --- /dev/null +++ b/src/components/ClickableTooltip.tsx @@ -0,0 +1,26 @@ +import { Flex, Tooltip, TooltipProps, useDisclosure } from "@chakra-ui/react"; +import { ReactNode } from "react"; + +interface ClickableTooltipProps extends TooltipProps { + children: ReactNode; +} + +// Chakra Tooltip doesn't support triggering on mobile/tablets: +// https://github.com/chakra-ui/chakra-ui/issues/2691 + +const ClickableTooltip = ({ children, ...rest }: ClickableTooltipProps) => { + const label = useDisclosure(); + return ( + + + {children} + + + ); +}; + +export default ClickableTooltip; diff --git a/src/components/CodeViewCard.tsx b/src/components/CodeViewCard.tsx new file mode 100644 index 000000000..6455b3651 --- /dev/null +++ b/src/components/CodeViewCard.tsx @@ -0,0 +1,45 @@ +import { Card, SkeletonText, VStack } from "@chakra-ui/react"; +import { + BlockLayout, + MakeCodeBlocksRendering, + Project, +} from "@microbit/makecode-embed/react"; +import { memo } from "react"; +import { tourElClassname } from "../tours"; + +interface CodeViewCardProps { + project: Project; +} + +const CodeViewCard = ({ project }: CodeViewCardProps) => { + return ( + + + + } + /> + + + ); +}; + +export default memo(CodeViewCard); diff --git a/src/components/CodeViewGridItem.tsx b/src/components/CodeViewGridItem.tsx new file mode 100644 index 000000000..755717f61 --- /dev/null +++ b/src/components/CodeViewGridItem.tsx @@ -0,0 +1,64 @@ +import { Box, Card, GridItem, SkeletonText } from "@chakra-ui/react"; +import { + BlockLayout, + MakeCodeBlocksRendering, +} from "@microbit/makecode-embed/react"; +import { memo, useMemo } from "react"; +import { generateProject } from "../makecode/utils"; +import { GestureData } from "../model"; +import { useStore } from "../store"; +import { tourElClassname } from "../tours"; + +interface CodeViewGridItemProps { + gesture: GestureData; + projectEdited: boolean; +} + +const CodeViewGridItem = ({ + gesture, + projectEdited, +}: CodeViewGridItemProps) => { + const model = useStore((s) => s.model); + const gestures = useStore((s) => s.gestures); + const project = useMemo( + () => generateProject({ data: gestures }, model, gesture), + [gesture, gestures, model] + ); + const width = useMemo( + () => `${120 + gesture.name.length * 5}px`, + [gesture.name.length] + ); + return ( + + {!projectEdited && ( + + + + } + /> + + + )} + + ); +}; + +export default memo(CodeViewGridItem); diff --git a/src/components/ConfirmDialog.tsx b/src/components/ConfirmDialog.tsx new file mode 100644 index 000000000..972b4bde0 --- /dev/null +++ b/src/components/ConfirmDialog.tsx @@ -0,0 +1,73 @@ +/** + * (c) 2021, Micro:bit Educational Foundation and contributors + * + * SPDX-License-Identifier: MIT + */ +import { Button } from "@chakra-ui/button"; +import { + AlertDialog, + AlertDialogBody, + AlertDialogContent, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogOverlay, +} from "@chakra-ui/modal"; +import { Heading } from "@chakra-ui/react"; +import { ReactNode, useRef } from "react"; +import { useIntl } from "react-intl"; + +export interface ConfirmDialogProps { + isOpen: boolean; + heading: ReactNode; + body: ReactNode; + onConfirm: () => void; + onCancel: () => void; + confirmText?: string; + cancelText?: string; +} + +export const ConfirmDialog = ({ + isOpen, + heading, + body, + onConfirm, + onCancel, + confirmText, + cancelText, +}: ConfirmDialogProps) => { + const intl = useIntl(); + confirmText = confirmText ?? intl.formatMessage({ id: "confirm-action" }); + cancelText = cancelText ?? intl.formatMessage({ id: "cancel-action" }); + const leastDestructiveRef = useRef(null); + return ( + + + + + + {heading} + + + {body} + + + + + + + + ); +}; diff --git a/src/components/ConnectBatteryDialog.tsx b/src/components/ConnectBatteryDialog.tsx new file mode 100644 index 000000000..e23d5bc93 --- /dev/null +++ b/src/components/ConnectBatteryDialog.tsx @@ -0,0 +1,52 @@ +import { Icon, Image, Link, Text, VStack } from "@chakra-ui/react"; +import { RiExternalLinkLine } from "react-icons/ri"; +import { FormattedMessage } from "react-intl"; +import { useDeployment } from "../deployment"; +import microbitConnectedImage from "../images/stylised-microbit-connected.svg"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; + +export interface ConnectBatteryDialogProps + extends Omit {} + +const ConnectBatteryDialog = ({ ...props }: ConnectBatteryDialogProps) => { + const { supportLinks } = useDeployment(); + return ( + + + + + + + + + + + + + ); +}; + +export default ConnectBatteryDialog; diff --git a/src/components/ConnectCableDialog.tsx b/src/components/ConnectCableDialog.tsx new file mode 100644 index 000000000..ce6ebd515 --- /dev/null +++ b/src/components/ConnectCableDialog.tsx @@ -0,0 +1,104 @@ +import { Button, Image, Text, VStack } from "@chakra-ui/react"; +import { FormattedMessage, useIntl } from "react-intl"; +import connectCableImage from "../images/connect-cable.gif"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; +import { ConnectionFlowType } from "../connection-stage-hooks"; +import { stage } from "../environment"; + +type LinkType = "switch" | "skip" | "none"; +interface Config { + headingId: string; + subtitleId: string; + linkTextId?: string; + linkType?: LinkType; +} + +export const getConnectionCableDialogConfig = ( + flowType: ConnectionFlowType, + isWebBluetoothSupported: boolean +): Config => { + switch (flowType) { + case ConnectionFlowType.ConnectBluetooth: + return { + headingId: "connectMB.connectCable.heading", + subtitleId: "connectMB.connectCable.subtitle", + linkTextId: "connectMB.connectCable.skip", + linkType: "skip", + }; + case ConnectionFlowType.ConnectRadioRemote: + return { + headingId: "connectMB.connectCableMB1.heading", + subtitleId: "connectMB.connectCableMB1.subtitle", + ...(stage === "local" + ? { + linkTextId: "connectMB.connectCable.skip", + linkType: "skip", + } + : {}), + }; + case ConnectionFlowType.ConnectRadioBridge: + return { + headingId: "connectMB.connectCableMB2.heading", + subtitleId: "connectMB.connectCableMB2.subtitle", + ...(isWebBluetoothSupported + ? { + linkTextId: "connectMB.radioStart.switchBluetooth", + linkType: "switch", + } + : {}), + }; + } +}; + +export interface ConnectCableDialogProps + extends Omit { + config: Config; + onSkip?: () => void; + onSwitch?: () => void; +} + +const ConnectCableDialog = ({ + config, + onSkip, + onSwitch, + ...props +}: ConnectCableDialogProps) => { + const { subtitleId, linkType, linkTextId, headingId } = config; + const intl = useIntl(); + return ( + + + + ) + } + > + + + + + {intl.formatMessage({ + + + ); +}; + +export default ConnectCableDialog; diff --git a/src/components/ConnectContainerDialog.tsx b/src/components/ConnectContainerDialog.tsx new file mode 100644 index 000000000..937d891c1 --- /dev/null +++ b/src/components/ConnectContainerDialog.tsx @@ -0,0 +1,84 @@ +import { + Modal, + ModalBody, + ModalContent, + ModalFooter, + ModalOverlay, +} from "@chakra-ui/modal"; +import { + Button, + HStack, + Heading, + ModalCloseButton, + VStack, +} from "@chakra-ui/react"; +import { ReactNode } from "react"; +import { FormattedMessage } from "react-intl"; + +export interface ConnectContainerDialogProps { + isOpen: boolean; + onClose: () => void; + headingId: string; + footerLeft?: ReactNode; + onNextClick?: () => void; + children: ReactNode; + onBackClick?: () => void; + additionalActions?: ReactNode; +} + +const ConnectContainerDialog = ({ + isOpen, + onClose, + headingId, + footerLeft, + onNextClick, + onBackClick, + additionalActions, + children, +}: ConnectContainerDialogProps) => { + return ( + + + + + + + + + + {children} + + + + {footerLeft && footerLeft} + + {onBackClick && ( + + )} + {additionalActions} + {onNextClick && ( + + )} + + + + + + ); +}; + +export default ConnectContainerDialog; diff --git a/src/components/ConnectErrorDialog.tsx b/src/components/ConnectErrorDialog.tsx new file mode 100644 index 000000000..79c8a1c8f --- /dev/null +++ b/src/components/ConnectErrorDialog.tsx @@ -0,0 +1,144 @@ +import { + Button, + HStack, + Heading, + ListItem, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalOverlay, + Text, + UnorderedList, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; +import { + ConnectionFlowStep, + ConnectionFlowType, +} from "../connection-stage-hooks"; +import ExternalLink from "./ExternalLink"; +import { useDeployment } from "../deployment"; + +interface ConnectErrorDialogProps { + isOpen: boolean; + onClose: () => void; + onConnect: () => void; + flowType: ConnectionFlowType; + errorStep: + | ConnectionFlowStep.ConnectFailed + | ConnectionFlowStep.ReconnectFailed + | ConnectionFlowStep.ConnectionLost; +} + +const contentConfig = { + [ConnectionFlowType.ConnectBluetooth]: { + listHeading: "disconnectedWarning.bluetooth2", + bullets: [ + "disconnectedWarning.bluetooth3", + "disconnectedWarning.bluetooth4", + ], + }, + [ConnectionFlowType.ConnectRadioBridge]: { + listHeading: "connectMB.usbTryAgain.replugMicrobit2", + bullets: [ + "connectMB.usbTryAgain.replugMicrobit3", + "connectMB.usbTryAgain.replugMicrobit4", + ], + }, + [ConnectionFlowType.ConnectRadioRemote]: { + listHeading: "disconnectedWarning.bluetooth2", + bullets: [ + "disconnectedWarning.bluetooth3", + "disconnectedWarning.bluetooth4", + ], + }, +}; + +const errorTextIdPrefixConfig = { + [ConnectionFlowStep.ConnectionLost]: "disconnectedWarning", + [ConnectionFlowStep.ReconnectFailed]: "reconnectFailed", + [ConnectionFlowStep.ConnectFailed]: "connectFailed", +}; + +const ReconnectErrorDialog = ({ + isOpen, + onClose, + onConnect, + flowType, + errorStep, +}: ConnectErrorDialogProps) => { + const { supportLinks } = useDeployment(); + const errorTextIdPrefix = errorTextIdPrefixConfig[errorStep]; + const flowTypeText = { + [ConnectionFlowType.ConnectBluetooth]: "bluetooth", + [ConnectionFlowType.ConnectRadioBridge]: "bridge", + [ConnectionFlowType.ConnectRadioRemote]: "remote", + }[flowType]; + return ( + + + + + + + + + + + + + + + + + + {contentConfig[flowType].bullets.map((textId) => ( + + + + + + ))} + + + + + + + + + + + + + + + ); +}; + +export default ReconnectErrorDialog; diff --git a/src/components/ConnectRadioDataCollectionMicrobitDialog.tsx b/src/components/ConnectRadioDataCollectionMicrobitDialog.tsx new file mode 100644 index 000000000..6c285a2bf --- /dev/null +++ b/src/components/ConnectRadioDataCollectionMicrobitDialog.tsx @@ -0,0 +1,50 @@ +import { HStack, Image, Text, VStack } from "@chakra-ui/react"; +import { FormattedMessage, useIntl } from "react-intl"; +import connectCable from "../images/connect-cable.gif"; +import microbitOnWrist from "../images/stylised-microbit-on-wrist.svg"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; + +export interface ConnectRadioDataCollectionMicrobitDialogProps + extends Omit {} + +const ConnectRadioDataCollectionMicrobitDialog = ({ + ...props +}: ConnectRadioDataCollectionMicrobitDialogProps) => { + const intl = useIntl(); + return ( + + + + + + + + {intl.formatMessage({ + + + + + {intl.formatMessage({ + + + + ); +}; + +export default ConnectRadioDataCollectionMicrobitDialog; diff --git a/src/components/ConnectToRecordDialog.tsx b/src/components/ConnectToRecordDialog.tsx new file mode 100644 index 000000000..0b35d89ec --- /dev/null +++ b/src/components/ConnectToRecordDialog.tsx @@ -0,0 +1,58 @@ +import { + Button, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + Text, +} from "@chakra-ui/react"; +import { ComponentProps, useCallback } from "react"; +import { FormattedMessage } from "react-intl"; +import { useConnectionStage } from "../connection-stage-hooks"; + +const ConnectToRecordDialog = ({ + onClose, + ...rest +}: Omit, "children">) => { + const { actions } = useConnectionStage(); + + const handleConnect = useCallback(() => { + onClose(); + actions.startConnect(); + }, [actions, onClose]); + + return ( + + + + + + + + + + + + + + + + + + + ); +}; + +export default ConnectToRecordDialog; diff --git a/src/components/ConnectionFlowDialogs.tsx b/src/components/ConnectionFlowDialogs.tsx new file mode 100644 index 000000000..cdf7f09cd --- /dev/null +++ b/src/components/ConnectionFlowDialogs.tsx @@ -0,0 +1,248 @@ +import { useDisclosure } from "@chakra-ui/react"; +import { useCallback, useEffect, useState } from "react"; +import { + ConnectionFlowStep, + ConnectionFlowType, + ConnectionStage, + useConnectionStage, +} from "../connection-stage-hooks"; +import BrokenFirmwareDialog from "./BrokenFirmwareDialog"; +import ConnectBatteryDialog from "./ConnectBatteryDialog"; +import ConnectCableDialog, { + getConnectionCableDialogConfig, +} from "./ConnectCableDialog"; +import ConnectErrorDialog from "./ConnectErrorDialog"; +import DownloadProgressDialog, { getHeadingId } from "./DownloadProgressDialog"; +import EnterBluetoothPatternDialog from "./EnterBluetoothPatternDialog"; +import LoadingDialog from "./LoadingDialog"; +import ManualFlashingDialog from "./ManualFlashingDialog"; +import SelectMicrobitBluetoothDialog from "./SelectMicrobitBluetoothDialog"; +import SelectMicrobitUsbDialog from "./SelectMicrobitUsbDialog"; +import TryAgainDialog from "./TryAgainDialog"; +import UnsupportedMicrobitDialog from "./UnsupportedMicrobitDialog"; +import WebUsbBluetoothUnsupportedDialog from "./WebUsbBluetoothUnsupportedDialog"; +import WhatYouWillNeedDialog from "./WhatYouWillNeedDialog"; +import { bluetoothUniversalHex } from "../connection-stage-actions"; + +const ConnectionDialogs = () => { + const { stage, actions } = useConnectionStage(); + const [flashProgress, setFlashProgress] = useState(0); + const { isOpen, onClose: onCloseDialog, onOpen } = useDisclosure(); + const [microbitName, setMicrobitName] = useState( + stage.bluetoothMicrobitName + ); + const onClose = useCallback(() => { + actions.setFlowStep(ConnectionFlowStep.None); + onCloseDialog(); + }, [actions, onCloseDialog]); + + useEffect(() => { + if (stage.flowStep !== ConnectionFlowStep.None && !isOpen) { + onOpen(); + } + if (stage.flowStep === ConnectionFlowStep.None && isOpen) { + onClose(); + } + }, [isOpen, onClose, onOpen, stage]); + + const progressCallback = useCallback( + (progress: number) => { + if (stage.flowStep !== ConnectionFlowStep.FlashingInProgress) { + actions.setFlowStep(ConnectionFlowStep.FlashingInProgress); + } + setFlashProgress(progress * 100); + }, + [actions, stage.flowStep] + ); + + const onChangeMicrobitName = useCallback( + (name: string) => { + actions.onChangeMicrobitName(name); + setMicrobitName(name); + }, + [actions] + ); + + const onFlashSuccess = useCallback((newStage: ConnectionStage) => { + // Inferring microbit name saves the user from entering the pattern + // for bluetooth connection flow + if (newStage.bluetoothMicrobitName) { + setMicrobitName(newStage.bluetoothMicrobitName); + } + }, []); + + async function connectAndFlash(): Promise { + await actions.connectAndflashMicrobit(progressCallback, onFlashSuccess); + } + const onSkip = useCallback( + () => actions.setFlowStep(ConnectionFlowStep.ConnectBattery), + [actions] + ); + const onInstructManualFlashing = useCallback( + () => actions.setFlowStep(ConnectionFlowStep.ManualFlashingTutorial), + [actions] + ); + + const dialogCommonProps = { isOpen, onClose }; + + switch (stage.flowStep) { + case ConnectionFlowStep.ReconnectFailedTwice: + case ConnectionFlowStep.Start: { + return ( + + ); + } + case ConnectionFlowStep.ConnectCable: { + const config = getConnectionCableDialogConfig( + stage.flowType, + stage.isWebBluetoothSupported + ); + return ( + + ); + } + case ConnectionFlowStep.WebUsbFlashingTutorial: { + return ( + + ); + } + // Only bluetooth mode has this fallback, the radio bridge mode requires working WebUSB. + case ConnectionFlowStep.ManualFlashingTutorial: { + return ( + + ); + } + case ConnectionFlowStep.ConnectBattery: { + return ( + + ); + } + case ConnectionFlowStep.EnterBluetoothPattern: { + return ( + + ); + } + case ConnectionFlowStep.ConnectBluetoothTutorial: { + return ( + + ); + } + case ConnectionFlowStep.WebUsbChooseMicrobit: { + // Browser dialog is shown, no custom dialog shown at the same time + return <>; + } + case ConnectionFlowStep.FlashingInProgress: { + return ( + + ); + } + case ConnectionFlowStep.ConnectingBluetooth: { + return ( + + ); + } + case ConnectionFlowStep.ConnectingMicrobits: { + return ( + + ); + } + case ConnectionFlowStep.TryAgainBluetoothSelectMicrobit: + case ConnectionFlowStep.TryAgainReplugMicrobit: + case ConnectionFlowStep.TryAgainWebUsbSelectMicrobit: + case ConnectionFlowStep.TryAgainCloseTabs: { + return ( + + ); + } + case ConnectionFlowStep.BadFirmware: { + return ( + + ); + } + case ConnectionFlowStep.MicrobitUnsupported: { + return ( + + ); + } + case ConnectionFlowStep.WebUsbBluetoothUnsupported: { + return ; + } + case ConnectionFlowStep.ConnectFailed: + case ConnectionFlowStep.ReconnectFailed: + case ConnectionFlowStep.ConnectionLost: { + return ( + + ); + } + } +}; + +export default ConnectionDialogs; diff --git a/src/components/DataRecordingGridItem.tsx b/src/components/DataRecordingGridItem.tsx new file mode 100644 index 000000000..df4ad3a52 --- /dev/null +++ b/src/components/DataRecordingGridItem.tsx @@ -0,0 +1,107 @@ +import { + Card, + CardBody, + CloseButton, + GridItem, + HStack, + Icon, + IconButton, +} from "@chakra-ui/react"; +import { useCallback, useRef } from "react"; +import { useIntl } from "react-intl"; +import { useConnectionStage } from "../connection-stage-hooks"; +import RecordIcon from "../images/record-icon.svg?react"; +import { GestureData } from "../model"; +import { useStore } from "../store"; +import { tourElClassname } from "../tours"; +import RecordingGraph from "./RecordingGraph"; + +interface DataRecordingGridItemProps { + data: GestureData; + selected: boolean; + onSelectRow?: () => void; + onRecord: () => void; +} + +const DataRecordingGridItem = ({ + data, + selected, + onSelectRow, + onRecord, +}: DataRecordingGridItemProps) => { + const intl = useIntl(); + const deleteGestureRecording = useStore((s) => s.deleteGestureRecording); + const closeRecordingDialogFocusRef = useRef(null); + const { isConnected } = useConnectionStage(); + + const handleDeleteRecording = useCallback( + (idx: number) => { + deleteGestureRecording(data.ID, idx); + }, + [data.ID, deleteGestureRecording] + ); + + return ( + <> + + + + + + } + /> + + {data.recordings.map((recording, idx) => ( + + { + handleDeleteRecording(idx); + }} + /> + + + ))} + + + + + ); +}; + +export default DataRecordingGridItem; diff --git a/src/components/DataSampleGridView.tsx b/src/components/DataSampleGridView.tsx new file mode 100644 index 000000000..f549ea865 --- /dev/null +++ b/src/components/DataSampleGridView.tsx @@ -0,0 +1,165 @@ +import { + Button, + Grid, + GridProps, + Text, + useDisclosure, + VStack, +} from "@chakra-ui/react"; +import { ButtonEvent } from "@microbit/microbit-connection"; +import { ReactNode, useEffect, useMemo, useRef, useState } from "react"; +import { useConnectActions } from "../connect-actions-hooks"; +import { useConnectionStage } from "../connection-stage-hooks"; +import { GestureData } from "../model"; +import { useStore } from "../store"; +import DataSampleGridRow from "./AddDataGridRow"; +import DataSamplesMenu from "./DataSamplesMenu"; +import HeadingGrid, { GridColumnHeadingItemProps } from "./HeadingGrid"; +import LoadProjectInput, { LoadProjectInputRef } from "./LoadProjectInput"; +import RecordingDialog from "./RecordingDialog"; +import ConnectToRecordDialog from "./ConnectToRecordDialog"; +import { FormattedMessage } from "react-intl"; + +const gridCommonProps: Partial = { + gridTemplateColumns: "290px 1fr", + gap: 3, + px: 5, + w: "100%", +}; + +const headings: GridColumnHeadingItemProps[] = [ + { + titleId: "content.data.classification", + descriptionId: "content.data.classHelpBody", + }, + { + titleId: "content.data.data", + descriptionId: "content.data.dataDescription", + itemsRight: , + }, +]; + +const DataSamplesGridView = () => { + const gestures = useStore((s) => s.gestures); + const [selectedGestureIdx, setSelectedGestureIdx] = useState(0); + const selectedGesture: GestureData | undefined = + gestures[selectedGestureIdx] ?? gestures[0]; + + const showWalkThrough = useMemo( + () => + gestures.length === 0 || + (gestures.length === 1 && gestures[0].recordings.length === 0), + [gestures] + ); + const { isOpen, onClose, onOpen } = useDisclosure(); + const connectToRecordDialogDisclosure = useDisclosure(); + + const connection = useConnectActions(); + const { actions } = useConnectionStage(); + const { isConnected } = useConnectionStage(); + const loadProjectInputRef = useRef(null); + + useEffect(() => { + const listener = (e: ButtonEvent) => { + if (!isOpen) { + if (e.state) { + onOpen(); + } + } + }; + connection.addButtonListener("B", listener); + return () => { + connection.removeButtonListener("B", listener); + }; + }, [connection, isOpen, onOpen]); + + return ( + <> + + {selectedGesture && ( + + )} + + {gestures.length === 0 ? ( + + + + + + {!isConnected && ( + + ( + + ), + link2: (chunks: ReactNode) => ( + + ), + }} + /> + + )} + + ) : ( + + {gestures.map((g, idx) => ( + setSelectedGestureIdx(idx)} + onRecord={ + isConnected ? onOpen : connectToRecordDialogDisclosure.onOpen + } + showWalkThrough={showWalkThrough} + /> + ))} + + )} + + ); +}; + +export default DataSamplesGridView; diff --git a/src/components/DataSamplesMenu.tsx b/src/components/DataSamplesMenu.tsx new file mode 100644 index 000000000..2bccdba6b --- /dev/null +++ b/src/components/DataSamplesMenu.tsx @@ -0,0 +1,52 @@ +import { + Icon, + IconButton, + Menu, + MenuButton, + MenuItem, + MenuList, + Portal, +} from "@chakra-ui/react"; +import { MdMoreVert } from "react-icons/md"; +import { FormattedMessage, useIntl } from "react-intl"; +import LoadProjectMenuItem from "./LoadProjectMenuItem"; +import { + RiDeleteBin2Line, + RiDownload2Line, + RiUpload2Line, +} from "react-icons/ri"; +import { useStore } from "../store"; + +const DataSamplesMenu = () => { + const intl = useIntl(); + const downloadDataSet = useStore((s) => s.downloadDataset); + const deleteAllGestures = useStore((s) => s.deleteAllGestures); + return ( + + } + isRound + /> + + + } accept=".json"> + + + } onClick={downloadDataSet}> + + + } onClick={deleteAllGestures}> + + + + + + ); +}; + +export default DataSamplesMenu; diff --git a/src/components/DefaultPageLayout.tsx b/src/components/DefaultPageLayout.tsx new file mode 100644 index 000000000..0dfeed31f --- /dev/null +++ b/src/components/DefaultPageLayout.tsx @@ -0,0 +1,242 @@ +import { + Button, + Flex, + Heading, + HStack, + Icon, + IconButton, + MenuDivider, + MenuItem, + useToast, + VStack, +} from "@chakra-ui/react"; +import { ReactNode, useCallback, useEffect } from "react"; +import { RiDownload2Line, RiHome2Line } from "react-icons/ri"; +import { FormattedMessage, useIntl } from "react-intl"; +import { useNavigate } from "react-router"; +import { useDeployment } from "../deployment"; +import { flags } from "../flags"; +import { useProject } from "../hooks/project-hooks"; +import { SaveStep, TrainModelDialogStage } from "../model"; +import { SessionPageId } from "../pages-config"; +import Tour from "../pages/Tour"; +import { useStore } from "../store"; +import { createHomePageUrl, createSessionPageUrl } from "../urls"; +import ActionBar from "./ActionBar"; +import AppLogo from "./AppLogo"; +import ConnectionDialogs from "./ConnectionFlowDialogs"; +import DownloadDialogs from "./DownloadDialogs"; +import HelpMenu from "./HelpMenu"; +import LanguageMenuItem from "./LanguageMenuItem"; +import PreReleaseNotice from "./PreReleaseNotice"; +import SaveDialogs from "./SaveDialogs"; +import SettingsMenu from "./SettingsMenu"; +import ToolbarMenu from "./ToolbarMenu"; +import TrainModelDialogs from "./TrainModelFlowDialogs"; +import ProjectDropTarget from "./ProjectDropTarget"; +import React from "react"; +import { + ConnectionFlowStep, + useConnectionStage, +} from "../connection-stage-hooks"; + +interface DefaultPageLayoutProps { + titleId?: string; + children: ReactNode; + toolbarItemsLeft?: ReactNode; + toolbarItemsRight?: ReactNode; + menuItems?: ReactNode; + showPageTitle?: boolean; +} + +const DefaultPageLayout = ({ + titleId, + children, + menuItems, + toolbarItemsLeft, + toolbarItemsRight, + showPageTitle = false, +}: DefaultPageLayoutProps) => { + const intl = useIntl(); + const navigate = useNavigate(); + const isEditorOpen = useStore((s) => s.isEditorOpen); + const isTourClosed = useStore((s) => s.tourState === undefined); + const isTrainDialogClosed = useStore( + (s) => s.trainModelDialogStage === TrainModelDialogStage.Closed + ); + const { stage } = useConnectionStage(); + const isConnectionDialogClosed = stage.flowStep === ConnectionFlowStep.None; + const isSaveDialogClosed = useStore((s) => s.save.step === SaveStep.None); + + const toast = useToast(); + const { appNameFull } = useDeployment(); + + useEffect(() => { + document.title = titleId + ? `${intl.formatMessage({ id: titleId })} | ${appNameFull}` + : appNameFull; + }, [appNameFull, intl, titleId]); + + useEffect(() => { + return useStore.subscribe( + ( + { projectLoadTimestamp }, + { projectLoadTimestamp: prevProjectLoadTimestamp } + ) => { + if (projectLoadTimestamp > prevProjectLoadTimestamp) { + // Side effects of loading a project, which MakeCode notifies us of. + navigate(createSessionPageUrl(SessionPageId.DataSamples)); + toast({ + position: "top", + duration: 5_000, + title: intl.formatMessage({ id: "project-loaded" }), + status: "info", + }); + } + } + ); + }, [intl, navigate, toast]); + + const ProjectDropTargetWhenNeeded = + isTrainDialogClosed && + isTourClosed && + isConnectionDialogClosed && + isSaveDialogClosed + ? ProjectDropTarget + : React.Fragment; + + return ( + <> + {/* Suppress dialogs to prevent overlapping dialogs */} + {!isEditorOpen && + isTrainDialogClosed && + isTourClosed && + isSaveDialogClosed && } + {!isEditorOpen && } + {!isEditorOpen && } + + + + + + + {showPageTitle && ( + + + + )} + + } + itemsLeft={toolbarItemsLeft || } + itemsRight={ + <> + + {toolbarItemsRight} + + + + + {menuItems} + + + + } + /> + {flags.preReleaseNotice && } + + + {children} + + + + + ); +}; + +export const ProjectToolbarItems = () => { + const { saveHex } = useProject(); + const handleSave = useCallback(() => { + void saveHex(); + }, [saveHex]); + + return ( + <> + + + + ); +}; + +export const HomeToolbarItem = () => { + const intl = useIntl(); + const navigate = useNavigate(); + const handleHomeClick = useCallback(() => { + navigate(createHomePageUrl()); + }, [navigate]); + return ( + } + aria-label={intl.formatMessage({ id: "homepage.Link" })} + variant="plain" + size="lg" + fontSize="xl" + /> + ); +}; + +export const ProjectMenuItems = () => { + const { saveHex } = useProject(); + const handleSave = useCallback(() => { + void saveHex(); + }, [saveHex]); + + return ( + <> + } + > + + + + + + ); +}; + +export const HomeMenuItem = () => { + const navigate = useNavigate(); + const handleHomeClick = useCallback(() => { + navigate(createHomePageUrl()); + }, [navigate]); + return ( + } + > + + + ); +}; + +export default DefaultPageLayout; diff --git a/src/components/DialogHeading.svelte b/src/components/DialogHeading.svelte deleted file mode 100644 index b50e20ea7..000000000 --- a/src/components/DialogHeading.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -

diff --git a/src/components/DownloadChooseMicrobitDialog.tsx b/src/components/DownloadChooseMicrobitDialog.tsx new file mode 100644 index 000000000..874e49529 --- /dev/null +++ b/src/components/DownloadChooseMicrobitDialog.tsx @@ -0,0 +1,156 @@ +import { + Box, + HStack, + Icon, + Image, + Text, + useRadio, + useRadioGroup, + UseRadioProps, + VStack, +} from "@chakra-ui/react"; +import { useCallback, useState } from "react"; +import { RiCheckboxBlankLine, RiCheckboxFill } from "react-icons/ri"; +import { FormattedMessage } from "react-intl"; +import microbitImage from "../images/stylised-microbit-black.svg"; +import twoMicrobitsImage from "../images/stylised-two-microbits-black.svg"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; +import { DownloadState, MicrobitToFlash } from "../model"; + +export interface DownloadChooseMicrobitDialogProps + extends Omit { + onSameMicrobitClick: () => void; + onDifferentMicrobitClick: () => void; + stage: DownloadState; +} + +type MicrobitOption = MicrobitToFlash.Same | MicrobitToFlash.Different; + +const DownloadChooseMicrobitDialog = ({ + onSameMicrobitClick, + onDifferentMicrobitClick, + stage, + ...props +}: DownloadChooseMicrobitDialogProps) => { + const defaultValue = + stage.microbitToFlash === MicrobitToFlash.Default + ? MicrobitToFlash.Same + : stage.microbitToFlash; + const [selected, setSelected] = useState(defaultValue); + const handleOptionChange = useCallback( + (opt: MicrobitOption) => setSelected(opt), + [] + ); + const { getRootProps, getRadioProps } = useRadioGroup({ + name: "chosenDevice", + defaultValue, + onChange: handleOptionChange, + }); + const group = getRootProps(); + const radioCardOptions: Omit[] = [ + { + id: MicrobitToFlash.Same, + imgSrc: microbitImage, + }, + { + id: MicrobitToFlash.Different, + imgSrc: twoMicrobitsImage, + }, + ]; + return ( + + + + + + + {radioCardOptions.map((config) => { + const radio = getRadioProps({ value: config.id }); + return ( + + ); + })} + + + + ); +}; + +interface RadioCardProps extends UseRadioProps { + id: MicrobitOption; + imgSrc: string; + isSelected: boolean; +} + +const RadioCard = ({ id, imgSrc, isSelected, ...props }: RadioCardProps) => { + const { getInputProps, getRadioProps } = useRadio(props); + + const input = getInputProps(); + const checkbox = getRadioProps(); + + return ( + + + + + {isSelected ? ( + + ) : ( + + )} + + + + + + + + + + ); +}; + +export default DownloadChooseMicrobitDialog; diff --git a/src/components/DownloadDialogs.tsx b/src/components/DownloadDialogs.tsx new file mode 100644 index 000000000..6d6733c5c --- /dev/null +++ b/src/components/DownloadDialogs.tsx @@ -0,0 +1,105 @@ +import { useCallback } from "react"; +import ConnectCableDialog from "./ConnectCableDialog"; +import DownloadProgressDialog from "./DownloadProgressDialog"; +import DownloadChooseMicrobitDialog from "./DownloadChooseMicrobitDialog"; +import DownloadHelpDialog from "./DownloadHelpDialog"; +import ManualFlashingDialog from "./ManualFlashingDialog"; +import SelectMicrobitUsbDialog from "./SelectMicrobitUsbDialog"; +import { DownloadStep as DownloadStep } from "../model"; +import { useDownloadActions } from "../hooks/download-hooks"; +import { useStore } from "../store"; +import UnplugRadioLinkMicrobitDialog from "./UnplugRadioLinkMicrobitDialog"; +import ConnectRadioDataCollectionMicrobitDialog from "./ConnectRadioDataCollectionMicrobitDialog"; + +const DownloadDialogs = () => { + const actions = useDownloadActions(); + const stage = useStore((s) => s.download); + const handleDownloadProject = useCallback(async () => { + await actions.connectAndFlashMicrobit(stage); + }, [actions, stage]); + + switch (stage.step) { + case DownloadStep.Help: + return ( + + ); + case DownloadStep.ChooseSameOrDifferentMicrobit: + return ( + + ); + case DownloadStep.ConnectCable: + return ( + + ); + case DownloadStep.ConnectRadioRemoteMicrobit: + return ( + + ); + case DownloadStep.UnplugRadioBridgeMicrobit: + return ( + + ); + case DownloadStep.WebUsbFlashingTutorial: + return ( + + ); + case DownloadStep.FlashingInProgress: + return ( + + ); + case DownloadStep.ManualFlashingTutorial: + if (!stage.hex) { + throw new Error("Project expected"); + } + return ( + + ); + } + return <>; +}; + +export default DownloadDialogs; diff --git a/src/components/DownloadHelpDialog.tsx b/src/components/DownloadHelpDialog.tsx new file mode 100644 index 000000000..1200447fd --- /dev/null +++ b/src/components/DownloadHelpDialog.tsx @@ -0,0 +1,88 @@ +import { + Button, + Checkbox, + Heading, + HStack, + Image, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalOverlay, + Text, + VStack, +} from "@chakra-ui/react"; +import { ComponentProps, useCallback, useState } from "react"; +import { FormattedMessage } from "react-intl"; +import testModelImage from "../images/test_model_black.svg"; +import { useDeployment } from "../deployment"; + +export interface DownloadHelpDialogProps + extends Omit, "children"> { + onNext: (isSkipNextTime: boolean) => void; +} + +const DownloadHelpDialog = ({ + onClose, + onNext, + ...rest +}: DownloadHelpDialogProps) => { + const { appNameFull } = useDeployment(); + const [isSkipNextTime, setSkipNextTime] = useState(false); + const handleOnNext = useCallback(() => { + onNext(isSkipNextTime); + }, [onNext, isSkipNextTime]); + return ( + + + + + + + + + + + + + + + + + + + + + setSkipNextTime(e.target.checked)} + > + + + + + + + + + + + ); +}; + +export default DownloadHelpDialog; diff --git a/src/components/DownloadProgressDialog.tsx b/src/components/DownloadProgressDialog.tsx new file mode 100644 index 000000000..64bc041e7 --- /dev/null +++ b/src/components/DownloadProgressDialog.tsx @@ -0,0 +1,69 @@ +import { + Heading, + Modal, + ModalBody, + ModalContent, + ModalOverlay, + Progress, + Text, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; +import { ConnectionFlowType } from "../connection-stage-hooks"; + +export interface DownloadProgressDialogProps { + isOpen: boolean; + headingId: string; + progress: number; +} + +export const getHeadingId = (flowType: ConnectionFlowType) => { + switch (flowType) { + case ConnectionFlowType.ConnectBluetooth: + return "connectMB.usbDownloading.header"; + case ConnectionFlowType.ConnectRadioRemote: + return "connectMB.usbDownloadingMB1.header"; + case ConnectionFlowType.ConnectRadioBridge: + return "connectMB.usbDownloadingMB2.header"; + } +}; + +const DownloadProgressDialog = ({ + isOpen, + headingId, + progress, +}: DownloadProgressDialogProps) => { + return ( + {}} + size="3xl" + isCentered + > + + + + + + + + + + + + + + + + + ); +}; + +export default DownloadProgressDialog; diff --git a/src/components/EditCodeDialog.tsx b/src/components/EditCodeDialog.tsx new file mode 100644 index 000000000..c99f2bb5c --- /dev/null +++ b/src/components/EditCodeDialog.tsx @@ -0,0 +1,62 @@ +import { + Box, + Flex, + Modal, + ModalBody, + ModalContent, + ModalOverlay, +} from "@chakra-ui/react"; +import { MakeCodeFrameDriver } from "@microbit/makecode-embed/react"; +import { forwardRef, memo, useRef } from "react"; +import Editor from "./Editor"; +import { useStore } from "../store"; + +interface EditCodeDialogProps {} + +const EditCodeDialog = forwardRef( + function EditCodeDialog(_, ref) { + const containerRef = useRef(null); + const isOpen = useStore((s) => s.isEditorOpen); + return ( + <> + + {}} + closeOnEsc={false} + blockScrollOnMount={false} + portalProps={{ + containerRef: containerRef, + }} + > + + + + + + + + + + + + ); + } +); + +export default memo(EditCodeDialog); diff --git a/src/components/Editor.tsx b/src/components/Editor.tsx new file mode 100644 index 000000000..a0136f48a --- /dev/null +++ b/src/components/Editor.tsx @@ -0,0 +1,42 @@ +import { + MakeCodeFrame, + MakeCodeFrameDriver, +} from "@microbit/makecode-embed/react"; +import React, { forwardRef, useCallback } from "react"; +import { getMakeCodeLang } from "../settings"; +import { useProject } from "../hooks/project-hooks"; +import { useSettings } from "../store"; + +const controllerId = "MicrobitMachineLearningTool"; + +interface EditorProps { + version: string | undefined; + style?: React.CSSProperties; +} + +const Editor = forwardRef(function Editor( + props, + ref +) { + const { project, editorCallbacks } = useProject(); + const initialProjects = useCallback(() => { + return Promise.resolve([project]); + }, [project]); + const [{ languageId }] = useSettings(); + return ( + + ); +}); + +export default Editor; diff --git a/src/components/EnterBluetoothPatternDialog.tsx b/src/components/EnterBluetoothPatternDialog.tsx new file mode 100644 index 000000000..5a4e076cf --- /dev/null +++ b/src/components/EnterBluetoothPatternDialog.tsx @@ -0,0 +1,97 @@ +import { Text, VStack } from "@chakra-ui/react"; +import { useCallback, useState } from "react"; +import { FormattedMessage } from "react-intl"; +import BluetoothPatternInput from "./BluetoothPatternInput"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; +import { + BluetoothPattern, + microbitNameToBluetoothPattern, + microbitPatternToName, +} from "../bt-pattern-utils"; + +export interface EnterBluetoothPatternDialogProps + extends Omit { + onChangeMicrobitName: (name: string) => void; + microbitName: string | undefined; +} + +const EnterBluetoothPatternDialog = ({ + onNextClick, + onBackClick, + onChangeMicrobitName, + microbitName, + ...props +}: EnterBluetoothPatternDialogProps) => { + const [showInvalid, setShowInvalid] = useState(false); + const [bluetoothPattern, setBluetoothPattern] = useState( + microbitName + ? microbitNameToBluetoothPattern(microbitName) + : Array(25).fill(false) + ); + + const handleNextClick = useCallback(() => { + if (!isPatternValid(bluetoothPattern)) { + setShowInvalid(true); + return; + } + onNextClick && onNextClick(); + }, [bluetoothPattern, onNextClick]); + + const handleBackClick = useCallback(() => { + setShowInvalid(false); + onBackClick && onBackClick(); + }, [onBackClick]); + + const handlePatternChange = useCallback( + (newPattern: BluetoothPattern) => { + setBluetoothPattern(newPattern); + onChangeMicrobitName(microbitPatternToName(newPattern)); + setShowInvalid(false); + }, + [onChangeMicrobitName] + ); + + return ( + + + + + + + + + + + + + + ); +}; + +const isPatternValid = (pattern: BluetoothPattern) => { + for (let col = 0; col < 5; col++) { + let isAnyHighlighted = false; + for (let row = 0; row < 5; row++) { + if (pattern[row * 5 + col]) { + isAnyHighlighted = true; + } + } + if (!isAnyHighlighted) { + return false; + } + } + return true; +}; + +export default EnterBluetoothPatternDialog; diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx new file mode 100644 index 000000000..9079a286e --- /dev/null +++ b/src/components/ErrorBoundary.tsx @@ -0,0 +1,39 @@ +import React, { ReactNode } from "react"; +import ErrorHandlerErrorView from "./ErrorHandlerErrorView"; + +interface ErrorBoundaryState { + hasError: boolean; +} + +interface ErrorBoundaryProps { + children?: ReactNode; +} + +// Error boundary used for MyData apps and initialization errors. +// Otherwise we use React Router's errorElement. +class ErrorBoundary extends React.Component< + ErrorBoundaryProps, + ErrorBoundaryState +> { + constructor(props: ErrorBoundaryProps) { + super(props); + this.state = { hasError: false }; + } + + componentDidCatch() { + // TODO: reinstate logging! + } + + static getDerivedStateFromError() { + return { hasError: true }; + } + + render() { + if (this.state.hasError) { + return ; + } + return this.props.children; + } +} + +export default ErrorBoundary; diff --git a/src/components/ErrorHandlerErrorView.tsx b/src/components/ErrorHandlerErrorView.tsx new file mode 100644 index 000000000..e97ff4795 --- /dev/null +++ b/src/components/ErrorHandlerErrorView.tsx @@ -0,0 +1,38 @@ +import { Button, Text, VStack } from "@chakra-ui/react"; +import { ReactNode } from "react"; +import { FormattedMessage } from "react-intl"; +import ErrorPage from "./ErrorPage"; +import Link from "./Link"; + +const ErrorHandlerErrorView = () => { + return ( + + + + ( + + {chunks} + + ), + }} + /> + + + + + + + ); +}; + +export default ErrorHandlerErrorView; diff --git a/src/components/ErrorPage.tsx b/src/components/ErrorPage.tsx new file mode 100644 index 000000000..d54e51138 --- /dev/null +++ b/src/components/ErrorPage.tsx @@ -0,0 +1,22 @@ +import { Heading, VStack } from "@chakra-ui/react"; +import { ReactNode } from "react"; + +type Props = { title: string; children: ReactNode }; + +const ErrorPage = ({ title, children }: Props) => ( + + + {title} + + {children} + +); + +export default ErrorPage; diff --git a/src/components/ExternalLink.tsx b/src/components/ExternalLink.tsx new file mode 100644 index 000000000..993ea2439 --- /dev/null +++ b/src/components/ExternalLink.tsx @@ -0,0 +1,30 @@ +import { ExternalLinkIcon } from "@chakra-ui/icons"; +import { Button } from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; + +interface ExternalLinkProps { + textId: string; + href: string; +} + +const ExternalLink = ({ textId, href }: ExternalLinkProps) => { + return ( + + ); +}; + +export default ExternalLink; diff --git a/src/components/FeedbackForm.tsx b/src/components/FeedbackForm.tsx new file mode 100644 index 000000000..73557c9a1 --- /dev/null +++ b/src/components/FeedbackForm.tsx @@ -0,0 +1,76 @@ +/** + * (c) 2021, Micro:bit Educational Foundation and contributors + * + * SPDX-License-Identifier: MIT + */ +import { + Modal, + ModalBody, + ModalContent, + ModalOverlay, + ModalCloseButton, +} from "@chakra-ui/modal"; +import { useEffect, useRef } from "react"; + +interface FeedbackFormProps { + isOpen: boolean; + onClose: () => void; + finalFocusRef?: React.RefObject; +} + +/** + * Temporary embedded Jotform for the alpha release. + */ +const FeedbackForm = ({ + isOpen, + onClose, + finalFocusRef = undefined, +}: FeedbackFormProps) => { + const iframeRef = useRef(null); + useEffect(() => { + const listener = (message: MessageEvent) => { + if ( + message.origin === "https://form.jotform.com" && + typeof message.data === "string" + ) { + const args = message.data.split(":"); + // There are many other cases in their big blob of script + // but I think this is all we need to care about. + if (args[0] === "setHeight" && iframeRef.current) { + iframeRef.current.style.height = args[1] + "px"; + } + } + }; + window.addEventListener("message", listener); + return () => { + window.removeEventListener("message", listener); + }; + }); + return ( + + + + + + -
-
-
- - -
-
- - diff --git a/src/components/SaveDialogs.tsx b/src/components/SaveDialogs.tsx new file mode 100644 index 000000000..e65dc67fa --- /dev/null +++ b/src/components/SaveDialogs.tsx @@ -0,0 +1,55 @@ +import { useCallback } from "react"; +import { useProject } from "../hooks/project-hooks"; +import { useStore } from "../store"; +import SaveHelpDialog from "./SaveHelpDialog"; +import SaveProgressDialog from "./SaveProgressDialog"; +import { SaveStep } from "../model"; +import { NameProjectDialog } from "./NameProjectDialog"; + +const SaveDialogs = () => { + const setSave = useStore((s) => s.setSave); + const projectName = useStore((s) => s.project.header?.name); + const isUntitled = projectName === "Untitled"; + const { step, hex } = useStore((s) => s.save); + const setProjectName = useStore((s) => s.setProjectName); + const { saveHex } = useProject(); + + const handleHelpNext = useCallback(async () => { + if (isUntitled) { + setSave({ step: SaveStep.ProjectName }); + } else { + await saveHex(); + } + }, [isUntitled, saveHex, setSave]); + + const handleSave = useCallback( + async (newName?: string) => { + if (newName) { + setProjectName(newName); + } + await saveHex(hex); + }, + [hex, saveHex, setProjectName] + ); + + const handleClose = useCallback(() => { + setSave({ step: SaveStep.None }); + }, [setSave]); + + switch (step) { + case SaveStep.PreSaveHelp: + return ( + + ); + case SaveStep.ProjectName: + return ( + + ); + case SaveStep.SaveProgress: + return ; + default: + return null; + } +}; + +export default SaveDialogs; diff --git a/src/components/SaveHelpDialog.tsx b/src/components/SaveHelpDialog.tsx new file mode 100644 index 000000000..5cfe0ff3c --- /dev/null +++ b/src/components/SaveHelpDialog.tsx @@ -0,0 +1,83 @@ +import { + Button, + Checkbox, + Heading, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + Stack, + Text, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; +import { useSettings } from "../store"; +import { ChangeEvent, useCallback } from "react"; +import { useDeployment } from "../deployment"; + +interface SaveHelpDialogProps { + isOpen: boolean; + onClose: () => void; + onSave: () => void; +} + +const SaveHelpDialog = ({ isOpen, onClose, onSave }: SaveHelpDialogProps) => { + const { appNameFull } = useDeployment(); + const [settings, setSettings] = useSettings(); + const skip = !settings.showPreSaveHelp; + const handleChangeSkip = useCallback( + (e: ChangeEvent) => { + setSettings({ showPreSaveHelp: !e.currentTarget.checked }); + }, + [setSettings] + ); + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default SaveHelpDialog; diff --git a/src/components/SaveProgressDialog.tsx b/src/components/SaveProgressDialog.tsx new file mode 100644 index 000000000..acc08cdac --- /dev/null +++ b/src/components/SaveProgressDialog.tsx @@ -0,0 +1,46 @@ +import { + Heading, + Modal, + ModalBody, + ModalContent, + ModalOverlay, + Progress, + Text, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; + +export interface SavingDialogProps { + isOpen: boolean; +} + +const SaveProgressDialog = ({ isOpen }: SavingDialogProps) => { + return ( + {}} + size="2xl" + isCentered + > + + + + + + + + + + + + + + + + + ); +}; + +export default SaveProgressDialog; diff --git a/src/components/SelectMicrobitBluetoothDialog.tsx b/src/components/SelectMicrobitBluetoothDialog.tsx new file mode 100644 index 000000000..a1ab5e84c --- /dev/null +++ b/src/components/SelectMicrobitBluetoothDialog.tsx @@ -0,0 +1,86 @@ +import { + Box, + Flex, + Image, + List, + ListItem, + Text, + VisuallyHidden, +} from "@chakra-ui/react"; +import { FormattedMessage, useIntl } from "react-intl"; +import selectMicrobitImage from "../images/select-microbit-bluetooth.png"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; +import ArrowOne from "./ArrowOne"; +import ArrowTwo from "./ArrowTwo"; + +export interface SelectMicrobitBluetoothDialogProps + extends Omit {} + +const SelectMicrobitBluetoothDialog = ({ + ...props +}: SelectMicrobitBluetoothDialogProps) => { + const intl = useIntl(); + + return ( + + + {intl.formatMessage({ + + + + + + + + 1. + + + + + + + + + + 2. + + + + + + + + + + + + + + + + ); +}; + +export default SelectMicrobitBluetoothDialog; diff --git a/src/components/SelectMicrobitUsbDialog.tsx b/src/components/SelectMicrobitUsbDialog.tsx new file mode 100644 index 000000000..85a555d88 --- /dev/null +++ b/src/components/SelectMicrobitUsbDialog.tsx @@ -0,0 +1,82 @@ +import { + Box, + Flex, + Image, + List, + ListItem, + Text, + VisuallyHidden, +} from "@chakra-ui/react"; +import { FormattedMessage, useIntl } from "react-intl"; +import selectMicrobitImage from "../images/select-microbit-web-usb.png"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; +import ArrowOne from "./ArrowOne"; +import ArrowTwo from "./ArrowTwo"; + +export interface SelectMicrobitDialogProps + extends Omit {} + +const SelectMicrobitUsbDialog = ({ ...props }: SelectMicrobitDialogProps) => { + const intl = useIntl(); + + return ( + + + {intl.formatMessage({ + + + + + + + + 1. + + + + + + + + + + 2. + + + + + + + + + + + + + + + + ); +}; + +export default SelectMicrobitUsbDialog; diff --git a/src/components/SettingsMenu.tsx b/src/components/SettingsMenu.tsx new file mode 100644 index 000000000..7ecc7f6d0 --- /dev/null +++ b/src/components/SettingsMenu.tsx @@ -0,0 +1,55 @@ +import { + IconButton, + Menu, + MenuButton, + MenuList, + ThemeTypings, +} from "@chakra-ui/react"; +import { useRef } from "react"; +import { RiSettings2Line } from "react-icons/ri"; +import { useIntl } from "react-intl"; +import LanguageMenuItem from "./LanguageMenuItem"; + +interface SettingsMenuProps { + variant?: ThemeTypings["components"]["Menu"]["variants"]; +} + +/** + * A settings button that triggers a drop-down menu with actions. + */ +const SettingsMenu = ({ variant = "plain", ...rest }: SettingsMenuProps) => { + const intl = useIntl(); + const settingsMenuRef = useRef(null); + + return ( + <> + + + } + variant={variant} + isRound + h={12} + w={12} + _focusVisible={{ + boxShadow: variant === "secondary" ? "outline" : "outlineDark", + }} + /> + + + + + + ); +}; + +export default SettingsMenu; diff --git a/src/components/StandardButton.svelte b/src/components/StandardButton.svelte deleted file mode 100644 index 119c2e439..000000000 --- a/src/components/StandardButton.svelte +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - -
- -
diff --git a/src/components/StartResumeActions.svelte b/src/components/StartResumeActions.svelte deleted file mode 100644 index c91046b27..000000000 --- a/src/components/StartResumeActions.svelte +++ /dev/null @@ -1,98 +0,0 @@ - - - - -
- {#if hasExistingSession} - navigate(Paths.DATA)} - >{$t('footer.resume')} - {/if} - {$t('footer.start')} -
- - (showDataLossWarning = false)} - class="w-150 space-y-5"> - - {$t('content.index.dataWarning.title')} - - -
-

{$t('content.index.dataWarning.subtitleOne')}

-

- -

-
- {$t('footer.start')} -
-
-
-
diff --git a/src/components/TestingModelGridView.tsx b/src/components/TestingModelGridView.tsx new file mode 100644 index 000000000..5f775c715 --- /dev/null +++ b/src/components/TestingModelGridView.tsx @@ -0,0 +1,200 @@ +import { + Button, + ButtonGroup, + Grid, + GridProps, + HStack, + Icon, + Menu, + MenuItem, + MenuList, + Portal, + VStack, + VisuallyHidden, +} from "@chakra-ui/react"; +import { MakeCodeRenderBlocksProvider } from "@microbit/makecode-embed/react"; +import React from "react"; +import { RiArrowRightLine, RiDeleteBin2Line } from "react-icons/ri"; +import { FormattedMessage, useIntl } from "react-intl"; +import { usePrediction } from "../hooks/ml-hooks"; +import { useProject } from "../hooks/project-hooks"; +import { mlSettings } from "../ml"; +import { getMakeCodeLang } from "../settings"; +import { useSettings, useStore } from "../store"; +import { tourElClassname } from "../tours"; +import CertaintyThresholdGridItem from "./CertaintyThresholdGridItem"; +import CodeViewCard from "./CodeViewCard"; +import CodeViewGridItem from "./CodeViewGridItem"; +import GestureNameGridItem from "./GestureNameGridItem"; +import HeadingGrid from "./HeadingGrid"; +import LiveGraphPanel from "./LiveGraphPanel"; +import MoreMenuButton from "./MoreMenuButton"; + +const gridCommonProps: Partial = { + gridTemplateColumns: "290px 360px 40px auto", + gap: 3, + w: "100%", +}; + +const headings = [ + { + titleId: "content.model.output.action.descriptionTitle", + descriptionId: "content.model.output.action.descriptionBody", + }, + { + titleId: "content.model.output.certainty.descriptionTitle", + descriptionId: "content.model.output.certainty.descriptionBody", + }, + // Empty heading for arrow column + {}, + { + titleId: "content.model.output.output.descriptionTitle", + descriptionId: "content.model.output.output.descriptionBody", + }, +]; + +const TestingModelGridView = () => { + const prediction = usePrediction(); + const { detected, confidences } = prediction ?? {}; + const intl = useIntl(); + const gestures = useStore((s) => s.gestures); + const setRequiredConfidence = useStore((s) => s.setRequiredConfidence); + const { openEditor, project, resetProject, projectEdited } = useProject(); + + const detectedLabel = + detected?.name ?? + intl.formatMessage({ + id: "unknown", + }); + + const [{ languageId }] = useSettings(); + const makeCodeLang = getMakeCodeLang(languageId); + + return ( + <> + + + + + + + + + {gestures.map((gesture, idx) => { + const { + ID, + name, + icon, + requiredConfidence: threshold, + } = gesture; + const isTriggered = detected ? detected.ID === ID : false; + return ( + + + + setRequiredConfidence(ID, val) + } + currentConfidence={confidences?.[ID]} + requiredConfidence={ + threshold ?? mlSettings.defaultRequiredConfidence + } + isTriggered={isTriggered} + /> + + + + + + ); + })} + + {projectEdited && } + + + + + + + + + + + + } + onClick={resetProject} + isDisabled={!projectEdited} + > + + + + + + + + + + + ); +}; + +export default TestingModelGridView; diff --git a/src/components/ToolbarMenu.tsx b/src/components/ToolbarMenu.tsx new file mode 100644 index 000000000..9a4b0a797 --- /dev/null +++ b/src/components/ToolbarMenu.tsx @@ -0,0 +1,49 @@ +import { + Box, + IconButton, + Menu, + MenuButton, + MenuList, + ThemeTypings, +} from "@chakra-ui/react"; +import { ReactNode } from "react"; +import { RiMenuLine } from "react-icons/ri"; + +interface ToolbarMenuProps { + label: string; + isMobile?: boolean; + children: ReactNode; + icon?: JSX.Element; + variant?: ThemeTypings["components"]["Menu"]["variants"]; + onDarkBackground?: boolean; +} + +const ToolbarMenu = ({ + label, + icon, + children, + isMobile, + variant, + onDarkBackground = true, +}: ToolbarMenuProps) => { + return ( + + + } + variant={variant} + size="lg" + fontSize="xl" + _focusVisible={{ + boxShadow: onDarkBackground ? "outlineDark" : "outline", + }} + /> + {children} + + + ); +}; + +export default ToolbarMenu; diff --git a/src/components/TrainModelFirstTitle.svelte b/src/components/TrainModelFirstTitle.svelte deleted file mode 100644 index 549a20782..000000000 --- a/src/components/TrainModelFirstTitle.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - -
- -

- {$t('content.model.trainModelFirstHeading')} -

-
- {#if !sufficientData} -

- {$t('content.model.notEnoughDataInfoBody1')} -

-

- {$t('content.model.notEnoughDataInfoBody2')} -

- {:else if $state.hasTrainedBefore} -

- {$t('content.model.retrainModelBody')} -

- {:else} -

- {$t('content.model.trainModelBody')} -

- {/if} -
-
- {#if !sufficientData} - navigate(Paths.DATA)}> - {$t('content.model.addData')} - - {:else} - navigate(Paths.TRAINING)} /> - {/if} -
-
diff --git a/src/components/TrainModelFlowDialogs.tsx b/src/components/TrainModelFlowDialogs.tsx new file mode 100644 index 000000000..066a50ef7 --- /dev/null +++ b/src/components/TrainModelFlowDialogs.tsx @@ -0,0 +1,55 @@ +import { useCallback } from "react"; +import { useNavigate } from "react-router"; +import { TourId, TrainModelDialogStage } from "../model"; +import { SessionPageId } from "../pages-config"; +import { useStore, useSettings } from "../store"; +import { createSessionPageUrl } from "../urls"; +import TrainingErrorDialog from "./TrainingErrorDialog"; +import TrainingModelProgressDialog from "./TrainingModelProgressDialog"; +import TrainModelIntroDialog from "./TrainModelHelpDialog"; +import TrainModelInsufficientDataDialog from "./TrainModelInsufficientDataDialog"; + +const TrainModelDialogs = () => { + const stage = useStore((s) => s.trainModelDialogStage); + const closeTrainModelDialogs = useStore((s) => s.closeTrainModelDialogs); + const tourStart = useStore((s) => s.tourStart); + const navigate = useNavigate(); + const trainModel = useStore((s) => s.trainModel); + const trainModelProgress = useStore((s) => s.trainModelProgress); + const [, setSettings] = useSettings(); + + const handleHelpNext = useCallback( + async (isSkipNextTime: boolean) => { + setSettings({ showPreTrainHelp: !isSkipNextTime }); + const result = await trainModel(); + if (result) { + navigate(createSessionPageUrl(SessionPageId.TestingModel)); + tourStart(TourId.TestModelPage); + } + }, + [navigate, tourStart, setSettings, trainModel] + ); + return ( + <> + + + + + + ); +}; + +export default TrainModelDialogs; diff --git a/src/components/TrainModelHelpDialog.tsx b/src/components/TrainModelHelpDialog.tsx new file mode 100644 index 000000000..3e1347152 --- /dev/null +++ b/src/components/TrainModelHelpDialog.tsx @@ -0,0 +1,87 @@ +import { + Button, + Checkbox, + Heading, + HStack, + Image, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalOverlay, + Text, + VStack, +} from "@chakra-ui/react"; +import { ComponentProps, useCallback, useState } from "react"; +import { FormattedMessage } from "react-intl"; +import trainModelImage from "../images/train_model_black.svg"; +import { useDeployment } from "../deployment"; + +interface TrainModelHelpDialogProps + extends Omit, "children"> { + onNext: (isSkipNextTime: boolean) => void; +} + +const TrainModelIntroDialog = ({ + onNext, + ...props +}: TrainModelHelpDialogProps) => { + const { appNameFull } = useDeployment(); + const [skip, setSkip] = useState(false); + const handleNext = useCallback(() => onNext(skip), [onNext, skip]); + + return ( + + + + + + + + + + + + + + + + + + + + + setSkip(e.target.checked)} + > + + + + + + + + ); +}; + +export default TrainModelIntroDialog; diff --git a/src/components/TrainModelInsufficientDataDialog.tsx b/src/components/TrainModelInsufficientDataDialog.tsx new file mode 100644 index 000000000..ed402a066 --- /dev/null +++ b/src/components/TrainModelInsufficientDataDialog.tsx @@ -0,0 +1,68 @@ +import { + Button, + Heading, + HStack, + Image, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalOverlay, + Text, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; +import trainModelImage from "../images/train_model_black.svg"; +import { ComponentProps } from "react"; + +const TrainModelInsufficientDataDialog = ({ + onClose, + ...rest +}: Omit, "children">) => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default TrainModelInsufficientDataDialog; diff --git a/src/components/TrainingErrorDialog.tsx b/src/components/TrainingErrorDialog.tsx new file mode 100644 index 000000000..c4a491d11 --- /dev/null +++ b/src/components/TrainingErrorDialog.tsx @@ -0,0 +1,51 @@ +import { + Heading, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalOverlay, + Text, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; + +interface TrainingErrorDialogProps { + isOpen: boolean; + onClose: () => void; +} + +const TrainingErrorDialog = ({ isOpen, onClose }: TrainingErrorDialogProps) => { + return ( + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default TrainingErrorDialog; diff --git a/src/components/TrainingModelProgressDialog.tsx b/src/components/TrainingModelProgressDialog.tsx new file mode 100644 index 000000000..e59c51abc --- /dev/null +++ b/src/components/TrainingModelProgressDialog.tsx @@ -0,0 +1,51 @@ +import { + Heading, + Modal, + ModalBody, + ModalContent, + ModalOverlay, + Progress, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; + +export interface DownloadingDialogProps { + isOpen: boolean; + progress: number; +} + +const TrainingModelProgressDialog = ({ + isOpen, + progress, +}: DownloadingDialogProps) => { + return ( + {}} + size="2xl" + isCentered + > + + + + + + + + + + + + + + ); +}; + +export default TrainingModelProgressDialog; diff --git a/src/components/TrainingStatusSection.svelte b/src/components/TrainingStatusSection.svelte deleted file mode 100644 index 4d4594daa..000000000 --- a/src/components/TrainingStatusSection.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
-
-

- {$t(statusId)} -

- {#if descriptionId} -

{$t(descriptionId)}

- {/if} -
- -
diff --git a/src/components/TryAgainDialog.tsx b/src/components/TryAgainDialog.tsx new file mode 100644 index 000000000..cd19e3472 --- /dev/null +++ b/src/components/TryAgainDialog.tsx @@ -0,0 +1,143 @@ +import { + Button, + HStack, + Heading, + ListItem, + Modal, + ModalBody, + ModalContent, + ModalFooter, + ModalOverlay, + Text, + UnorderedList, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; +import { ConnectionFlowStep } from "../connection-stage-hooks"; +import { useDeployment } from "../deployment"; + +const OneLineContent = ({ textId }: { textId: string }) => { + return ( + + + + ); +}; + +const ReplugMicrobitContent = () => { + return ( + <> + + + + + {[ + "connectMB.usbTryAgain.replugMicrobit3", + "connectMB.usbTryAgain.replugMicrobit4", + ].map((textId) => ( + + + + + + ))} + + + + ); +}; + +const CloseTabsContent = () => { + const { appNameShort } = useDeployment(); + return ( + + + + + + + + + ); +}; + +const configs = { + [ConnectionFlowStep.TryAgainReplugMicrobit]: { + headingId: "connectMB.usbTryAgain.heading", + children: , + }, + [ConnectionFlowStep.TryAgainCloseTabs]: { + headingId: "connectMB.usbTryAgain.heading", + children: , + }, + [ConnectionFlowStep.TryAgainWebUsbSelectMicrobit]: { + headingId: "connectMB.usbTryAgain.heading", + children: , + }, + [ConnectionFlowStep.TryAgainBluetoothSelectMicrobit]: { + headingId: "connectMB.bluetooth.heading", + children: ( + + ), + }, +}; + +interface TryAgainDialogProps { + isOpen: boolean; + onClose: () => void; + onTryAgain: () => void; + type: + | ConnectionFlowStep.TryAgainReplugMicrobit + | ConnectionFlowStep.TryAgainCloseTabs + | ConnectionFlowStep.TryAgainWebUsbSelectMicrobit + | ConnectionFlowStep.TryAgainBluetoothSelectMicrobit; +} + +const TryAgainDialog = ({ + type, + isOpen, + onClose, + onTryAgain, +}: TryAgainDialogProps) => { + const config = configs[type]; + return ( + + + + + + + + + + {config.children} + + + + + + + + + + + + + ); +}; + +export default TryAgainDialog; diff --git a/src/components/UnplugRadioLinkMicrobitDialog.tsx b/src/components/UnplugRadioLinkMicrobitDialog.tsx new file mode 100644 index 000000000..01ee0b18d --- /dev/null +++ b/src/components/UnplugRadioLinkMicrobitDialog.tsx @@ -0,0 +1,51 @@ +import { HStack, Image, Text, VStack } from "@chakra-ui/react"; +import { FormattedMessage, useIntl } from "react-intl"; +import unplugMicrobit from "../images/unplug-microbit.gif"; +import microbitWithComputer from "../images/stylised-microbit-with-usb-computer.svg"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; + +export interface ConnectCableDialogProps + extends Omit {} + +const UnplugRadioLinkMicrobitDialog = ({ + ...props +}: ConnectCableDialogProps) => { + const intl = useIntl(); + return ( + + + + + + + + {intl.formatMessage({ + + + + + {intl.formatMessage({ + + + + ); +}; + +export default UnplugRadioLinkMicrobitDialog; diff --git a/src/components/UnsupportedMicrobitDialog.tsx b/src/components/UnsupportedMicrobitDialog.tsx new file mode 100644 index 000000000..ad043c041 --- /dev/null +++ b/src/components/UnsupportedMicrobitDialog.tsx @@ -0,0 +1,113 @@ +import { + Button, + HStack, + Heading, + Modal, + ModalBody, + ModalContent, + ModalFooter, + ModalOverlay, + Text, + VStack, +} from "@chakra-ui/react"; +import { ReactNode } from "react"; +import { FormattedMessage } from "react-intl"; +import { useDeployment } from "../deployment"; +import Link from "./Link"; + +interface UnsupportedMicrobitDialogProps { + isOpen: boolean; + onClose: () => void; + onStartBluetoothClick: () => void; + isBluetoothSupported: boolean; +} + +const UnsupportedMicrobitDialog = ({ + isOpen, + onClose, + onStartBluetoothClick, + isBluetoothSupported, +}: UnsupportedMicrobitDialogProps) => { + const { supportLinks } = useDeployment(); + return ( + + + + + + + + + + + ( + + {chunks} + + ), + }} + /> + + + {isBluetoothSupported ? ( + + ) : ( + ( + + {chunks} + + ), + }} + /> + )} + + + + + + + {isBluetoothSupported ? ( + + ) : ( + + )} + + + + + + ); +}; + +export default UnsupportedMicrobitDialog; diff --git a/src/components/UpCurveArrow.tsx b/src/components/UpCurveArrow.tsx new file mode 100644 index 000000000..158598db3 --- /dev/null +++ b/src/components/UpCurveArrow.tsx @@ -0,0 +1,21 @@ +import { Icon } from "@chakra-ui/react"; + +interface UpCurveArrowProps { + w: string; + h: string; + color?: string; +} + +const UpCurveArrow = ({ w, h, color }: UpCurveArrowProps) => { + return ( + + + + ); +}; + +export default UpCurveArrow; diff --git a/src/components/WebUsbBluetoothUnsupportedDialog.tsx b/src/components/WebUsbBluetoothUnsupportedDialog.tsx new file mode 100644 index 000000000..43bd93365 --- /dev/null +++ b/src/components/WebUsbBluetoothUnsupportedDialog.tsx @@ -0,0 +1,63 @@ +import { + Button, + HStack, + Heading, + Modal, + ModalBody, + ModalContent, + ModalFooter, + ModalOverlay, + Text, + VStack, +} from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; + +interface WebUsbBluetoothUnsupportedDialogProps { + isOpen: boolean; + onClose: () => void; +} + +const WebUsbBluetoothUnsupportedDialog = ({ + isOpen, + onClose, +}: WebUsbBluetoothUnsupportedDialogProps) => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default WebUsbBluetoothUnsupportedDialog; diff --git a/src/components/WhatYouWillNeedDialog.tsx b/src/components/WhatYouWillNeedDialog.tsx new file mode 100644 index 000000000..d8265f53b --- /dev/null +++ b/src/components/WhatYouWillNeedDialog.tsx @@ -0,0 +1,144 @@ +import { Button, Grid, GridItem, Image, Text, VStack } from "@chakra-ui/react"; +import { FormattedMessage } from "react-intl"; +import batteryPackImage from "../images/stylised-battery-pack.svg"; +import microbitImage from "../images/stylised-microbit-black.svg"; +import twoMicrobitsImage from "../images/stylised-two-microbits-black.svg"; +import usbCableImage from "../images/stylised-usb-cable.svg"; +import computerImage from "../images/stylised_computer.svg"; +import computerBluetoothImage from "../images/stylised_computer_w_bluetooth.svg"; +import ConnectContainerDialog, { + ConnectContainerDialogProps, +} from "./ConnectContainerDialog"; +import ExternalLink from "./ExternalLink"; +import { useDeployment } from "../deployment"; + +const itemsConfig = { + radio: [ + { + imgSrc: twoMicrobitsImage, + titleId: "connectMB.radioStart.requirements1", + subtitleId: "connectMB.radioStart.requirements1.subtitle", + }, + { + imgSrc: computerImage, + titleId: "connectMB.radioStart.requirements2", + subtitleId: "connectMB.radioStart.requirements2.subtitle", + }, + { + imgSrc: usbCableImage, + titleId: "connectMB.radioStart.requirements3", + }, + { + imgSrc: batteryPackImage, + titleId: "connectMB.radioStart.requirements4", + subtitleId: "connectMB.radioStart.requirements4.subtitle", + }, + ], + bluetooth: [ + { + imgSrc: microbitImage, + titleId: "connectMB.bluetoothStart.requirements1", + }, + { + imgSrc: computerBluetoothImage, + titleId: "connectMB.bluetoothStart.requirements2", + subtitleId: "connectMB.bluetoothStart.requirements2.subtitle", + }, + { + imgSrc: usbCableImage, + titleId: "connectMB.bluetoothStart.requirements3", + }, + { + imgSrc: batteryPackImage, + titleId: "connectMB.bluetoothStart.requirements4", + subtitleId: "connectMB.bluetoothStart.requirements4.subtitle", + }, + ], +}; + +export interface WhatYouWillNeedDialogProps + extends Omit< + ConnectContainerDialogProps, + "children" | "onBack" | "headingId" + > { + reconnect: boolean; + type: "radio" | "bluetooth"; + onLinkClick: (() => void) | undefined; +} + +const WhatYouWillNeedDialog = ({ + reconnect, + type, + onLinkClick, + ...props +}: WhatYouWillNeedDialogProps) => { + const { supportLinks } = useDeployment(); + return ( + + {onLinkClick && ( + + )} + {reconnect && ( + + )} + + } + > + {reconnect && ( + + + + )} + + {itemsConfig[type].map(({ imgSrc, titleId, subtitleId }) => { + return ( + + + + + + + + {subtitleId && ( + + + + )} + + + + ); + })} + + + ); +}; + +export default WhatYouWillNeedDialog; diff --git a/src/components/YoutubeVideoEmbed.tsx b/src/components/YoutubeVideoEmbed.tsx new file mode 100644 index 000000000..8df16fb07 --- /dev/null +++ b/src/components/YoutubeVideoEmbed.tsx @@ -0,0 +1,34 @@ +import { AspectRatio, Box } from "@chakra-ui/react"; + +export interface YoutubeVideo { + alt: string; + youtubeId: string; +} + +interface YoutubeVideoProps { + alt: string; + youtubeId: string; +} + +const YoutubeVideoEmbed = ({ alt, youtubeId }: YoutubeVideoProps) => { + return ( + + +