├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── generic-issue.md └── workflows │ └── test.yml ├── .gitignore ├── .vscode └── settings.json ├── CONTRIBUTING.md ├── README.md ├── assets └── hero.jpg ├── build-figma-plugin.main.js ├── eslint.config.js ├── figma-test-files ├── Click and drag frame navigation.fig ├── Four empty frames.fig ├── Simple frame navigation.fig ├── Simple scroll.fig └── Touch up with delay frame navigation.fig ├── manifest.json ├── package.json ├── pnpm-lock.yaml ├── src ├── generators.test.ts ├── generators.ts ├── main.ts ├── traverse.ts ├── types.ts ├── ui.tsx └── utils.ts └── tsconfig.json /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | 1. Include the Figma file that contains a minimal reproduction example 15 | 2. Report the type of XState machine you exported 16 | 2. (is the plugin does not break) Include the exported code 17 | 18 | **Expected behavior** 19 | A clear and concise description of what you expected to happen. 20 | 21 | **Screenshots** 22 | If applicable, add screenshots to help explain your problem. 23 | 24 | **Context** 25 | - OS: [e.g. MacOS/Windows] 26 | - Figma Desktop version [e.g. 116.10.9] 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/generic-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Generic issue 3 | about: Whatever that does not fall under the above cases. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | short: 6 | runs-on: ubuntu-latest 7 | 8 | name: Node.js Quick 9 | steps: 10 | - uses: actions/checkout@v3 11 | 12 | - name: Install pnpm 13 | uses: pnpm/action-setup@v2 14 | 15 | - name: Use Node.js 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: '20' 19 | cache: pnpm 20 | 21 | - name: Install dependencies 22 | run: pnpm ci:install 23 | 24 | - name: Lint 25 | run: pnpm lint 26 | 27 | - name: Typecheck 28 | run: pnpm typecheck 29 | 30 | - name: Test Build 31 | run: pnpm build 32 | 33 | - name: Run tests 34 | run: pnpm test 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Node 2 | *.log 3 | *.log.* 4 | node_modules 5 | 6 | out/ 7 | dist/ 8 | build/ 9 | code.js 10 | 11 | .DS_Store 12 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | // -------------------------------------------------- 3 | // ANTFU ESLINT CONFIG START 4 | // -------------------------------------------------- 5 | // Enable the ESlint flat config support 6 | "eslint.experimental.useFlatConfig": true, 7 | 8 | // Disable the default formatter, use eslint instead 9 | "prettier.enable": false, 10 | "editor.formatOnSave": false, 11 | 12 | // Auto fix 13 | "editor.codeActionsOnSave": { 14 | "source.fixAll.eslint": "explicit", 15 | "source.organizeImports": "never" 16 | }, 17 | 18 | // Silent the stylistic rules in you IDE, but still auto fix them 19 | "eslint.rules.customizations": [ 20 | { "rule": "style/*", "severity": "off" }, 21 | { "rule": "*-indent", "severity": "off" }, 22 | { "rule": "*-spacing", "severity": "off" }, 23 | { "rule": "*-spaces", "severity": "off" }, 24 | { "rule": "*-order", "severity": "off" }, 25 | { "rule": "*-dangle", "severity": "off" }, 26 | { "rule": "*-newline", "severity": "off" }, 27 | { "rule": "*quotes", "severity": "off" }, 28 | { "rule": "*semi", "severity": "off" } 29 | ], 30 | 31 | // Enable eslint for all supported languages 32 | "eslint.validate": [ 33 | "javascript", 34 | "javascriptreact", 35 | "typescript", 36 | "typescriptreact", 37 | "vue", 38 | "html", 39 | "markdown", 40 | "json", 41 | "jsonc", 42 | "yaml" 43 | ], 44 | // -------------------------------------------------- 45 | // ANTFU ESLINT CONFIG END 46 | // -------------------------------------------------- 47 | 48 | // -------------------------------------------------- 49 | // CREATE FIGMA PLUGIN START 50 | // -------------------------------------------------- 51 | "json.schemas": [ 52 | { 53 | "fileMatch": ["package.json"], 54 | "url": "https://yuanqing.github.io/create-figma-plugin/figma-plugin.json" 55 | } 56 | ] 57 | // -------------------------------------------------- 58 | // CREATE FIGMA PLUGIN END 59 | // -------------------------------------------------- 60 | } 61 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | 4 | 5 | ## Issues 6 | 7 | If you want to raise an issue: 8 | 1. Please check the [README's roadmap](./README.md#roadmap) in advance, chances are we already 9 | planned to work on what you need 10 | 1. Please check the [README's FAQ](./README.md#faq) in advance, chances are we are aware of your 11 | needs but we chose not to work on them 12 | 13 | ## Features 14 | 15 | First of all, open an issue to describe the feature you would like to build. This helps to avoid you 16 | wasting your time in case something is not needed or we have a different vision about the topic 😊 17 | 18 | ## Development 19 | 20 | ### How the plugin works 21 | 22 | If you start from [src/types.ts](./src/types.ts), and [src/main.ts](./src/main.ts) files, you can 23 | see the plugin is split in two big steps: 24 | 25 | 1. A **traverser**: it goes through the content of the Figma document looking for all the useful 26 | elements which influence the generated state machine (for instance: fragments, buttons, etc.). The 27 | goal is to generate a **Figma-agnostic object descriptor** used later on to generate the state 28 | machine. The object created by the traverser is logged in the console's devtools. 29 | 30 | 1. Some **generators**: they generate the state machine's code out of the Figma-agnostic object 31 | descriptor. The generate machine is a string to be then copy-pasted in your own project, or in the 32 | XState visualizer. In the future, more generators will be added. 33 | 34 | ### Tests 35 | 36 | At the moment: 37 | 1. The traverser is not tested 38 | 2. The generators are unit tested 39 | 1. Anyway, only the generated string is checked. At the moment, the string is not used to create 40 | a real XState state machine 41 | 42 | 43 | ### To do list 44 | 45 | Here is an non-exhausting list of things to do on the project, prioritize by importance. 46 | 47 | 1. Cover more Figma's features (see the main [README](./README.md)) 48 | 2. Set up automatic releases 49 | 3. Add documentation for how the supported Figma entities and interactions are then converted to the 50 | state machine 51 | 52 | 53 | ## Development guide 54 | 55 | *This plugin is built with [Create Figma Plugin](https://yuanqing.github.io/create-figma-plugin/).* 56 | 57 | ### Pre-requisites 58 | 59 | - [Pnpm](https://pnpm.io/) – v8.4.0 60 | - [Node.js](https://nodejs.org) – v18 61 | - [Figma desktop app](https://figma.com/downloads/) 62 | - The dependencies installed through 63 | ``` 64 | $ pnpm install 65 | ``` 66 | 67 | ### Build the plugin 68 | 69 | To build the plugin: 70 | 71 | ``` 72 | $ pnpm build 73 | ``` 74 | 75 | This will generate a [`manifest.json`](https://figma.com/plugin-docs/manifest/) file and a `build/` 76 | directory containing the JavaScript bundle(s) for the plugin. 77 | 78 | 79 | ### Development 80 | 81 | 1. Download [Figma Desktop](https://www.figma.com/downloads/) 82 | 2. In Figma, enable HMR through `Plugins (in the menu bar) -> Development -> Hot reload plugin` 83 | 3. Watch for code changes and rebuild the plugin automatically 84 | ``` 85 | $ pnpm watch 86 | ``` 87 | 4. Keep the unit tests running 88 | ``` 89 | $ pnpm test 90 | ``` 91 | 5. Open the developer console, search for and run `Show/Hide console` via the Quick Actions search bar. 92 | 93 | You can use one of the available [Figma files](./src/figma-files/) to play with the plugin. 94 | 95 | 96 | ## See also 97 | 98 | - [Create Figma Plugin docs](https://yuanqing.github.io/create-figma-plugin/) 99 | - [`yuanqing/figma-plugins`](https://github.com/yuanqing/figma-plugins#readme) 100 | 101 | Official docs and code samples from Figma: 102 | 103 | - [Plugin API docs](https://figma.com/plugin-docs/) 104 | - [`figma/plugin-samples`](https://github.com/figma/plugin-samples#readme) 105 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > [!NOTE] 2 | > I stopped working on this project! 3 | > 4 | > - I didn't find complex-enough and valid use cases in my day-to-day working life. 5 | > - Apart from genuine curiosity, I didn't find much interest from the community. 6 | > - At the same time, the Figma prototype -> XState conversion is trickier than expected, due to the nested Figma prototype logic. See [discussions/10](https://github.com/NoriSte/figma-to-xstate/discussions/10) as an example. 7 | > - I achieved the personal goal of learning about [the Figma plu-gin API](https://www.figma.com/plugin-docs/). 8 | > - Which resulted in me implementing a Figma plugin, [Select and Inspect](https://www.figma.com/community/plugin/1348339696557868933/select-and-inspect), as a side effect. 9 | > - Which allowed me to implement a Figma plugin to check if Preply's Figma files correctly use the tokens or not (it's feasible but quite complex, and it turned out that even more staffed Design System teams avoid doing it due to the maintenance load) 10 | > - Which got us (Preply's Design System team) decide to keep the Design System visual coverage on the engineering side. You can read more about it the dedicated article: Visual coverage: [Why and How Preply Measures the Impact of the Design System](https://medium.com/preply-engineering/visual-coverage-why-and-how-preply-measures-the-impact-of-the-design-system-1057115f4aff). 11 | 12 | --- 13 | 14 | 15 | # 🚧 Figma to XState 16 | 17 | A Figma plugin to convert a Figma prototype to an XState machine (work in progress). 18 | 19 | ![Plugin's logo reporting "From Figma prototypes to XState’s machine config"](./assets/hero.jpg "Figma to XState") 20 | 21 | ## Why? 22 | 23 | I trust XState not only as a powerful development tool, but also for enabling pair programming 24 | among engineers and Product stakeholders. 25 | 26 | Product teams do not miss much edge cases when they design 27 | features through flowcharts and also ease a flowchart-to-XState machine conversion process. At the 28 | same time, I think a Figma prototype to XState machine convert tool can speed up the initial 29 | conversion process, allowing later engineering rework the state machine with or without the designers. 30 | 31 | 32 | ## Roadmap 33 | 34 | - [x] Export Figma's frames as XState's states 35 | - [ ] Export Figma's interactions as XState's events 36 | - [x] Click 37 | - [x] Drag 38 | - [ ] Key 39 | - [x] Mouse enter/leave 40 | - [x] Mouse down/up (touch down/touch up) 41 | - [x] Delay for all the mouse events 42 | - [ ] Delays that override each other 43 | - [ ] Set variable 44 | - [ ] Support for variable collections 45 | - [ ] Export Figma's actions actions as XState's events 46 | - [x] Navigate 47 | - [ ] Change to 48 | - [ ] Back 49 | - [ ] Set variable 50 | - [ ] Conditional 51 | - [x] Scroll to 52 | - [ ] Open link 53 | - [ ] Open overlay 54 | - [ ] Swap overlay 55 | - [ ] Close overlay 56 | - [ ] Support for multiple prototypes in the same page 57 | - [ ] Support for custom prototype starting points (frames or elements) 58 | - [ ] Support for frames and elements with the same name 59 | - [ ] Export XState V5 machine 60 | 61 | 62 | 63 | 64 | ## FAQ 65 | 66 | *Is an XState machine to Figma prototype conversion in the roadmap?*? 67 | 68 | No, Figma's prototypes lacks most of the XState's functionalities. 69 | 70 | *Is a two-way sync in the roadmap after the first export?*? 71 | 72 | No, I think tracking what happened to the XState machine after it has been exported is too hard and 73 | Figma's prototypes lacks most of the XState's functionalities. 74 | 75 | 76 | ### Install the plugin 77 | 78 | 1. In the Figma desktop app, open a Figma document. 79 | 2. Search for and run `Import plugin from manifest…` via the Quick Actions search bar. 80 | 3. Select the `manifest.json` file that was generated by the `build` script. 81 | -------------------------------------------------------------------------------- /assets/hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoriSte/figma-to-xstate/fa4ca1b10120929be7a35a5c483429baa9a02bb5/assets/hero.jpg -------------------------------------------------------------------------------- /build-figma-plugin.main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * @param {import('esbuild').BuildOptions} buildOptions 4 | * @returns {import('esbuild').BuildOptions} esbuild options 5 | */ 6 | export default function (buildOptions) { 7 | return { 8 | ...buildOptions, 9 | mainFields: ['module', 'main', 'browser'], 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import antfu from '@antfu/eslint-config' 2 | 3 | export default antfu({ rules: { 'no-console': 0 } }) 4 | -------------------------------------------------------------------------------- /figma-test-files/Click and drag frame navigation.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoriSte/figma-to-xstate/fa4ca1b10120929be7a35a5c483429baa9a02bb5/figma-test-files/Click and drag frame navigation.fig -------------------------------------------------------------------------------- /figma-test-files/Four empty frames.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoriSte/figma-to-xstate/fa4ca1b10120929be7a35a5c483429baa9a02bb5/figma-test-files/Four empty frames.fig -------------------------------------------------------------------------------- /figma-test-files/Simple frame navigation.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoriSte/figma-to-xstate/fa4ca1b10120929be7a35a5c483429baa9a02bb5/figma-test-files/Simple frame navigation.fig -------------------------------------------------------------------------------- /figma-test-files/Simple scroll.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoriSte/figma-to-xstate/fa4ca1b10120929be7a35a5c483429baa9a02bb5/figma-test-files/Simple scroll.fig -------------------------------------------------------------------------------- /figma-test-files/Touch up with delay frame navigation.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoriSte/figma-to-xstate/fa4ca1b10120929be7a35a5c483429baa9a02bb5/figma-test-files/Touch up with delay frame navigation.fig -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { "api": "1.0.0", "editorType": ["figma"], "id": "1333069526938083033", "name": "Figma to XState", "main": "build/main.js", "ui": "build/ui.js", "networkAccess": { "allowedDomains": ["none"] } } 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module", 3 | "packageManager": "pnpm@8.4.0", 4 | "engines": { 5 | "node": "^18.0.0 || >=20.0.0" 6 | }, 7 | "scripts": { 8 | "ci:install": "pnpm install --frozen-lockfile", 9 | "build": "build-figma-plugin --typecheck --minify", 10 | "watch": "build-figma-plugin --typecheck --watch", 11 | "test": "npm run test:unit", 12 | "typecheck": "tsc --noEmit", 13 | "lint": "eslint .", 14 | "lint:fix": "eslint . --fix", 15 | "test:unit": "vitest" 16 | }, 17 | "dependencies": { 18 | "@create-figma-plugin/utilities": "2.6.1", 19 | "code-block-writer": "12.0.0", 20 | "figx": "0.1.3" 21 | }, 22 | "devDependencies": { 23 | "@antfu/eslint-config": "1.1.0", 24 | "@create-figma-plugin/build": "3.0.2", 25 | "@create-figma-plugin/tsconfig": "3.0.2", 26 | "@create-figma-plugin/ui": "3.0.2", 27 | "@figma/plugin-typings": "1.79.0", 28 | "eslint": "^8.55.0", 29 | "preact": "10.18.1", 30 | "simple-git-hooks": "^2.9.0", 31 | "typescript": "5.2.2", 32 | "vitest": "1.0.4", 33 | "xstateV4": "npm:xstate@4" 34 | }, 35 | "figma-plugin": { 36 | "editorType": [ 37 | "figma" 38 | ], 39 | "id": "1333069526938083033", 40 | "name": "Figma to XState", 41 | "ui": "src/ui.tsx", 42 | "main": "src/main.ts", 43 | "networkAccess": { "allowedDomains": ["none"] } 44 | }, 45 | "simple-git-hooks": { 46 | "pre-commit": "pnpm typecheck && pnpm lint:fix" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@create-figma-plugin/utilities': 9 | specifier: 2.6.1 10 | version: 2.6.1 11 | code-block-writer: 12 | specifier: 12.0.0 13 | version: 12.0.0 14 | figx: 15 | specifier: 0.1.3 16 | version: 0.1.3 17 | 18 | devDependencies: 19 | '@antfu/eslint-config': 20 | specifier: 1.1.0 21 | version: 1.1.0(eslint@8.55.0)(typescript@5.2.2)(vitest@1.0.4) 22 | '@create-figma-plugin/build': 23 | specifier: 3.0.2 24 | version: 3.0.2(@figma/plugin-typings@1.79.0)(typescript@5.2.2) 25 | '@create-figma-plugin/tsconfig': 26 | specifier: 3.0.2 27 | version: 3.0.2 28 | '@create-figma-plugin/ui': 29 | specifier: 3.0.2 30 | version: 3.0.2(preact@10.18.1) 31 | '@figma/plugin-typings': 32 | specifier: 1.79.0 33 | version: 1.79.0 34 | eslint: 35 | specifier: ^8.55.0 36 | version: 8.55.0 37 | preact: 38 | specifier: 10.18.1 39 | version: 10.18.1 40 | simple-git-hooks: 41 | specifier: ^2.9.0 42 | version: 2.9.0 43 | typescript: 44 | specifier: 5.2.2 45 | version: 5.2.2 46 | vitest: 47 | specifier: 1.0.4 48 | version: 1.0.4 49 | xstateV4: 50 | specifier: npm:xstate@4 51 | version: /xstate@4.38.3 52 | 53 | packages: 54 | 55 | /@aashutoshrathi/word-wrap@1.2.6: 56 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 57 | engines: {node: '>=0.10.0'} 58 | dev: true 59 | 60 | /@antfu/eslint-config@1.1.0(eslint@8.55.0)(typescript@5.2.2)(vitest@1.0.4): 61 | resolution: {integrity: sha512-r39rNfNNB4j2MlJ9lLBA2vpsWQZePZ1EHbkztq/hIe3EOqfLjve/H2OYP4q+6L/X70UKYc1/Q9pFj85Ph4CyRg==} 62 | peerDependencies: 63 | eslint: '>=8.0.0' 64 | dependencies: 65 | '@antfu/eslint-define-config': 1.23.0-2 66 | '@stylistic/eslint-plugin': 1.0.0(eslint@8.55.0)(typescript@5.2.2) 67 | '@typescript-eslint/eslint-plugin': 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.2.2) 68 | '@typescript-eslint/parser': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 69 | eslint: 8.55.0 70 | eslint-config-flat-gitignore: 0.1.1 71 | eslint-plugin-antfu: 1.0.2(eslint@8.55.0) 72 | eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) 73 | eslint-plugin-i: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.55.0) 74 | eslint-plugin-jsdoc: 46.8.2(eslint@8.55.0) 75 | eslint-plugin-jsonc: 2.10.0(eslint@8.55.0) 76 | eslint-plugin-markdown: 3.0.1(eslint@8.55.0) 77 | eslint-plugin-n: 16.2.0(eslint@8.55.0) 78 | eslint-plugin-no-only-tests: 3.1.0 79 | eslint-plugin-perfectionist: 2.2.0(eslint@8.55.0)(typescript@5.2.2)(vue-eslint-parser@9.3.2) 80 | eslint-plugin-unicorn: 49.0.0(eslint@8.55.0) 81 | eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.9.1)(eslint@8.55.0) 82 | eslint-plugin-vitest: 0.3.9(@typescript-eslint/eslint-plugin@6.9.1)(eslint@8.55.0)(typescript@5.2.2)(vitest@1.0.4) 83 | eslint-plugin-vue: 9.18.1(eslint@8.55.0) 84 | eslint-plugin-yml: 1.10.0(eslint@8.55.0) 85 | globals: 13.23.0 86 | jsonc-eslint-parser: 2.4.0 87 | local-pkg: 0.5.0 88 | vue-eslint-parser: 9.3.2(eslint@8.55.0) 89 | yaml-eslint-parser: 1.2.2 90 | transitivePeerDependencies: 91 | - astro-eslint-parser 92 | - eslint-import-resolver-typescript 93 | - eslint-import-resolver-webpack 94 | - supports-color 95 | - svelte 96 | - svelte-eslint-parser 97 | - typescript 98 | - vitest 99 | dev: true 100 | 101 | /@antfu/eslint-define-config@1.23.0-2: 102 | resolution: {integrity: sha512-LvxY21+ZhpuBf/aHeBUtGQhSEfad4PkNKXKvDOSvukaM3XVTfBhwmHX2EKwAsdq5DlfjbT3qqYyMiueBIO5iDQ==} 103 | engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'} 104 | dev: true 105 | 106 | /@babel/code-frame@7.22.13: 107 | resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} 108 | engines: {node: '>=6.9.0'} 109 | dependencies: 110 | '@babel/highlight': 7.22.20 111 | chalk: 2.4.2 112 | dev: true 113 | 114 | /@babel/helper-validator-identifier@7.22.20: 115 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 116 | engines: {node: '>=6.9.0'} 117 | dev: true 118 | 119 | /@babel/highlight@7.22.20: 120 | resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} 121 | engines: {node: '>=6.9.0'} 122 | dependencies: 123 | '@babel/helper-validator-identifier': 7.22.20 124 | chalk: 2.4.2 125 | js-tokens: 4.0.0 126 | dev: true 127 | 128 | /@create-figma-plugin/build@3.0.2(@figma/plugin-typings@1.79.0)(typescript@5.2.2): 129 | resolution: {integrity: sha512-TO8JxjuiG9mrR6fSsycAYDIEQIPk8fv2y6R1C6PmS9EB5/GzwHeS7y+pWkvf9zm7lIn5A+fY6znq2Ty5ANzM8w==} 130 | engines: {node: '>=18'} 131 | hasBin: true 132 | peerDependencies: 133 | '@figma/plugin-typings': '>=1' 134 | typescript: '>=4' 135 | dependencies: 136 | '@create-figma-plugin/common': 3.0.2 137 | '@figma/plugin-typings': 1.79.0 138 | chokidar: 3.5.3 139 | cssnano: 6.0.1(postcss@8.4.31) 140 | esbuild: 0.19.5 141 | find-up: 6.3.0 142 | globby: 13.2.2 143 | indent-string: 5.0.0 144 | kleur: 4.1.5 145 | path-exists: 5.0.0 146 | postcss: 8.4.31 147 | postcss-modules: 6.0.0(postcss@8.4.31) 148 | rev-hash: 4.0.0 149 | sade: 1.8.1 150 | temp-write: 5.0.0 151 | tempy: 3.1.0 152 | typed-css-modules: 0.8.0 153 | typescript: 5.2.2 154 | dev: true 155 | 156 | /@create-figma-plugin/common@3.0.2: 157 | resolution: {integrity: sha512-RKyNa+d01eVm9oih3Pq4Og9VsiPk812Ie4Dun/4NN048wxf6sQQ0e8Yi4OBTduwOmH25auWmPLo2ZZBgckDXkg==} 158 | engines: {node: '>=18'} 159 | dependencies: 160 | '@sindresorhus/slugify': 2.2.1 161 | kleur: 4.1.5 162 | path-exists: 5.0.0 163 | dev: true 164 | 165 | /@create-figma-plugin/tsconfig@3.0.2: 166 | resolution: {integrity: sha512-cjKW1HCki57wi/a4kaW3NcY15tQy0EVcqETvp37fTBQMHmQJ7f0tV4+wNYJP/eH+B93EK/ULtDIRtK+SdybAmQ==} 167 | dev: true 168 | 169 | /@create-figma-plugin/ui@3.0.2(preact@10.18.1): 170 | resolution: {integrity: sha512-vuDP9EiLT2sf4PBx3cn36IibEAAH06cLWNq/bEWRGBUOgto6VOPSmdL13uOSgJEJaD2O1QiE4jpuZab6acUmIQ==} 171 | engines: {node: '>=18'} 172 | peerDependencies: 173 | preact: '>=10' 174 | dependencies: 175 | '@create-figma-plugin/utilities': 3.0.2 176 | preact: 10.18.1 177 | dev: true 178 | 179 | /@create-figma-plugin/utilities@2.6.1: 180 | resolution: {integrity: sha512-Zd4sxIogl2IVLmOIWdcyAav3SwzTzAAMNkWY9DuSkder6kq5M79+AdSJ9q1ETCsCiBysakJ5BPaiVOBRAjfuFQ==} 181 | engines: {node: '>=18'} 182 | dependencies: 183 | hex-rgb: 5.0.0 184 | natural-compare-lite: 1.4.0 185 | rgb-hex: 4.1.0 186 | dev: false 187 | 188 | /@create-figma-plugin/utilities@3.0.2: 189 | resolution: {integrity: sha512-6pFmhNHBBoHMT9J8L7f1+CbXK4S0iWPtDObamJv5j+r+0z5NmFUSS/cWkkZ25tsNaLuHHnVEkuwkNOAfoj/5qA==} 190 | engines: {node: '>=18'} 191 | dependencies: 192 | hex-rgb: 5.0.0 193 | natural-compare-lite: 1.4.0 194 | rgb-hex: 4.1.0 195 | dev: true 196 | 197 | /@es-joy/jsdoccomment@0.40.1: 198 | resolution: {integrity: sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==} 199 | engines: {node: '>=16'} 200 | dependencies: 201 | comment-parser: 1.4.0 202 | esquery: 1.5.0 203 | jsdoc-type-pratt-parser: 4.0.0 204 | dev: true 205 | 206 | /@esbuild/android-arm64@0.19.5: 207 | resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==} 208 | engines: {node: '>=12'} 209 | cpu: [arm64] 210 | os: [android] 211 | requiresBuild: true 212 | dev: true 213 | optional: true 214 | 215 | /@esbuild/android-arm@0.19.5: 216 | resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==} 217 | engines: {node: '>=12'} 218 | cpu: [arm] 219 | os: [android] 220 | requiresBuild: true 221 | dev: true 222 | optional: true 223 | 224 | /@esbuild/android-x64@0.19.5: 225 | resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==} 226 | engines: {node: '>=12'} 227 | cpu: [x64] 228 | os: [android] 229 | requiresBuild: true 230 | dev: true 231 | optional: true 232 | 233 | /@esbuild/darwin-arm64@0.19.5: 234 | resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==} 235 | engines: {node: '>=12'} 236 | cpu: [arm64] 237 | os: [darwin] 238 | requiresBuild: true 239 | dev: true 240 | optional: true 241 | 242 | /@esbuild/darwin-x64@0.19.5: 243 | resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==} 244 | engines: {node: '>=12'} 245 | cpu: [x64] 246 | os: [darwin] 247 | requiresBuild: true 248 | dev: true 249 | optional: true 250 | 251 | /@esbuild/freebsd-arm64@0.19.5: 252 | resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==} 253 | engines: {node: '>=12'} 254 | cpu: [arm64] 255 | os: [freebsd] 256 | requiresBuild: true 257 | dev: true 258 | optional: true 259 | 260 | /@esbuild/freebsd-x64@0.19.5: 261 | resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==} 262 | engines: {node: '>=12'} 263 | cpu: [x64] 264 | os: [freebsd] 265 | requiresBuild: true 266 | dev: true 267 | optional: true 268 | 269 | /@esbuild/linux-arm64@0.19.5: 270 | resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==} 271 | engines: {node: '>=12'} 272 | cpu: [arm64] 273 | os: [linux] 274 | requiresBuild: true 275 | dev: true 276 | optional: true 277 | 278 | /@esbuild/linux-arm@0.19.5: 279 | resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==} 280 | engines: {node: '>=12'} 281 | cpu: [arm] 282 | os: [linux] 283 | requiresBuild: true 284 | dev: true 285 | optional: true 286 | 287 | /@esbuild/linux-ia32@0.19.5: 288 | resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==} 289 | engines: {node: '>=12'} 290 | cpu: [ia32] 291 | os: [linux] 292 | requiresBuild: true 293 | dev: true 294 | optional: true 295 | 296 | /@esbuild/linux-loong64@0.19.5: 297 | resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==} 298 | engines: {node: '>=12'} 299 | cpu: [loong64] 300 | os: [linux] 301 | requiresBuild: true 302 | dev: true 303 | optional: true 304 | 305 | /@esbuild/linux-mips64el@0.19.5: 306 | resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==} 307 | engines: {node: '>=12'} 308 | cpu: [mips64el] 309 | os: [linux] 310 | requiresBuild: true 311 | dev: true 312 | optional: true 313 | 314 | /@esbuild/linux-ppc64@0.19.5: 315 | resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==} 316 | engines: {node: '>=12'} 317 | cpu: [ppc64] 318 | os: [linux] 319 | requiresBuild: true 320 | dev: true 321 | optional: true 322 | 323 | /@esbuild/linux-riscv64@0.19.5: 324 | resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==} 325 | engines: {node: '>=12'} 326 | cpu: [riscv64] 327 | os: [linux] 328 | requiresBuild: true 329 | dev: true 330 | optional: true 331 | 332 | /@esbuild/linux-s390x@0.19.5: 333 | resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==} 334 | engines: {node: '>=12'} 335 | cpu: [s390x] 336 | os: [linux] 337 | requiresBuild: true 338 | dev: true 339 | optional: true 340 | 341 | /@esbuild/linux-x64@0.19.5: 342 | resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==} 343 | engines: {node: '>=12'} 344 | cpu: [x64] 345 | os: [linux] 346 | requiresBuild: true 347 | dev: true 348 | optional: true 349 | 350 | /@esbuild/netbsd-x64@0.19.5: 351 | resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==} 352 | engines: {node: '>=12'} 353 | cpu: [x64] 354 | os: [netbsd] 355 | requiresBuild: true 356 | dev: true 357 | optional: true 358 | 359 | /@esbuild/openbsd-x64@0.19.5: 360 | resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==} 361 | engines: {node: '>=12'} 362 | cpu: [x64] 363 | os: [openbsd] 364 | requiresBuild: true 365 | dev: true 366 | optional: true 367 | 368 | /@esbuild/sunos-x64@0.19.5: 369 | resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==} 370 | engines: {node: '>=12'} 371 | cpu: [x64] 372 | os: [sunos] 373 | requiresBuild: true 374 | dev: true 375 | optional: true 376 | 377 | /@esbuild/win32-arm64@0.19.5: 378 | resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==} 379 | engines: {node: '>=12'} 380 | cpu: [arm64] 381 | os: [win32] 382 | requiresBuild: true 383 | dev: true 384 | optional: true 385 | 386 | /@esbuild/win32-ia32@0.19.5: 387 | resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==} 388 | engines: {node: '>=12'} 389 | cpu: [ia32] 390 | os: [win32] 391 | requiresBuild: true 392 | dev: true 393 | optional: true 394 | 395 | /@esbuild/win32-x64@0.19.5: 396 | resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} 397 | engines: {node: '>=12'} 398 | cpu: [x64] 399 | os: [win32] 400 | requiresBuild: true 401 | dev: true 402 | optional: true 403 | 404 | /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): 405 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 406 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 407 | peerDependencies: 408 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 409 | dependencies: 410 | eslint: 8.55.0 411 | eslint-visitor-keys: 3.4.3 412 | dev: true 413 | 414 | /@eslint-community/regexpp@4.10.0: 415 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 416 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 417 | dev: true 418 | 419 | /@eslint/eslintrc@2.1.4: 420 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 421 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 422 | dependencies: 423 | ajv: 6.12.6 424 | debug: 4.3.4 425 | espree: 9.6.1 426 | globals: 13.23.0 427 | ignore: 5.2.4 428 | import-fresh: 3.3.0 429 | js-yaml: 4.1.0 430 | minimatch: 3.1.2 431 | strip-json-comments: 3.1.1 432 | transitivePeerDependencies: 433 | - supports-color 434 | dev: true 435 | 436 | /@eslint/js@8.55.0: 437 | resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} 438 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 439 | dev: true 440 | 441 | /@figma/plugin-typings@1.79.0: 442 | resolution: {integrity: sha512-Nzi+ShWOs/0IHWQqUwBS4xydglgcgqNEKPSUhTXM+io4o4vSspwpKWy7XBrl5azqqoCozzBa10aPhwXsA+tJfg==} 443 | dev: true 444 | 445 | /@humanwhocodes/config-array@0.11.13: 446 | resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} 447 | engines: {node: '>=10.10.0'} 448 | dependencies: 449 | '@humanwhocodes/object-schema': 2.0.1 450 | debug: 4.3.4 451 | minimatch: 3.1.2 452 | transitivePeerDependencies: 453 | - supports-color 454 | dev: true 455 | 456 | /@humanwhocodes/module-importer@1.0.1: 457 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 458 | engines: {node: '>=12.22'} 459 | dev: true 460 | 461 | /@humanwhocodes/object-schema@2.0.1: 462 | resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} 463 | dev: true 464 | 465 | /@isaacs/cliui@8.0.2: 466 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 467 | engines: {node: '>=12'} 468 | dependencies: 469 | string-width: 5.1.2 470 | string-width-cjs: /string-width@4.2.3 471 | strip-ansi: 7.1.0 472 | strip-ansi-cjs: /strip-ansi@6.0.1 473 | wrap-ansi: 8.1.0 474 | wrap-ansi-cjs: /wrap-ansi@7.0.0 475 | dev: true 476 | 477 | /@jest/schemas@29.6.3: 478 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 479 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 480 | dependencies: 481 | '@sinclair/typebox': 0.27.8 482 | dev: true 483 | 484 | /@jridgewell/sourcemap-codec@1.4.15: 485 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 486 | dev: true 487 | 488 | /@nodelib/fs.scandir@2.1.5: 489 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 490 | engines: {node: '>= 8'} 491 | dependencies: 492 | '@nodelib/fs.stat': 2.0.5 493 | run-parallel: 1.2.0 494 | dev: true 495 | 496 | /@nodelib/fs.stat@2.0.5: 497 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 498 | engines: {node: '>= 8'} 499 | dev: true 500 | 501 | /@nodelib/fs.walk@1.2.8: 502 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 503 | engines: {node: '>= 8'} 504 | dependencies: 505 | '@nodelib/fs.scandir': 2.1.5 506 | fastq: 1.15.0 507 | dev: true 508 | 509 | /@pkgjs/parseargs@0.11.0: 510 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 511 | engines: {node: '>=14'} 512 | requiresBuild: true 513 | dev: true 514 | optional: true 515 | 516 | /@rollup/rollup-android-arm-eabi@4.8.0: 517 | resolution: {integrity: sha512-zdTObFRoNENrdPpnTNnhOljYIcOX7aI7+7wyrSpPFFIOf/nRdedE6IYsjaBE7tjukphh1tMTojgJ7p3lKY8x6Q==} 518 | cpu: [arm] 519 | os: [android] 520 | requiresBuild: true 521 | dev: true 522 | optional: true 523 | 524 | /@rollup/rollup-android-arm64@4.8.0: 525 | resolution: {integrity: sha512-aiItwP48BiGpMFS9Znjo/xCNQVwTQVcRKkFKsO81m8exrGjHkCBDvm9PHay2kpa8RPnZzzKcD1iQ9KaLY4fPQQ==} 526 | cpu: [arm64] 527 | os: [android] 528 | requiresBuild: true 529 | dev: true 530 | optional: true 531 | 532 | /@rollup/rollup-darwin-arm64@4.8.0: 533 | resolution: {integrity: sha512-zhNIS+L4ZYkYQUjIQUR6Zl0RXhbbA0huvNIWjmPc2SL0cB1h5Djkcy+RZ3/Bwszfb6vgwUvcVJYD6e6Zkpsi8g==} 534 | cpu: [arm64] 535 | os: [darwin] 536 | requiresBuild: true 537 | dev: true 538 | optional: true 539 | 540 | /@rollup/rollup-darwin-x64@4.8.0: 541 | resolution: {integrity: sha512-A/FAHFRNQYrELrb/JHncRWzTTXB2ticiRFztP4ggIUAfa9Up1qfW8aG2w/mN9jNiZ+HB0t0u0jpJgFXG6BfRTA==} 542 | cpu: [x64] 543 | os: [darwin] 544 | requiresBuild: true 545 | dev: true 546 | optional: true 547 | 548 | /@rollup/rollup-linux-arm-gnueabihf@4.8.0: 549 | resolution: {integrity: sha512-JsidBnh3p2IJJA4/2xOF2puAYqbaczB3elZDT0qHxn362EIoIkq7hrR43Xa8RisgI6/WPfvb2umbGsuvf7E37A==} 550 | cpu: [arm] 551 | os: [linux] 552 | requiresBuild: true 553 | dev: true 554 | optional: true 555 | 556 | /@rollup/rollup-linux-arm64-gnu@4.8.0: 557 | resolution: {integrity: sha512-hBNCnqw3EVCkaPB0Oqd24bv8SklETptQWcJz06kb9OtiShn9jK1VuTgi7o4zPSt6rNGWQOTDEAccbk0OqJmS+g==} 558 | cpu: [arm64] 559 | os: [linux] 560 | requiresBuild: true 561 | dev: true 562 | optional: true 563 | 564 | /@rollup/rollup-linux-arm64-musl@4.8.0: 565 | resolution: {integrity: sha512-Fw9ChYfJPdltvi9ALJ9wzdCdxGw4wtq4t1qY028b2O7GwB5qLNSGtqMsAel1lfWTZvf4b6/+4HKp0GlSYg0ahA==} 566 | cpu: [arm64] 567 | os: [linux] 568 | requiresBuild: true 569 | dev: true 570 | optional: true 571 | 572 | /@rollup/rollup-linux-riscv64-gnu@4.8.0: 573 | resolution: {integrity: sha512-BH5xIh7tOzS9yBi8dFrCTG8Z6iNIGWGltd3IpTSKp6+pNWWO6qy8eKoRxOtwFbMrid5NZaidLYN6rHh9aB8bEw==} 574 | cpu: [riscv64] 575 | os: [linux] 576 | requiresBuild: true 577 | dev: true 578 | optional: true 579 | 580 | /@rollup/rollup-linux-x64-gnu@4.8.0: 581 | resolution: {integrity: sha512-PmvAj8k6EuWiyLbkNpd6BLv5XeYFpqWuRvRNRl80xVfpGXK/z6KYXmAgbI4ogz7uFiJxCnYcqyvZVD0dgFog7Q==} 582 | cpu: [x64] 583 | os: [linux] 584 | requiresBuild: true 585 | dev: true 586 | optional: true 587 | 588 | /@rollup/rollup-linux-x64-musl@4.8.0: 589 | resolution: {integrity: sha512-mdxnlW2QUzXwY+95TuxZ+CurrhgrPAMveDWI97EQlA9bfhR8tw3Pt7SUlc/eSlCNxlWktpmT//EAA8UfCHOyXg==} 590 | cpu: [x64] 591 | os: [linux] 592 | requiresBuild: true 593 | dev: true 594 | optional: true 595 | 596 | /@rollup/rollup-win32-arm64-msvc@4.8.0: 597 | resolution: {integrity: sha512-ge7saUz38aesM4MA7Cad8CHo0Fyd1+qTaqoIo+Jtk+ipBi4ATSrHWov9/S4u5pbEQmLjgUjB7BJt+MiKG2kzmA==} 598 | cpu: [arm64] 599 | os: [win32] 600 | requiresBuild: true 601 | dev: true 602 | optional: true 603 | 604 | /@rollup/rollup-win32-ia32-msvc@4.8.0: 605 | resolution: {integrity: sha512-p9E3PZlzurhlsN5h9g7zIP1DnqKXJe8ZUkFwAazqSvHuWfihlIISPxG9hCHCoA+dOOspL/c7ty1eeEVFTE0UTw==} 606 | cpu: [ia32] 607 | os: [win32] 608 | requiresBuild: true 609 | dev: true 610 | optional: true 611 | 612 | /@rollup/rollup-win32-x64-msvc@4.8.0: 613 | resolution: {integrity: sha512-kb4/auKXkYKqlUYTE8s40FcJIj5soOyRLHKd4ugR0dCq0G2EfcF54eYcfQiGkHzjidZ40daB4ulsFdtqNKZtBg==} 614 | cpu: [x64] 615 | os: [win32] 616 | requiresBuild: true 617 | dev: true 618 | optional: true 619 | 620 | /@sinclair/typebox@0.27.8: 621 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 622 | dev: true 623 | 624 | /@sindresorhus/slugify@2.2.1: 625 | resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==} 626 | engines: {node: '>=12'} 627 | dependencies: 628 | '@sindresorhus/transliterate': 1.6.0 629 | escape-string-regexp: 5.0.0 630 | dev: true 631 | 632 | /@sindresorhus/transliterate@1.6.0: 633 | resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} 634 | engines: {node: '>=12'} 635 | dependencies: 636 | escape-string-regexp: 5.0.0 637 | dev: true 638 | 639 | /@stylistic/eslint-plugin-js@1.0.0(eslint@8.55.0): 640 | resolution: {integrity: sha512-xxvjyYnUEgjBTnXKYMk6JbU0LHkf269d6y4IgW69bK/VwHrqLfdgE6mYvft42U7KVpp6Tbf6Z64tLRYD/rYd/A==} 641 | dependencies: 642 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) 643 | acorn: 8.11.2 644 | escape-string-regexp: 4.0.0 645 | eslint-visitor-keys: 3.4.3 646 | espree: 9.6.1 647 | esutils: 2.0.3 648 | graphemer: 1.4.0 649 | transitivePeerDependencies: 650 | - eslint 651 | dev: true 652 | 653 | /@stylistic/eslint-plugin-jsx@1.0.0(eslint@8.55.0): 654 | resolution: {integrity: sha512-waUm7dcTFAI4d/3luf06RRNt89gSGaofHJ4BiuqKnpyu3yxn1lKbholjGQrw0xPjAciUe+ZSF6BKlBA9P2aV4Q==} 655 | dependencies: 656 | '@stylistic/eslint-plugin-js': 1.0.0(eslint@8.55.0) 657 | estraverse: 5.3.0 658 | jsx-ast-utils: 3.3.5 659 | transitivePeerDependencies: 660 | - eslint 661 | dev: true 662 | 663 | /@stylistic/eslint-plugin-ts@1.0.0(eslint@8.55.0)(typescript@5.2.2): 664 | resolution: {integrity: sha512-qQKXYWJzovSNsPq1954t6DNbDA7+1c4ximVH4CuubPV+3I8qCeO33vF6wSpyP27LgxXAx0mHIDw/YaaoM7dQoQ==} 665 | peerDependencies: 666 | eslint: '*' 667 | dependencies: 668 | '@stylistic/eslint-plugin-js': 1.0.0(eslint@8.55.0) 669 | '@typescript-eslint/scope-manager': 6.9.1 670 | '@typescript-eslint/type-utils': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 671 | '@typescript-eslint/utils': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 672 | eslint: 8.55.0 673 | graphemer: 1.4.0 674 | transitivePeerDependencies: 675 | - supports-color 676 | - typescript 677 | dev: true 678 | 679 | /@stylistic/eslint-plugin@1.0.0(eslint@8.55.0)(typescript@5.2.2): 680 | resolution: {integrity: sha512-kh4q2O2r55uKTXIQlVxnr9Pkjaemv/pn0lQ6bVRBD/ETq0hwhIvXR/54NRs3X8bS4IGIO2SGjFxnjySfUYJ3tQ==} 681 | peerDependencies: 682 | eslint: '*' 683 | dependencies: 684 | '@stylistic/eslint-plugin-js': 1.0.0(eslint@8.55.0) 685 | '@stylistic/eslint-plugin-jsx': 1.0.0(eslint@8.55.0) 686 | '@stylistic/eslint-plugin-ts': 1.0.0(eslint@8.55.0)(typescript@5.2.2) 687 | eslint: 8.55.0 688 | transitivePeerDependencies: 689 | - supports-color 690 | - typescript 691 | dev: true 692 | 693 | /@trysound/sax@0.2.0: 694 | resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} 695 | engines: {node: '>=10.13.0'} 696 | dev: true 697 | 698 | /@types/json-schema@7.0.14: 699 | resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} 700 | dev: true 701 | 702 | /@types/mdast@3.0.14: 703 | resolution: {integrity: sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==} 704 | dependencies: 705 | '@types/unist': 2.0.9 706 | dev: true 707 | 708 | /@types/normalize-package-data@2.4.3: 709 | resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} 710 | dev: true 711 | 712 | /@types/semver@7.5.4: 713 | resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} 714 | dev: true 715 | 716 | /@types/unist@2.0.9: 717 | resolution: {integrity: sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==} 718 | dev: true 719 | 720 | /@typescript-eslint/eslint-plugin@6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.2.2): 721 | resolution: {integrity: sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==} 722 | engines: {node: ^16.0.0 || >=18.0.0} 723 | peerDependencies: 724 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 725 | eslint: ^7.0.0 || ^8.0.0 726 | typescript: '*' 727 | peerDependenciesMeta: 728 | typescript: 729 | optional: true 730 | dependencies: 731 | '@eslint-community/regexpp': 4.10.0 732 | '@typescript-eslint/parser': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 733 | '@typescript-eslint/scope-manager': 6.9.1 734 | '@typescript-eslint/type-utils': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 735 | '@typescript-eslint/utils': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 736 | '@typescript-eslint/visitor-keys': 6.9.1 737 | debug: 4.3.4 738 | eslint: 8.55.0 739 | graphemer: 1.4.0 740 | ignore: 5.2.4 741 | natural-compare: 1.4.0 742 | semver: 7.5.4 743 | ts-api-utils: 1.0.3(typescript@5.2.2) 744 | typescript: 5.2.2 745 | transitivePeerDependencies: 746 | - supports-color 747 | dev: true 748 | 749 | /@typescript-eslint/parser@6.9.1(eslint@8.55.0)(typescript@5.2.2): 750 | resolution: {integrity: sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==} 751 | engines: {node: ^16.0.0 || >=18.0.0} 752 | peerDependencies: 753 | eslint: ^7.0.0 || ^8.0.0 754 | typescript: '*' 755 | peerDependenciesMeta: 756 | typescript: 757 | optional: true 758 | dependencies: 759 | '@typescript-eslint/scope-manager': 6.9.1 760 | '@typescript-eslint/types': 6.9.1 761 | '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) 762 | '@typescript-eslint/visitor-keys': 6.9.1 763 | debug: 4.3.4 764 | eslint: 8.55.0 765 | typescript: 5.2.2 766 | transitivePeerDependencies: 767 | - supports-color 768 | dev: true 769 | 770 | /@typescript-eslint/scope-manager@6.9.1: 771 | resolution: {integrity: sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==} 772 | engines: {node: ^16.0.0 || >=18.0.0} 773 | dependencies: 774 | '@typescript-eslint/types': 6.9.1 775 | '@typescript-eslint/visitor-keys': 6.9.1 776 | dev: true 777 | 778 | /@typescript-eslint/type-utils@6.9.1(eslint@8.55.0)(typescript@5.2.2): 779 | resolution: {integrity: sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==} 780 | engines: {node: ^16.0.0 || >=18.0.0} 781 | peerDependencies: 782 | eslint: ^7.0.0 || ^8.0.0 783 | typescript: '*' 784 | peerDependenciesMeta: 785 | typescript: 786 | optional: true 787 | dependencies: 788 | '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) 789 | '@typescript-eslint/utils': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 790 | debug: 4.3.4 791 | eslint: 8.55.0 792 | ts-api-utils: 1.0.3(typescript@5.2.2) 793 | typescript: 5.2.2 794 | transitivePeerDependencies: 795 | - supports-color 796 | dev: true 797 | 798 | /@typescript-eslint/types@6.9.1: 799 | resolution: {integrity: sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==} 800 | engines: {node: ^16.0.0 || >=18.0.0} 801 | dev: true 802 | 803 | /@typescript-eslint/typescript-estree@6.9.1(typescript@5.2.2): 804 | resolution: {integrity: sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==} 805 | engines: {node: ^16.0.0 || >=18.0.0} 806 | peerDependencies: 807 | typescript: '*' 808 | peerDependenciesMeta: 809 | typescript: 810 | optional: true 811 | dependencies: 812 | '@typescript-eslint/types': 6.9.1 813 | '@typescript-eslint/visitor-keys': 6.9.1 814 | debug: 4.3.4 815 | globby: 11.1.0 816 | is-glob: 4.0.3 817 | semver: 7.5.4 818 | ts-api-utils: 1.0.3(typescript@5.2.2) 819 | typescript: 5.2.2 820 | transitivePeerDependencies: 821 | - supports-color 822 | dev: true 823 | 824 | /@typescript-eslint/utils@6.9.1(eslint@8.55.0)(typescript@5.2.2): 825 | resolution: {integrity: sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==} 826 | engines: {node: ^16.0.0 || >=18.0.0} 827 | peerDependencies: 828 | eslint: ^7.0.0 || ^8.0.0 829 | dependencies: 830 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) 831 | '@types/json-schema': 7.0.14 832 | '@types/semver': 7.5.4 833 | '@typescript-eslint/scope-manager': 6.9.1 834 | '@typescript-eslint/types': 6.9.1 835 | '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) 836 | eslint: 8.55.0 837 | semver: 7.5.4 838 | transitivePeerDependencies: 839 | - supports-color 840 | - typescript 841 | dev: true 842 | 843 | /@typescript-eslint/visitor-keys@6.9.1: 844 | resolution: {integrity: sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==} 845 | engines: {node: ^16.0.0 || >=18.0.0} 846 | dependencies: 847 | '@typescript-eslint/types': 6.9.1 848 | eslint-visitor-keys: 3.4.3 849 | dev: true 850 | 851 | /@ungap/structured-clone@1.2.0: 852 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 853 | dev: true 854 | 855 | /@vitest/expect@1.0.4: 856 | resolution: {integrity: sha512-/NRN9N88qjg3dkhmFcCBwhn/Ie4h064pY3iv7WLRsDJW7dXnEgeoa8W9zy7gIPluhz6CkgqiB3HmpIXgmEY5dQ==} 857 | dependencies: 858 | '@vitest/spy': 1.0.4 859 | '@vitest/utils': 1.0.4 860 | chai: 4.3.10 861 | dev: true 862 | 863 | /@vitest/runner@1.0.4: 864 | resolution: {integrity: sha512-rhOQ9FZTEkV41JWXozFM8YgOqaG9zA7QXbhg5gy6mFOVqh4PcupirIJ+wN7QjeJt8S8nJRYuZH1OjJjsbxAXTQ==} 865 | dependencies: 866 | '@vitest/utils': 1.0.4 867 | p-limit: 5.0.0 868 | pathe: 1.1.1 869 | dev: true 870 | 871 | /@vitest/snapshot@1.0.4: 872 | resolution: {integrity: sha512-vkfXUrNyNRA/Gzsp2lpyJxh94vU2OHT1amoD6WuvUAA12n32xeVZQ0KjjQIf8F6u7bcq2A2k969fMVxEsxeKYA==} 873 | dependencies: 874 | magic-string: 0.30.5 875 | pathe: 1.1.1 876 | pretty-format: 29.7.0 877 | dev: true 878 | 879 | /@vitest/spy@1.0.4: 880 | resolution: {integrity: sha512-9ojTFRL1AJVh0hvfzAQpm0QS6xIS+1HFIw94kl/1ucTfGCaj1LV/iuJU4Y6cdR03EzPDygxTHwE1JOm+5RCcvA==} 881 | dependencies: 882 | tinyspy: 2.2.0 883 | dev: true 884 | 885 | /@vitest/utils@1.0.4: 886 | resolution: {integrity: sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA==} 887 | dependencies: 888 | diff-sequences: 29.6.3 889 | loupe: 2.3.7 890 | pretty-format: 29.7.0 891 | dev: true 892 | 893 | /acorn-jsx@5.3.2(acorn@8.11.2): 894 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 895 | peerDependencies: 896 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 897 | dependencies: 898 | acorn: 8.11.2 899 | dev: true 900 | 901 | /acorn-walk@8.3.0: 902 | resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} 903 | engines: {node: '>=0.4.0'} 904 | dev: true 905 | 906 | /acorn@8.11.2: 907 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 908 | engines: {node: '>=0.4.0'} 909 | hasBin: true 910 | dev: true 911 | 912 | /ajv@6.12.6: 913 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 914 | dependencies: 915 | fast-deep-equal: 3.1.3 916 | fast-json-stable-stringify: 2.1.0 917 | json-schema-traverse: 0.4.1 918 | uri-js: 4.4.1 919 | dev: true 920 | 921 | /ansi-regex@5.0.1: 922 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 923 | engines: {node: '>=8'} 924 | dev: true 925 | 926 | /ansi-regex@6.0.1: 927 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 928 | engines: {node: '>=12'} 929 | dev: true 930 | 931 | /ansi-styles@3.2.1: 932 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 933 | engines: {node: '>=4'} 934 | dependencies: 935 | color-convert: 1.9.3 936 | dev: true 937 | 938 | /ansi-styles@4.3.0: 939 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 940 | engines: {node: '>=8'} 941 | dependencies: 942 | color-convert: 2.0.1 943 | dev: true 944 | 945 | /ansi-styles@5.2.0: 946 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 947 | engines: {node: '>=10'} 948 | dev: true 949 | 950 | /ansi-styles@6.2.1: 951 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 952 | engines: {node: '>=12'} 953 | dev: true 954 | 955 | /anymatch@3.1.3: 956 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 957 | engines: {node: '>= 8'} 958 | dependencies: 959 | normalize-path: 3.0.0 960 | picomatch: 2.3.1 961 | dev: true 962 | 963 | /are-docs-informative@0.0.2: 964 | resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} 965 | engines: {node: '>=14'} 966 | dev: true 967 | 968 | /argparse@2.0.1: 969 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 970 | dev: true 971 | 972 | /array-buffer-byte-length@1.0.0: 973 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 974 | dependencies: 975 | call-bind: 1.0.5 976 | is-array-buffer: 3.0.2 977 | dev: true 978 | 979 | /array-includes@3.1.7: 980 | resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} 981 | engines: {node: '>= 0.4'} 982 | dependencies: 983 | call-bind: 1.0.5 984 | define-properties: 1.2.1 985 | es-abstract: 1.22.3 986 | get-intrinsic: 1.2.2 987 | is-string: 1.0.7 988 | dev: true 989 | 990 | /array-union@2.1.0: 991 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 992 | engines: {node: '>=8'} 993 | dev: true 994 | 995 | /array.prototype.flat@1.3.2: 996 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 997 | engines: {node: '>= 0.4'} 998 | dependencies: 999 | call-bind: 1.0.5 1000 | define-properties: 1.2.1 1001 | es-abstract: 1.22.3 1002 | es-shim-unscopables: 1.0.2 1003 | dev: true 1004 | 1005 | /arraybuffer.prototype.slice@1.0.2: 1006 | resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} 1007 | engines: {node: '>= 0.4'} 1008 | dependencies: 1009 | array-buffer-byte-length: 1.0.0 1010 | call-bind: 1.0.5 1011 | define-properties: 1.2.1 1012 | es-abstract: 1.22.3 1013 | get-intrinsic: 1.2.2 1014 | is-array-buffer: 3.0.2 1015 | is-shared-array-buffer: 1.0.2 1016 | dev: true 1017 | 1018 | /assertion-error@1.1.0: 1019 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 1020 | dev: true 1021 | 1022 | /available-typed-arrays@1.0.5: 1023 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 1024 | engines: {node: '>= 0.4'} 1025 | dev: true 1026 | 1027 | /balanced-match@1.0.2: 1028 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1029 | dev: true 1030 | 1031 | /binary-extensions@2.2.0: 1032 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 1033 | engines: {node: '>=8'} 1034 | dev: true 1035 | 1036 | /boolbase@1.0.0: 1037 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 1038 | dev: true 1039 | 1040 | /brace-expansion@1.1.11: 1041 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1042 | dependencies: 1043 | balanced-match: 1.0.2 1044 | concat-map: 0.0.1 1045 | dev: true 1046 | 1047 | /brace-expansion@2.0.1: 1048 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 1049 | dependencies: 1050 | balanced-match: 1.0.2 1051 | dev: true 1052 | 1053 | /braces@3.0.2: 1054 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1055 | engines: {node: '>=8'} 1056 | dependencies: 1057 | fill-range: 7.0.1 1058 | dev: true 1059 | 1060 | /browserslist@4.22.1: 1061 | resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} 1062 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1063 | hasBin: true 1064 | dependencies: 1065 | caniuse-lite: 1.0.30001555 1066 | electron-to-chromium: 1.4.569 1067 | node-releases: 2.0.13 1068 | update-browserslist-db: 1.0.13(browserslist@4.22.1) 1069 | dev: true 1070 | 1071 | /builtin-modules@3.3.0: 1072 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 1073 | engines: {node: '>=6'} 1074 | dev: true 1075 | 1076 | /builtins@5.0.1: 1077 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} 1078 | dependencies: 1079 | semver: 7.5.4 1080 | dev: true 1081 | 1082 | /cac@6.7.14: 1083 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 1084 | engines: {node: '>=8'} 1085 | dev: true 1086 | 1087 | /call-bind@1.0.5: 1088 | resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} 1089 | dependencies: 1090 | function-bind: 1.1.2 1091 | get-intrinsic: 1.2.2 1092 | set-function-length: 1.1.1 1093 | dev: true 1094 | 1095 | /callsites@3.1.0: 1096 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1097 | engines: {node: '>=6'} 1098 | dev: true 1099 | 1100 | /camelcase@6.3.0: 1101 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 1102 | engines: {node: '>=10'} 1103 | dev: true 1104 | 1105 | /caniuse-api@3.0.0: 1106 | resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} 1107 | dependencies: 1108 | browserslist: 4.22.1 1109 | caniuse-lite: 1.0.30001555 1110 | lodash.memoize: 4.1.2 1111 | lodash.uniq: 4.5.0 1112 | dev: true 1113 | 1114 | /caniuse-lite@1.0.30001555: 1115 | resolution: {integrity: sha512-NzbUFKUnJ3DTcq6YyZB6+qqhfD112uR3uoEnkmfzm2wVzUNsFkU7AwBjKQ654Sp5cau0JxhFyRSn/tQZ+XfygA==} 1116 | dev: true 1117 | 1118 | /chai@4.3.10: 1119 | resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} 1120 | engines: {node: '>=4'} 1121 | dependencies: 1122 | assertion-error: 1.1.0 1123 | check-error: 1.0.3 1124 | deep-eql: 4.1.3 1125 | get-func-name: 2.0.2 1126 | loupe: 2.3.7 1127 | pathval: 1.1.1 1128 | type-detect: 4.0.8 1129 | dev: true 1130 | 1131 | /chalk@2.4.2: 1132 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1133 | engines: {node: '>=4'} 1134 | dependencies: 1135 | ansi-styles: 3.2.1 1136 | escape-string-regexp: 1.0.5 1137 | supports-color: 5.5.0 1138 | dev: true 1139 | 1140 | /chalk@4.1.2: 1141 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1142 | engines: {node: '>=10'} 1143 | dependencies: 1144 | ansi-styles: 4.3.0 1145 | supports-color: 7.2.0 1146 | dev: true 1147 | 1148 | /character-entities-legacy@1.1.4: 1149 | resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} 1150 | dev: true 1151 | 1152 | /character-entities@1.2.4: 1153 | resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} 1154 | dev: true 1155 | 1156 | /character-reference-invalid@1.1.4: 1157 | resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} 1158 | dev: true 1159 | 1160 | /check-error@1.0.3: 1161 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 1162 | dependencies: 1163 | get-func-name: 2.0.2 1164 | dev: true 1165 | 1166 | /chokidar@3.5.3: 1167 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1168 | engines: {node: '>= 8.10.0'} 1169 | dependencies: 1170 | anymatch: 3.1.3 1171 | braces: 3.0.2 1172 | glob-parent: 5.1.2 1173 | is-binary-path: 2.1.0 1174 | is-glob: 4.0.3 1175 | normalize-path: 3.0.0 1176 | readdirp: 3.6.0 1177 | optionalDependencies: 1178 | fsevents: 2.3.3 1179 | dev: true 1180 | 1181 | /ci-info@3.9.0: 1182 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 1183 | engines: {node: '>=8'} 1184 | dev: true 1185 | 1186 | /clean-regexp@1.0.0: 1187 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 1188 | engines: {node: '>=4'} 1189 | dependencies: 1190 | escape-string-regexp: 1.0.5 1191 | dev: true 1192 | 1193 | /cliui@8.0.1: 1194 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 1195 | engines: {node: '>=12'} 1196 | dependencies: 1197 | string-width: 4.2.3 1198 | strip-ansi: 6.0.1 1199 | wrap-ansi: 7.0.0 1200 | dev: true 1201 | 1202 | /code-block-writer@12.0.0: 1203 | resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} 1204 | dev: false 1205 | 1206 | /color-convert@1.9.3: 1207 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1208 | dependencies: 1209 | color-name: 1.1.3 1210 | 1211 | /color-convert@2.0.1: 1212 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1213 | engines: {node: '>=7.0.0'} 1214 | dependencies: 1215 | color-name: 1.1.4 1216 | dev: true 1217 | 1218 | /color-name@1.1.3: 1219 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1220 | 1221 | /color-name@1.1.4: 1222 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1223 | 1224 | /color-string@1.9.1: 1225 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 1226 | dependencies: 1227 | color-name: 1.1.4 1228 | simple-swizzle: 0.2.2 1229 | dev: false 1230 | 1231 | /color@3.2.1: 1232 | resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} 1233 | dependencies: 1234 | color-convert: 1.9.3 1235 | color-string: 1.9.1 1236 | dev: false 1237 | 1238 | /colord@2.9.3: 1239 | resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 1240 | dev: true 1241 | 1242 | /commander@7.2.0: 1243 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 1244 | engines: {node: '>= 10'} 1245 | dev: true 1246 | 1247 | /comment-parser@1.4.0: 1248 | resolution: {integrity: sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==} 1249 | engines: {node: '>= 12.0.0'} 1250 | dev: true 1251 | 1252 | /concat-map@0.0.1: 1253 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1254 | dev: true 1255 | 1256 | /cross-spawn@7.0.3: 1257 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1258 | engines: {node: '>= 8'} 1259 | dependencies: 1260 | path-key: 3.1.1 1261 | shebang-command: 2.0.0 1262 | which: 2.0.2 1263 | dev: true 1264 | 1265 | /crypto-random-string@4.0.0: 1266 | resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} 1267 | engines: {node: '>=12'} 1268 | dependencies: 1269 | type-fest: 1.4.0 1270 | dev: true 1271 | 1272 | /css-declaration-sorter@6.4.1(postcss@8.4.31): 1273 | resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} 1274 | engines: {node: ^10 || ^12 || >=14} 1275 | peerDependencies: 1276 | postcss: ^8.0.9 1277 | dependencies: 1278 | postcss: 8.4.31 1279 | dev: true 1280 | 1281 | /css-select@5.1.0: 1282 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} 1283 | dependencies: 1284 | boolbase: 1.0.0 1285 | css-what: 6.1.0 1286 | domhandler: 5.0.3 1287 | domutils: 3.1.0 1288 | nth-check: 2.1.1 1289 | dev: true 1290 | 1291 | /css-tree@2.2.1: 1292 | resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} 1293 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} 1294 | dependencies: 1295 | mdn-data: 2.0.28 1296 | source-map-js: 1.0.2 1297 | dev: true 1298 | 1299 | /css-tree@2.3.1: 1300 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} 1301 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 1302 | dependencies: 1303 | mdn-data: 2.0.30 1304 | source-map-js: 1.0.2 1305 | dev: true 1306 | 1307 | /css-what@6.1.0: 1308 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 1309 | engines: {node: '>= 6'} 1310 | dev: true 1311 | 1312 | /cssesc@3.0.0: 1313 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1314 | engines: {node: '>=4'} 1315 | hasBin: true 1316 | dev: true 1317 | 1318 | /cssnano-preset-default@6.0.1(postcss@8.4.31): 1319 | resolution: {integrity: sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==} 1320 | engines: {node: ^14 || ^16 || >=18.0} 1321 | peerDependencies: 1322 | postcss: ^8.2.15 1323 | dependencies: 1324 | css-declaration-sorter: 6.4.1(postcss@8.4.31) 1325 | cssnano-utils: 4.0.0(postcss@8.4.31) 1326 | postcss: 8.4.31 1327 | postcss-calc: 9.0.1(postcss@8.4.31) 1328 | postcss-colormin: 6.0.0(postcss@8.4.31) 1329 | postcss-convert-values: 6.0.0(postcss@8.4.31) 1330 | postcss-discard-comments: 6.0.0(postcss@8.4.31) 1331 | postcss-discard-duplicates: 6.0.0(postcss@8.4.31) 1332 | postcss-discard-empty: 6.0.0(postcss@8.4.31) 1333 | postcss-discard-overridden: 6.0.0(postcss@8.4.31) 1334 | postcss-merge-longhand: 6.0.0(postcss@8.4.31) 1335 | postcss-merge-rules: 6.0.1(postcss@8.4.31) 1336 | postcss-minify-font-values: 6.0.0(postcss@8.4.31) 1337 | postcss-minify-gradients: 6.0.0(postcss@8.4.31) 1338 | postcss-minify-params: 6.0.0(postcss@8.4.31) 1339 | postcss-minify-selectors: 6.0.0(postcss@8.4.31) 1340 | postcss-normalize-charset: 6.0.0(postcss@8.4.31) 1341 | postcss-normalize-display-values: 6.0.0(postcss@8.4.31) 1342 | postcss-normalize-positions: 6.0.0(postcss@8.4.31) 1343 | postcss-normalize-repeat-style: 6.0.0(postcss@8.4.31) 1344 | postcss-normalize-string: 6.0.0(postcss@8.4.31) 1345 | postcss-normalize-timing-functions: 6.0.0(postcss@8.4.31) 1346 | postcss-normalize-unicode: 6.0.0(postcss@8.4.31) 1347 | postcss-normalize-url: 6.0.0(postcss@8.4.31) 1348 | postcss-normalize-whitespace: 6.0.0(postcss@8.4.31) 1349 | postcss-ordered-values: 6.0.0(postcss@8.4.31) 1350 | postcss-reduce-initial: 6.0.0(postcss@8.4.31) 1351 | postcss-reduce-transforms: 6.0.0(postcss@8.4.31) 1352 | postcss-svgo: 6.0.0(postcss@8.4.31) 1353 | postcss-unique-selectors: 6.0.0(postcss@8.4.31) 1354 | dev: true 1355 | 1356 | /cssnano-utils@4.0.0(postcss@8.4.31): 1357 | resolution: {integrity: sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==} 1358 | engines: {node: ^14 || ^16 || >=18.0} 1359 | peerDependencies: 1360 | postcss: ^8.2.15 1361 | dependencies: 1362 | postcss: 8.4.31 1363 | dev: true 1364 | 1365 | /cssnano@6.0.1(postcss@8.4.31): 1366 | resolution: {integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==} 1367 | engines: {node: ^14 || ^16 || >=18.0} 1368 | peerDependencies: 1369 | postcss: ^8.2.15 1370 | dependencies: 1371 | cssnano-preset-default: 6.0.1(postcss@8.4.31) 1372 | lilconfig: 2.1.0 1373 | postcss: 8.4.31 1374 | dev: true 1375 | 1376 | /csso@5.0.5: 1377 | resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} 1378 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} 1379 | dependencies: 1380 | css-tree: 2.2.1 1381 | dev: true 1382 | 1383 | /debug@3.2.7: 1384 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1385 | peerDependencies: 1386 | supports-color: '*' 1387 | peerDependenciesMeta: 1388 | supports-color: 1389 | optional: true 1390 | dependencies: 1391 | ms: 2.1.2 1392 | dev: true 1393 | 1394 | /debug@4.3.4: 1395 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1396 | engines: {node: '>=6.0'} 1397 | peerDependencies: 1398 | supports-color: '*' 1399 | peerDependenciesMeta: 1400 | supports-color: 1401 | optional: true 1402 | dependencies: 1403 | ms: 2.1.2 1404 | dev: true 1405 | 1406 | /deep-eql@4.1.3: 1407 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 1408 | engines: {node: '>=6'} 1409 | dependencies: 1410 | type-detect: 4.0.8 1411 | dev: true 1412 | 1413 | /deep-is@0.1.4: 1414 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1415 | dev: true 1416 | 1417 | /define-data-property@1.1.1: 1418 | resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} 1419 | engines: {node: '>= 0.4'} 1420 | dependencies: 1421 | get-intrinsic: 1.2.2 1422 | gopd: 1.0.1 1423 | has-property-descriptors: 1.0.1 1424 | dev: true 1425 | 1426 | /define-properties@1.2.1: 1427 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 1428 | engines: {node: '>= 0.4'} 1429 | dependencies: 1430 | define-data-property: 1.1.1 1431 | has-property-descriptors: 1.0.1 1432 | object-keys: 1.1.1 1433 | dev: true 1434 | 1435 | /diff-sequences@29.6.3: 1436 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 1437 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1438 | dev: true 1439 | 1440 | /dir-glob@3.0.1: 1441 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1442 | engines: {node: '>=8'} 1443 | dependencies: 1444 | path-type: 4.0.0 1445 | dev: true 1446 | 1447 | /doctrine@2.1.0: 1448 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 1449 | engines: {node: '>=0.10.0'} 1450 | dependencies: 1451 | esutils: 2.0.3 1452 | dev: true 1453 | 1454 | /doctrine@3.0.0: 1455 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1456 | engines: {node: '>=6.0.0'} 1457 | dependencies: 1458 | esutils: 2.0.3 1459 | dev: true 1460 | 1461 | /dom-serializer@2.0.0: 1462 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 1463 | dependencies: 1464 | domelementtype: 2.3.0 1465 | domhandler: 5.0.3 1466 | entities: 4.5.0 1467 | dev: true 1468 | 1469 | /domelementtype@2.3.0: 1470 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 1471 | dev: true 1472 | 1473 | /domhandler@5.0.3: 1474 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 1475 | engines: {node: '>= 4'} 1476 | dependencies: 1477 | domelementtype: 2.3.0 1478 | dev: true 1479 | 1480 | /domutils@3.1.0: 1481 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} 1482 | dependencies: 1483 | dom-serializer: 2.0.0 1484 | domelementtype: 2.3.0 1485 | domhandler: 5.0.3 1486 | dev: true 1487 | 1488 | /eastasianwidth@0.2.0: 1489 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1490 | dev: true 1491 | 1492 | /electron-to-chromium@1.4.569: 1493 | resolution: {integrity: sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==} 1494 | dev: true 1495 | 1496 | /emoji-regex@8.0.0: 1497 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1498 | dev: true 1499 | 1500 | /emoji-regex@9.2.2: 1501 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1502 | dev: true 1503 | 1504 | /entities@4.5.0: 1505 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1506 | engines: {node: '>=0.12'} 1507 | dev: true 1508 | 1509 | /error-ex@1.3.2: 1510 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1511 | dependencies: 1512 | is-arrayish: 0.2.1 1513 | dev: true 1514 | 1515 | /es-abstract@1.22.3: 1516 | resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} 1517 | engines: {node: '>= 0.4'} 1518 | dependencies: 1519 | array-buffer-byte-length: 1.0.0 1520 | arraybuffer.prototype.slice: 1.0.2 1521 | available-typed-arrays: 1.0.5 1522 | call-bind: 1.0.5 1523 | es-set-tostringtag: 2.0.2 1524 | es-to-primitive: 1.2.1 1525 | function.prototype.name: 1.1.6 1526 | get-intrinsic: 1.2.2 1527 | get-symbol-description: 1.0.0 1528 | globalthis: 1.0.3 1529 | gopd: 1.0.1 1530 | has-property-descriptors: 1.0.1 1531 | has-proto: 1.0.1 1532 | has-symbols: 1.0.3 1533 | hasown: 2.0.0 1534 | internal-slot: 1.0.6 1535 | is-array-buffer: 3.0.2 1536 | is-callable: 1.2.7 1537 | is-negative-zero: 2.0.2 1538 | is-regex: 1.1.4 1539 | is-shared-array-buffer: 1.0.2 1540 | is-string: 1.0.7 1541 | is-typed-array: 1.1.12 1542 | is-weakref: 1.0.2 1543 | object-inspect: 1.13.1 1544 | object-keys: 1.1.1 1545 | object.assign: 4.1.4 1546 | regexp.prototype.flags: 1.5.1 1547 | safe-array-concat: 1.0.1 1548 | safe-regex-test: 1.0.0 1549 | string.prototype.trim: 1.2.8 1550 | string.prototype.trimend: 1.0.7 1551 | string.prototype.trimstart: 1.0.7 1552 | typed-array-buffer: 1.0.0 1553 | typed-array-byte-length: 1.0.0 1554 | typed-array-byte-offset: 1.0.0 1555 | typed-array-length: 1.0.4 1556 | unbox-primitive: 1.0.2 1557 | which-typed-array: 1.1.13 1558 | dev: true 1559 | 1560 | /es-set-tostringtag@2.0.2: 1561 | resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} 1562 | engines: {node: '>= 0.4'} 1563 | dependencies: 1564 | get-intrinsic: 1.2.2 1565 | has-tostringtag: 1.0.0 1566 | hasown: 2.0.0 1567 | dev: true 1568 | 1569 | /es-shim-unscopables@1.0.2: 1570 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 1571 | dependencies: 1572 | hasown: 2.0.0 1573 | dev: true 1574 | 1575 | /es-to-primitive@1.2.1: 1576 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1577 | engines: {node: '>= 0.4'} 1578 | dependencies: 1579 | is-callable: 1.2.7 1580 | is-date-object: 1.0.5 1581 | is-symbol: 1.0.4 1582 | dev: true 1583 | 1584 | /esbuild@0.19.5: 1585 | resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==} 1586 | engines: {node: '>=12'} 1587 | hasBin: true 1588 | requiresBuild: true 1589 | optionalDependencies: 1590 | '@esbuild/android-arm': 0.19.5 1591 | '@esbuild/android-arm64': 0.19.5 1592 | '@esbuild/android-x64': 0.19.5 1593 | '@esbuild/darwin-arm64': 0.19.5 1594 | '@esbuild/darwin-x64': 0.19.5 1595 | '@esbuild/freebsd-arm64': 0.19.5 1596 | '@esbuild/freebsd-x64': 0.19.5 1597 | '@esbuild/linux-arm': 0.19.5 1598 | '@esbuild/linux-arm64': 0.19.5 1599 | '@esbuild/linux-ia32': 0.19.5 1600 | '@esbuild/linux-loong64': 0.19.5 1601 | '@esbuild/linux-mips64el': 0.19.5 1602 | '@esbuild/linux-ppc64': 0.19.5 1603 | '@esbuild/linux-riscv64': 0.19.5 1604 | '@esbuild/linux-s390x': 0.19.5 1605 | '@esbuild/linux-x64': 0.19.5 1606 | '@esbuild/netbsd-x64': 0.19.5 1607 | '@esbuild/openbsd-x64': 0.19.5 1608 | '@esbuild/sunos-x64': 0.19.5 1609 | '@esbuild/win32-arm64': 0.19.5 1610 | '@esbuild/win32-ia32': 0.19.5 1611 | '@esbuild/win32-x64': 0.19.5 1612 | dev: true 1613 | 1614 | /escalade@3.1.1: 1615 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1616 | engines: {node: '>=6'} 1617 | dev: true 1618 | 1619 | /escape-string-regexp@1.0.5: 1620 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1621 | engines: {node: '>=0.8.0'} 1622 | dev: true 1623 | 1624 | /escape-string-regexp@4.0.0: 1625 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1626 | engines: {node: '>=10'} 1627 | dev: true 1628 | 1629 | /escape-string-regexp@5.0.0: 1630 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 1631 | engines: {node: '>=12'} 1632 | dev: true 1633 | 1634 | /eslint-compat-utils@0.1.2(eslint@8.55.0): 1635 | resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} 1636 | engines: {node: '>=12'} 1637 | peerDependencies: 1638 | eslint: '>=6.0.0' 1639 | dependencies: 1640 | eslint: 8.55.0 1641 | dev: true 1642 | 1643 | /eslint-config-flat-gitignore@0.1.1: 1644 | resolution: {integrity: sha512-ysq0QpN63+uaxE67U0g0HeCweIpv8Ztp7yvm0nYiM2TBalRIG6KQLO5J6lAz2gkA8KVis/QsJppe+BR5VigtWQ==} 1645 | dependencies: 1646 | parse-gitignore: 2.0.0 1647 | dev: true 1648 | 1649 | /eslint-import-resolver-node@0.3.9: 1650 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 1651 | dependencies: 1652 | debug: 3.2.7 1653 | is-core-module: 2.13.1 1654 | resolve: 1.22.8 1655 | transitivePeerDependencies: 1656 | - supports-color 1657 | dev: true 1658 | 1659 | /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.1)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): 1660 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 1661 | engines: {node: '>=4'} 1662 | peerDependencies: 1663 | '@typescript-eslint/parser': '*' 1664 | eslint: '*' 1665 | eslint-import-resolver-node: '*' 1666 | eslint-import-resolver-typescript: '*' 1667 | eslint-import-resolver-webpack: '*' 1668 | peerDependenciesMeta: 1669 | '@typescript-eslint/parser': 1670 | optional: true 1671 | eslint: 1672 | optional: true 1673 | eslint-import-resolver-node: 1674 | optional: true 1675 | eslint-import-resolver-typescript: 1676 | optional: true 1677 | eslint-import-resolver-webpack: 1678 | optional: true 1679 | dependencies: 1680 | '@typescript-eslint/parser': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 1681 | debug: 3.2.7 1682 | eslint: 8.55.0 1683 | eslint-import-resolver-node: 0.3.9 1684 | transitivePeerDependencies: 1685 | - supports-color 1686 | dev: true 1687 | 1688 | /eslint-plugin-antfu@1.0.2(eslint@8.55.0): 1689 | resolution: {integrity: sha512-elv/LVq+4h9oi7xza9EK93akujmTAGnL3e7aMVVWELjvIJuHcKj0GT6HjdgPDtuBdMnyyKN7fVKIpSNSqZnaIA==} 1690 | peerDependencies: 1691 | eslint: '*' 1692 | dependencies: 1693 | eslint: 8.55.0 1694 | dev: true 1695 | 1696 | /eslint-plugin-es-x@7.3.0(eslint@8.55.0): 1697 | resolution: {integrity: sha512-W9zIs+k00I/I13+Bdkl/zG1MEO07G97XjUSQuH117w620SJ6bHtLUmoMvkGA2oYnI/gNdr+G7BONLyYnFaLLEQ==} 1698 | engines: {node: ^14.18.0 || >=16.0.0} 1699 | peerDependencies: 1700 | eslint: '>=8' 1701 | dependencies: 1702 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) 1703 | '@eslint-community/regexpp': 4.10.0 1704 | eslint: 8.55.0 1705 | dev: true 1706 | 1707 | /eslint-plugin-eslint-comments@3.2.0(eslint@8.55.0): 1708 | resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} 1709 | engines: {node: '>=6.5.0'} 1710 | peerDependencies: 1711 | eslint: '>=4.19.1' 1712 | dependencies: 1713 | escape-string-regexp: 1.0.5 1714 | eslint: 8.55.0 1715 | ignore: 5.2.4 1716 | dev: true 1717 | 1718 | /eslint-plugin-i@2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.55.0): 1719 | resolution: {integrity: sha512-slGeTS3GQzx9267wLJnNYNO8X9EHGsc75AKIAFvnvMYEcTJKotPKL1Ru5PIGVHIVet+2DsugePWp8Oxpx8G22w==} 1720 | engines: {node: '>=12'} 1721 | peerDependencies: 1722 | eslint: ^7.2.0 || ^8 1723 | dependencies: 1724 | debug: 3.2.7 1725 | doctrine: 2.1.0 1726 | eslint: 8.55.0 1727 | eslint-import-resolver-node: 0.3.9 1728 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.1)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) 1729 | get-tsconfig: 4.7.2 1730 | is-glob: 4.0.3 1731 | minimatch: 3.1.2 1732 | resolve: 1.22.8 1733 | semver: 7.5.4 1734 | transitivePeerDependencies: 1735 | - '@typescript-eslint/parser' 1736 | - eslint-import-resolver-typescript 1737 | - eslint-import-resolver-webpack 1738 | - supports-color 1739 | dev: true 1740 | 1741 | /eslint-plugin-jsdoc@46.8.2(eslint@8.55.0): 1742 | resolution: {integrity: sha512-5TSnD018f3tUJNne4s4gDWQflbsgOycIKEUBoCLn6XtBMgNHxQFmV8vVxUtiPxAQq8lrX85OaSG/2gnctxw9uQ==} 1743 | engines: {node: '>=16'} 1744 | peerDependencies: 1745 | eslint: ^7.0.0 || ^8.0.0 1746 | dependencies: 1747 | '@es-joy/jsdoccomment': 0.40.1 1748 | are-docs-informative: 0.0.2 1749 | comment-parser: 1.4.0 1750 | debug: 4.3.4 1751 | escape-string-regexp: 4.0.0 1752 | eslint: 8.55.0 1753 | esquery: 1.5.0 1754 | is-builtin-module: 3.2.1 1755 | semver: 7.5.4 1756 | spdx-expression-parse: 3.0.1 1757 | transitivePeerDependencies: 1758 | - supports-color 1759 | dev: true 1760 | 1761 | /eslint-plugin-jsonc@2.10.0(eslint@8.55.0): 1762 | resolution: {integrity: sha512-9d//o6Jyh4s1RxC9fNSt1+MMaFN2ruFdXPG9XZcb/mR2KkfjADYiNL/hbU6W0Cyxfg3tS/XSFuhl5LgtMD8hmw==} 1763 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1764 | peerDependencies: 1765 | eslint: '>=6.0.0' 1766 | dependencies: 1767 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) 1768 | eslint: 8.55.0 1769 | eslint-compat-utils: 0.1.2(eslint@8.55.0) 1770 | jsonc-eslint-parser: 2.4.0 1771 | natural-compare: 1.4.0 1772 | dev: true 1773 | 1774 | /eslint-plugin-markdown@3.0.1(eslint@8.55.0): 1775 | resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} 1776 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1777 | peerDependencies: 1778 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1779 | dependencies: 1780 | eslint: 8.55.0 1781 | mdast-util-from-markdown: 0.8.5 1782 | transitivePeerDependencies: 1783 | - supports-color 1784 | dev: true 1785 | 1786 | /eslint-plugin-n@16.2.0(eslint@8.55.0): 1787 | resolution: {integrity: sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g==} 1788 | engines: {node: '>=16.0.0'} 1789 | peerDependencies: 1790 | eslint: '>=7.0.0' 1791 | dependencies: 1792 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) 1793 | builtins: 5.0.1 1794 | eslint: 8.55.0 1795 | eslint-plugin-es-x: 7.3.0(eslint@8.55.0) 1796 | get-tsconfig: 4.7.2 1797 | ignore: 5.2.4 1798 | is-core-module: 2.13.1 1799 | minimatch: 3.1.2 1800 | resolve: 1.22.8 1801 | semver: 7.5.4 1802 | dev: true 1803 | 1804 | /eslint-plugin-no-only-tests@3.1.0: 1805 | resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} 1806 | engines: {node: '>=5.0.0'} 1807 | dev: true 1808 | 1809 | /eslint-plugin-perfectionist@2.2.0(eslint@8.55.0)(typescript@5.2.2)(vue-eslint-parser@9.3.2): 1810 | resolution: {integrity: sha512-/nG2Uurd6AY7CI6zlgjHPOoiPY8B7EYMUWdNb5w+EzyauYiQjjD5lQwAI1FlkBbCCFFZw/CdZIPQhXumYoiyaw==} 1811 | peerDependencies: 1812 | astro-eslint-parser: ^0.16.0 1813 | eslint: '>=8.0.0' 1814 | svelte: '>=3.0.0' 1815 | svelte-eslint-parser: ^0.33.0 1816 | vue-eslint-parser: '>=9.0.0' 1817 | peerDependenciesMeta: 1818 | astro-eslint-parser: 1819 | optional: true 1820 | svelte: 1821 | optional: true 1822 | svelte-eslint-parser: 1823 | optional: true 1824 | vue-eslint-parser: 1825 | optional: true 1826 | dependencies: 1827 | '@typescript-eslint/utils': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 1828 | eslint: 8.55.0 1829 | minimatch: 9.0.3 1830 | natural-compare-lite: 1.4.0 1831 | vue-eslint-parser: 9.3.2(eslint@8.55.0) 1832 | transitivePeerDependencies: 1833 | - supports-color 1834 | - typescript 1835 | dev: true 1836 | 1837 | /eslint-plugin-unicorn@49.0.0(eslint@8.55.0): 1838 | resolution: {integrity: sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==} 1839 | engines: {node: '>=16'} 1840 | peerDependencies: 1841 | eslint: '>=8.52.0' 1842 | dependencies: 1843 | '@babel/helper-validator-identifier': 7.22.20 1844 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) 1845 | ci-info: 3.9.0 1846 | clean-regexp: 1.0.0 1847 | eslint: 8.55.0 1848 | esquery: 1.5.0 1849 | indent-string: 4.0.0 1850 | is-builtin-module: 3.2.1 1851 | jsesc: 3.0.2 1852 | pluralize: 8.0.0 1853 | read-pkg-up: 7.0.1 1854 | regexp-tree: 0.1.27 1855 | regjsparser: 0.10.0 1856 | semver: 7.5.4 1857 | strip-indent: 3.0.0 1858 | dev: true 1859 | 1860 | /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.9.1)(eslint@8.55.0): 1861 | resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} 1862 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1863 | peerDependencies: 1864 | '@typescript-eslint/eslint-plugin': ^6.0.0 1865 | eslint: ^8.0.0 1866 | peerDependenciesMeta: 1867 | '@typescript-eslint/eslint-plugin': 1868 | optional: true 1869 | dependencies: 1870 | '@typescript-eslint/eslint-plugin': 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.2.2) 1871 | eslint: 8.55.0 1872 | eslint-rule-composer: 0.3.0 1873 | dev: true 1874 | 1875 | /eslint-plugin-vitest@0.3.9(@typescript-eslint/eslint-plugin@6.9.1)(eslint@8.55.0)(typescript@5.2.2)(vitest@1.0.4): 1876 | resolution: {integrity: sha512-ZGrz8dWFlotM5dwrsMLP4VcY5MizwKNV4JTnY0VKdnuCZ+qeEUMHf1qd8kRGQA3tqLvXcV929wt2ANkduq2Pgw==} 1877 | engines: {node: 14.x || >= 16} 1878 | peerDependencies: 1879 | '@typescript-eslint/eslint-plugin': '*' 1880 | eslint: '>=8.0.0' 1881 | vitest: '*' 1882 | peerDependenciesMeta: 1883 | '@typescript-eslint/eslint-plugin': 1884 | optional: true 1885 | vitest: 1886 | optional: true 1887 | dependencies: 1888 | '@typescript-eslint/eslint-plugin': 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.2.2) 1889 | '@typescript-eslint/utils': 6.9.1(eslint@8.55.0)(typescript@5.2.2) 1890 | eslint: 8.55.0 1891 | vitest: 1.0.4 1892 | transitivePeerDependencies: 1893 | - supports-color 1894 | - typescript 1895 | dev: true 1896 | 1897 | /eslint-plugin-vue@9.18.1(eslint@8.55.0): 1898 | resolution: {integrity: sha512-7hZFlrEgg9NIzuVik2I9xSnJA5RsmOfueYgsUGUokEDLJ1LHtxO0Pl4duje1BriZ/jDWb+44tcIlC3yi0tdlZg==} 1899 | engines: {node: ^14.17.0 || >=16.0.0} 1900 | peerDependencies: 1901 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 1902 | dependencies: 1903 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) 1904 | eslint: 8.55.0 1905 | natural-compare: 1.4.0 1906 | nth-check: 2.1.1 1907 | postcss-selector-parser: 6.0.13 1908 | semver: 7.5.4 1909 | vue-eslint-parser: 9.3.2(eslint@8.55.0) 1910 | xml-name-validator: 4.0.0 1911 | transitivePeerDependencies: 1912 | - supports-color 1913 | dev: true 1914 | 1915 | /eslint-plugin-yml@1.10.0(eslint@8.55.0): 1916 | resolution: {integrity: sha512-53SUwuNDna97lVk38hL/5++WXDuugPM9SUQ1T645R0EHMRCdBIIxGye/oOX2qO3FQ7aImxaUZJU/ju+NMUBrLQ==} 1917 | engines: {node: ^14.17.0 || >=16.0.0} 1918 | peerDependencies: 1919 | eslint: '>=6.0.0' 1920 | dependencies: 1921 | debug: 4.3.4 1922 | eslint: 8.55.0 1923 | eslint-compat-utils: 0.1.2(eslint@8.55.0) 1924 | lodash: 4.17.21 1925 | natural-compare: 1.4.0 1926 | yaml-eslint-parser: 1.2.2 1927 | transitivePeerDependencies: 1928 | - supports-color 1929 | dev: true 1930 | 1931 | /eslint-rule-composer@0.3.0: 1932 | resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} 1933 | engines: {node: '>=4.0.0'} 1934 | dev: true 1935 | 1936 | /eslint-scope@7.2.2: 1937 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1938 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1939 | dependencies: 1940 | esrecurse: 4.3.0 1941 | estraverse: 5.3.0 1942 | dev: true 1943 | 1944 | /eslint-visitor-keys@3.4.3: 1945 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1946 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1947 | dev: true 1948 | 1949 | /eslint@8.55.0: 1950 | resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} 1951 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1952 | hasBin: true 1953 | dependencies: 1954 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) 1955 | '@eslint-community/regexpp': 4.10.0 1956 | '@eslint/eslintrc': 2.1.4 1957 | '@eslint/js': 8.55.0 1958 | '@humanwhocodes/config-array': 0.11.13 1959 | '@humanwhocodes/module-importer': 1.0.1 1960 | '@nodelib/fs.walk': 1.2.8 1961 | '@ungap/structured-clone': 1.2.0 1962 | ajv: 6.12.6 1963 | chalk: 4.1.2 1964 | cross-spawn: 7.0.3 1965 | debug: 4.3.4 1966 | doctrine: 3.0.0 1967 | escape-string-regexp: 4.0.0 1968 | eslint-scope: 7.2.2 1969 | eslint-visitor-keys: 3.4.3 1970 | espree: 9.6.1 1971 | esquery: 1.5.0 1972 | esutils: 2.0.3 1973 | fast-deep-equal: 3.1.3 1974 | file-entry-cache: 6.0.1 1975 | find-up: 5.0.0 1976 | glob-parent: 6.0.2 1977 | globals: 13.23.0 1978 | graphemer: 1.4.0 1979 | ignore: 5.2.4 1980 | imurmurhash: 0.1.4 1981 | is-glob: 4.0.3 1982 | is-path-inside: 3.0.3 1983 | js-yaml: 4.1.0 1984 | json-stable-stringify-without-jsonify: 1.0.1 1985 | levn: 0.4.1 1986 | lodash.merge: 4.6.2 1987 | minimatch: 3.1.2 1988 | natural-compare: 1.4.0 1989 | optionator: 0.9.3 1990 | strip-ansi: 6.0.1 1991 | text-table: 0.2.0 1992 | transitivePeerDependencies: 1993 | - supports-color 1994 | dev: true 1995 | 1996 | /espree@9.6.1: 1997 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1998 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1999 | dependencies: 2000 | acorn: 8.11.2 2001 | acorn-jsx: 5.3.2(acorn@8.11.2) 2002 | eslint-visitor-keys: 3.4.3 2003 | dev: true 2004 | 2005 | /esquery@1.5.0: 2006 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 2007 | engines: {node: '>=0.10'} 2008 | dependencies: 2009 | estraverse: 5.3.0 2010 | dev: true 2011 | 2012 | /esrecurse@4.3.0: 2013 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 2014 | engines: {node: '>=4.0'} 2015 | dependencies: 2016 | estraverse: 5.3.0 2017 | dev: true 2018 | 2019 | /estraverse@5.3.0: 2020 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 2021 | engines: {node: '>=4.0'} 2022 | dev: true 2023 | 2024 | /esutils@2.0.3: 2025 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 2026 | engines: {node: '>=0.10.0'} 2027 | dev: true 2028 | 2029 | /execa@8.0.1: 2030 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 2031 | engines: {node: '>=16.17'} 2032 | dependencies: 2033 | cross-spawn: 7.0.3 2034 | get-stream: 8.0.1 2035 | human-signals: 5.0.0 2036 | is-stream: 3.0.0 2037 | merge-stream: 2.0.0 2038 | npm-run-path: 5.1.0 2039 | onetime: 6.0.0 2040 | signal-exit: 4.1.0 2041 | strip-final-newline: 3.0.0 2042 | dev: true 2043 | 2044 | /fast-deep-equal@3.1.3: 2045 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 2046 | dev: true 2047 | 2048 | /fast-glob@3.3.1: 2049 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 2050 | engines: {node: '>=8.6.0'} 2051 | dependencies: 2052 | '@nodelib/fs.stat': 2.0.5 2053 | '@nodelib/fs.walk': 1.2.8 2054 | glob-parent: 5.1.2 2055 | merge2: 1.4.1 2056 | micromatch: 4.0.5 2057 | dev: true 2058 | 2059 | /fast-json-stable-stringify@2.1.0: 2060 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 2061 | dev: true 2062 | 2063 | /fast-levenshtein@2.0.6: 2064 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 2065 | dev: true 2066 | 2067 | /fastq@1.15.0: 2068 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 2069 | dependencies: 2070 | reusify: 1.0.4 2071 | dev: true 2072 | 2073 | /figx@0.1.3: 2074 | resolution: {integrity: sha512-SB0I6W9GcZcd8qI+NaSGPLefcGWrinWndygl8cPbmBy0nmM0hUrjI/644QnlAxLunW8zQv9/l2BQ/Mz2P+LCRg==} 2075 | dependencies: 2076 | color: 3.2.1 2077 | dev: false 2078 | 2079 | /file-entry-cache@6.0.1: 2080 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 2081 | engines: {node: ^10.12.0 || >=12.0.0} 2082 | dependencies: 2083 | flat-cache: 3.1.1 2084 | dev: true 2085 | 2086 | /fill-range@7.0.1: 2087 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 2088 | engines: {node: '>=8'} 2089 | dependencies: 2090 | to-regex-range: 5.0.1 2091 | dev: true 2092 | 2093 | /find-up@4.1.0: 2094 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 2095 | engines: {node: '>=8'} 2096 | dependencies: 2097 | locate-path: 5.0.0 2098 | path-exists: 4.0.0 2099 | dev: true 2100 | 2101 | /find-up@5.0.0: 2102 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 2103 | engines: {node: '>=10'} 2104 | dependencies: 2105 | locate-path: 6.0.0 2106 | path-exists: 4.0.0 2107 | dev: true 2108 | 2109 | /find-up@6.3.0: 2110 | resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} 2111 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2112 | dependencies: 2113 | locate-path: 7.2.0 2114 | path-exists: 5.0.0 2115 | dev: true 2116 | 2117 | /flat-cache@3.1.1: 2118 | resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} 2119 | engines: {node: '>=12.0.0'} 2120 | dependencies: 2121 | flatted: 3.2.9 2122 | keyv: 4.5.4 2123 | rimraf: 3.0.2 2124 | dev: true 2125 | 2126 | /flatted@3.2.9: 2127 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 2128 | dev: true 2129 | 2130 | /for-each@0.3.3: 2131 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 2132 | dependencies: 2133 | is-callable: 1.2.7 2134 | dev: true 2135 | 2136 | /foreground-child@3.1.1: 2137 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 2138 | engines: {node: '>=14'} 2139 | dependencies: 2140 | cross-spawn: 7.0.3 2141 | signal-exit: 4.1.0 2142 | dev: true 2143 | 2144 | /fs.realpath@1.0.0: 2145 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 2146 | dev: true 2147 | 2148 | /fsevents@2.3.3: 2149 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 2150 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2151 | os: [darwin] 2152 | requiresBuild: true 2153 | dev: true 2154 | optional: true 2155 | 2156 | /function-bind@1.1.2: 2157 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 2158 | dev: true 2159 | 2160 | /function.prototype.name@1.1.6: 2161 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 2162 | engines: {node: '>= 0.4'} 2163 | dependencies: 2164 | call-bind: 1.0.5 2165 | define-properties: 1.2.1 2166 | es-abstract: 1.22.3 2167 | functions-have-names: 1.2.3 2168 | dev: true 2169 | 2170 | /functions-have-names@1.2.3: 2171 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 2172 | dev: true 2173 | 2174 | /generic-names@4.0.0: 2175 | resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} 2176 | dependencies: 2177 | loader-utils: 3.2.1 2178 | dev: true 2179 | 2180 | /get-caller-file@2.0.5: 2181 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 2182 | engines: {node: 6.* || 8.* || >= 10.*} 2183 | dev: true 2184 | 2185 | /get-func-name@2.0.2: 2186 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 2187 | dev: true 2188 | 2189 | /get-intrinsic@1.2.2: 2190 | resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} 2191 | dependencies: 2192 | function-bind: 1.1.2 2193 | has-proto: 1.0.1 2194 | has-symbols: 1.0.3 2195 | hasown: 2.0.0 2196 | dev: true 2197 | 2198 | /get-stream@8.0.1: 2199 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 2200 | engines: {node: '>=16'} 2201 | dev: true 2202 | 2203 | /get-symbol-description@1.0.0: 2204 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 2205 | engines: {node: '>= 0.4'} 2206 | dependencies: 2207 | call-bind: 1.0.5 2208 | get-intrinsic: 1.2.2 2209 | dev: true 2210 | 2211 | /get-tsconfig@4.7.2: 2212 | resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} 2213 | dependencies: 2214 | resolve-pkg-maps: 1.0.0 2215 | dev: true 2216 | 2217 | /glob-parent@5.1.2: 2218 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 2219 | engines: {node: '>= 6'} 2220 | dependencies: 2221 | is-glob: 4.0.3 2222 | dev: true 2223 | 2224 | /glob-parent@6.0.2: 2225 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 2226 | engines: {node: '>=10.13.0'} 2227 | dependencies: 2228 | is-glob: 4.0.3 2229 | dev: true 2230 | 2231 | /glob@10.3.10: 2232 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} 2233 | engines: {node: '>=16 || 14 >=14.17'} 2234 | hasBin: true 2235 | dependencies: 2236 | foreground-child: 3.1.1 2237 | jackspeak: 2.3.6 2238 | minimatch: 9.0.3 2239 | minipass: 7.0.4 2240 | path-scurry: 1.10.1 2241 | dev: true 2242 | 2243 | /glob@7.2.3: 2244 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 2245 | dependencies: 2246 | fs.realpath: 1.0.0 2247 | inflight: 1.0.6 2248 | inherits: 2.0.4 2249 | minimatch: 3.1.2 2250 | once: 1.4.0 2251 | path-is-absolute: 1.0.1 2252 | dev: true 2253 | 2254 | /globals@13.23.0: 2255 | resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} 2256 | engines: {node: '>=8'} 2257 | dependencies: 2258 | type-fest: 0.20.2 2259 | dev: true 2260 | 2261 | /globalthis@1.0.3: 2262 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 2263 | engines: {node: '>= 0.4'} 2264 | dependencies: 2265 | define-properties: 1.2.1 2266 | dev: true 2267 | 2268 | /globby@11.1.0: 2269 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 2270 | engines: {node: '>=10'} 2271 | dependencies: 2272 | array-union: 2.1.0 2273 | dir-glob: 3.0.1 2274 | fast-glob: 3.3.1 2275 | ignore: 5.2.4 2276 | merge2: 1.4.1 2277 | slash: 3.0.0 2278 | dev: true 2279 | 2280 | /globby@13.2.2: 2281 | resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} 2282 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2283 | dependencies: 2284 | dir-glob: 3.0.1 2285 | fast-glob: 3.3.1 2286 | ignore: 5.2.4 2287 | merge2: 1.4.1 2288 | slash: 4.0.0 2289 | dev: true 2290 | 2291 | /gopd@1.0.1: 2292 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 2293 | dependencies: 2294 | get-intrinsic: 1.2.2 2295 | dev: true 2296 | 2297 | /graceful-fs@4.2.11: 2298 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 2299 | dev: true 2300 | 2301 | /graphemer@1.4.0: 2302 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 2303 | dev: true 2304 | 2305 | /has-bigints@1.0.2: 2306 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 2307 | dev: true 2308 | 2309 | /has-flag@3.0.0: 2310 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 2311 | engines: {node: '>=4'} 2312 | dev: true 2313 | 2314 | /has-flag@4.0.0: 2315 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 2316 | engines: {node: '>=8'} 2317 | dev: true 2318 | 2319 | /has-property-descriptors@1.0.1: 2320 | resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} 2321 | dependencies: 2322 | get-intrinsic: 1.2.2 2323 | dev: true 2324 | 2325 | /has-proto@1.0.1: 2326 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 2327 | engines: {node: '>= 0.4'} 2328 | dev: true 2329 | 2330 | /has-symbols@1.0.3: 2331 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 2332 | engines: {node: '>= 0.4'} 2333 | dev: true 2334 | 2335 | /has-tostringtag@1.0.0: 2336 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 2337 | engines: {node: '>= 0.4'} 2338 | dependencies: 2339 | has-symbols: 1.0.3 2340 | dev: true 2341 | 2342 | /hasown@2.0.0: 2343 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 2344 | engines: {node: '>= 0.4'} 2345 | dependencies: 2346 | function-bind: 1.1.2 2347 | dev: true 2348 | 2349 | /hex-rgb@5.0.0: 2350 | resolution: {integrity: sha512-NQO+lgVUCtHxZ792FodgW0zflK+ozS9X9dwGp9XvvmPlH7pyxd588cn24TD3rmPm/N0AIRXF10Otah8yKqGw4w==} 2351 | engines: {node: '>=12'} 2352 | 2353 | /hosted-git-info@2.8.9: 2354 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 2355 | dev: true 2356 | 2357 | /human-signals@5.0.0: 2358 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 2359 | engines: {node: '>=16.17.0'} 2360 | dev: true 2361 | 2362 | /icss-replace-symbols@1.1.0: 2363 | resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} 2364 | dev: true 2365 | 2366 | /icss-utils@5.1.0(postcss@8.4.31): 2367 | resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} 2368 | engines: {node: ^10 || ^12 || >= 14} 2369 | peerDependencies: 2370 | postcss: ^8.1.0 2371 | dependencies: 2372 | postcss: 8.4.31 2373 | dev: true 2374 | 2375 | /ignore@5.2.4: 2376 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 2377 | engines: {node: '>= 4'} 2378 | dev: true 2379 | 2380 | /import-fresh@3.3.0: 2381 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 2382 | engines: {node: '>=6'} 2383 | dependencies: 2384 | parent-module: 1.0.1 2385 | resolve-from: 4.0.0 2386 | dev: true 2387 | 2388 | /imurmurhash@0.1.4: 2389 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 2390 | engines: {node: '>=0.8.19'} 2391 | dev: true 2392 | 2393 | /indent-string@4.0.0: 2394 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 2395 | engines: {node: '>=8'} 2396 | dev: true 2397 | 2398 | /indent-string@5.0.0: 2399 | resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} 2400 | engines: {node: '>=12'} 2401 | dev: true 2402 | 2403 | /inflight@1.0.6: 2404 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 2405 | dependencies: 2406 | once: 1.4.0 2407 | wrappy: 1.0.2 2408 | dev: true 2409 | 2410 | /inherits@2.0.4: 2411 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2412 | dev: true 2413 | 2414 | /internal-slot@1.0.6: 2415 | resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} 2416 | engines: {node: '>= 0.4'} 2417 | dependencies: 2418 | get-intrinsic: 1.2.2 2419 | hasown: 2.0.0 2420 | side-channel: 1.0.4 2421 | dev: true 2422 | 2423 | /is-alphabetical@1.0.4: 2424 | resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} 2425 | dev: true 2426 | 2427 | /is-alphanumerical@1.0.4: 2428 | resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} 2429 | dependencies: 2430 | is-alphabetical: 1.0.4 2431 | is-decimal: 1.0.4 2432 | dev: true 2433 | 2434 | /is-array-buffer@3.0.2: 2435 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 2436 | dependencies: 2437 | call-bind: 1.0.5 2438 | get-intrinsic: 1.2.2 2439 | is-typed-array: 1.1.12 2440 | dev: true 2441 | 2442 | /is-arrayish@0.2.1: 2443 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 2444 | dev: true 2445 | 2446 | /is-arrayish@0.3.2: 2447 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 2448 | dev: false 2449 | 2450 | /is-bigint@1.0.4: 2451 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 2452 | dependencies: 2453 | has-bigints: 1.0.2 2454 | dev: true 2455 | 2456 | /is-binary-path@2.1.0: 2457 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 2458 | engines: {node: '>=8'} 2459 | dependencies: 2460 | binary-extensions: 2.2.0 2461 | dev: true 2462 | 2463 | /is-boolean-object@1.1.2: 2464 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 2465 | engines: {node: '>= 0.4'} 2466 | dependencies: 2467 | call-bind: 1.0.5 2468 | has-tostringtag: 1.0.0 2469 | dev: true 2470 | 2471 | /is-builtin-module@3.2.1: 2472 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 2473 | engines: {node: '>=6'} 2474 | dependencies: 2475 | builtin-modules: 3.3.0 2476 | dev: true 2477 | 2478 | /is-callable@1.2.7: 2479 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 2480 | engines: {node: '>= 0.4'} 2481 | dev: true 2482 | 2483 | /is-core-module@2.13.1: 2484 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 2485 | dependencies: 2486 | hasown: 2.0.0 2487 | dev: true 2488 | 2489 | /is-date-object@1.0.5: 2490 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 2491 | engines: {node: '>= 0.4'} 2492 | dependencies: 2493 | has-tostringtag: 1.0.0 2494 | dev: true 2495 | 2496 | /is-decimal@1.0.4: 2497 | resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} 2498 | dev: true 2499 | 2500 | /is-extglob@2.1.1: 2501 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2502 | engines: {node: '>=0.10.0'} 2503 | dev: true 2504 | 2505 | /is-fullwidth-code-point@3.0.0: 2506 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 2507 | engines: {node: '>=8'} 2508 | dev: true 2509 | 2510 | /is-glob@4.0.3: 2511 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2512 | engines: {node: '>=0.10.0'} 2513 | dependencies: 2514 | is-extglob: 2.1.1 2515 | dev: true 2516 | 2517 | /is-hexadecimal@1.0.4: 2518 | resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} 2519 | dev: true 2520 | 2521 | /is-negative-zero@2.0.2: 2522 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 2523 | engines: {node: '>= 0.4'} 2524 | dev: true 2525 | 2526 | /is-number-object@1.0.7: 2527 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 2528 | engines: {node: '>= 0.4'} 2529 | dependencies: 2530 | has-tostringtag: 1.0.0 2531 | dev: true 2532 | 2533 | /is-number@7.0.0: 2534 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2535 | engines: {node: '>=0.12.0'} 2536 | dev: true 2537 | 2538 | /is-path-inside@3.0.3: 2539 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 2540 | engines: {node: '>=8'} 2541 | dev: true 2542 | 2543 | /is-regex@1.1.4: 2544 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 2545 | engines: {node: '>= 0.4'} 2546 | dependencies: 2547 | call-bind: 1.0.5 2548 | has-tostringtag: 1.0.0 2549 | dev: true 2550 | 2551 | /is-shared-array-buffer@1.0.2: 2552 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 2553 | dependencies: 2554 | call-bind: 1.0.5 2555 | dev: true 2556 | 2557 | /is-stream@2.0.1: 2558 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 2559 | engines: {node: '>=8'} 2560 | dev: true 2561 | 2562 | /is-stream@3.0.0: 2563 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 2564 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2565 | dev: true 2566 | 2567 | /is-string@1.0.7: 2568 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 2569 | engines: {node: '>= 0.4'} 2570 | dependencies: 2571 | has-tostringtag: 1.0.0 2572 | dev: true 2573 | 2574 | /is-symbol@1.0.4: 2575 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 2576 | engines: {node: '>= 0.4'} 2577 | dependencies: 2578 | has-symbols: 1.0.3 2579 | dev: true 2580 | 2581 | /is-there@4.5.1: 2582 | resolution: {integrity: sha512-vIZ7HTXAoRoIwYSsTnxb0sg9L6rth+JOulNcavsbskQkCIWoSM2cjFOWZs4wGziGZER+Xgs/HXiCQZgiL8ppxQ==} 2583 | dev: true 2584 | 2585 | /is-typed-array@1.1.12: 2586 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 2587 | engines: {node: '>= 0.4'} 2588 | dependencies: 2589 | which-typed-array: 1.1.13 2590 | dev: true 2591 | 2592 | /is-weakref@1.0.2: 2593 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 2594 | dependencies: 2595 | call-bind: 1.0.5 2596 | dev: true 2597 | 2598 | /isarray@2.0.5: 2599 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 2600 | dev: true 2601 | 2602 | /isexe@2.0.0: 2603 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2604 | dev: true 2605 | 2606 | /jackspeak@2.3.6: 2607 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 2608 | engines: {node: '>=14'} 2609 | dependencies: 2610 | '@isaacs/cliui': 8.0.2 2611 | optionalDependencies: 2612 | '@pkgjs/parseargs': 0.11.0 2613 | dev: true 2614 | 2615 | /js-tokens@4.0.0: 2616 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2617 | dev: true 2618 | 2619 | /js-yaml@4.1.0: 2620 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2621 | hasBin: true 2622 | dependencies: 2623 | argparse: 2.0.1 2624 | dev: true 2625 | 2626 | /jsdoc-type-pratt-parser@4.0.0: 2627 | resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} 2628 | engines: {node: '>=12.0.0'} 2629 | dev: true 2630 | 2631 | /jsesc@0.5.0: 2632 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 2633 | hasBin: true 2634 | dev: true 2635 | 2636 | /jsesc@3.0.2: 2637 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 2638 | engines: {node: '>=6'} 2639 | hasBin: true 2640 | dev: true 2641 | 2642 | /json-buffer@3.0.1: 2643 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 2644 | dev: true 2645 | 2646 | /json-parse-even-better-errors@2.3.1: 2647 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 2648 | dev: true 2649 | 2650 | /json-schema-traverse@0.4.1: 2651 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2652 | dev: true 2653 | 2654 | /json-stable-stringify-without-jsonify@1.0.1: 2655 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2656 | dev: true 2657 | 2658 | /jsonc-eslint-parser@2.4.0: 2659 | resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} 2660 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2661 | dependencies: 2662 | acorn: 8.11.2 2663 | eslint-visitor-keys: 3.4.3 2664 | espree: 9.6.1 2665 | semver: 7.5.4 2666 | dev: true 2667 | 2668 | /jsonc-parser@3.2.0: 2669 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 2670 | dev: true 2671 | 2672 | /jsx-ast-utils@3.3.5: 2673 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 2674 | engines: {node: '>=4.0'} 2675 | dependencies: 2676 | array-includes: 3.1.7 2677 | array.prototype.flat: 1.3.2 2678 | object.assign: 4.1.4 2679 | object.values: 1.1.7 2680 | dev: true 2681 | 2682 | /keyv@4.5.4: 2683 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 2684 | dependencies: 2685 | json-buffer: 3.0.1 2686 | dev: true 2687 | 2688 | /kleur@4.1.5: 2689 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 2690 | engines: {node: '>=6'} 2691 | dev: true 2692 | 2693 | /levn@0.4.1: 2694 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2695 | engines: {node: '>= 0.8.0'} 2696 | dependencies: 2697 | prelude-ls: 1.2.1 2698 | type-check: 0.4.0 2699 | dev: true 2700 | 2701 | /lilconfig@2.1.0: 2702 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 2703 | engines: {node: '>=10'} 2704 | dev: true 2705 | 2706 | /lines-and-columns@1.2.4: 2707 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2708 | dev: true 2709 | 2710 | /loader-utils@3.2.1: 2711 | resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} 2712 | engines: {node: '>= 12.13.0'} 2713 | dev: true 2714 | 2715 | /local-pkg@0.5.0: 2716 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 2717 | engines: {node: '>=14'} 2718 | dependencies: 2719 | mlly: 1.4.2 2720 | pkg-types: 1.0.3 2721 | dev: true 2722 | 2723 | /locate-path@5.0.0: 2724 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 2725 | engines: {node: '>=8'} 2726 | dependencies: 2727 | p-locate: 4.1.0 2728 | dev: true 2729 | 2730 | /locate-path@6.0.0: 2731 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2732 | engines: {node: '>=10'} 2733 | dependencies: 2734 | p-locate: 5.0.0 2735 | dev: true 2736 | 2737 | /locate-path@7.2.0: 2738 | resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} 2739 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2740 | dependencies: 2741 | p-locate: 6.0.0 2742 | dev: true 2743 | 2744 | /lodash.camelcase@4.3.0: 2745 | resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} 2746 | dev: true 2747 | 2748 | /lodash.memoize@4.1.2: 2749 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 2750 | dev: true 2751 | 2752 | /lodash.merge@4.6.2: 2753 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2754 | dev: true 2755 | 2756 | /lodash.uniq@4.5.0: 2757 | resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} 2758 | dev: true 2759 | 2760 | /lodash@4.17.21: 2761 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 2762 | dev: true 2763 | 2764 | /loupe@2.3.7: 2765 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 2766 | dependencies: 2767 | get-func-name: 2.0.2 2768 | dev: true 2769 | 2770 | /lru-cache@10.0.1: 2771 | resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} 2772 | engines: {node: 14 || >=16.14} 2773 | dev: true 2774 | 2775 | /lru-cache@6.0.0: 2776 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2777 | engines: {node: '>=10'} 2778 | dependencies: 2779 | yallist: 4.0.0 2780 | dev: true 2781 | 2782 | /magic-string@0.30.5: 2783 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} 2784 | engines: {node: '>=12'} 2785 | dependencies: 2786 | '@jridgewell/sourcemap-codec': 1.4.15 2787 | dev: true 2788 | 2789 | /mdast-util-from-markdown@0.8.5: 2790 | resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} 2791 | dependencies: 2792 | '@types/mdast': 3.0.14 2793 | mdast-util-to-string: 2.0.0 2794 | micromark: 2.11.4 2795 | parse-entities: 2.0.0 2796 | unist-util-stringify-position: 2.0.3 2797 | transitivePeerDependencies: 2798 | - supports-color 2799 | dev: true 2800 | 2801 | /mdast-util-to-string@2.0.0: 2802 | resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} 2803 | dev: true 2804 | 2805 | /mdn-data@2.0.28: 2806 | resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} 2807 | dev: true 2808 | 2809 | /mdn-data@2.0.30: 2810 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} 2811 | dev: true 2812 | 2813 | /merge-stream@2.0.0: 2814 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 2815 | dev: true 2816 | 2817 | /merge2@1.4.1: 2818 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2819 | engines: {node: '>= 8'} 2820 | dev: true 2821 | 2822 | /micromark@2.11.4: 2823 | resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} 2824 | dependencies: 2825 | debug: 4.3.4 2826 | parse-entities: 2.0.0 2827 | transitivePeerDependencies: 2828 | - supports-color 2829 | dev: true 2830 | 2831 | /micromatch@4.0.5: 2832 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2833 | engines: {node: '>=8.6'} 2834 | dependencies: 2835 | braces: 3.0.2 2836 | picomatch: 2.3.1 2837 | dev: true 2838 | 2839 | /mimic-fn@4.0.0: 2840 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 2841 | engines: {node: '>=12'} 2842 | dev: true 2843 | 2844 | /min-indent@1.0.1: 2845 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 2846 | engines: {node: '>=4'} 2847 | dev: true 2848 | 2849 | /minimatch@3.1.2: 2850 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2851 | dependencies: 2852 | brace-expansion: 1.1.11 2853 | dev: true 2854 | 2855 | /minimatch@9.0.3: 2856 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 2857 | engines: {node: '>=16 || 14 >=14.17'} 2858 | dependencies: 2859 | brace-expansion: 2.0.1 2860 | dev: true 2861 | 2862 | /minipass@7.0.4: 2863 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} 2864 | engines: {node: '>=16 || 14 >=14.17'} 2865 | dev: true 2866 | 2867 | /mkdirp@3.0.1: 2868 | resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} 2869 | engines: {node: '>=10'} 2870 | hasBin: true 2871 | dev: true 2872 | 2873 | /mlly@1.4.2: 2874 | resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} 2875 | dependencies: 2876 | acorn: 8.11.2 2877 | pathe: 1.1.1 2878 | pkg-types: 1.0.3 2879 | ufo: 1.3.1 2880 | dev: true 2881 | 2882 | /mri@1.2.0: 2883 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 2884 | engines: {node: '>=4'} 2885 | dev: true 2886 | 2887 | /ms@2.1.2: 2888 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2889 | dev: true 2890 | 2891 | /nanoid@3.3.6: 2892 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2893 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2894 | hasBin: true 2895 | dev: true 2896 | 2897 | /nanoid@3.3.7: 2898 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 2899 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2900 | hasBin: true 2901 | dev: true 2902 | 2903 | /natural-compare-lite@1.4.0: 2904 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 2905 | 2906 | /natural-compare@1.4.0: 2907 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2908 | dev: true 2909 | 2910 | /node-releases@2.0.13: 2911 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 2912 | dev: true 2913 | 2914 | /normalize-package-data@2.5.0: 2915 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 2916 | dependencies: 2917 | hosted-git-info: 2.8.9 2918 | resolve: 1.22.8 2919 | semver: 5.7.2 2920 | validate-npm-package-license: 3.0.4 2921 | dev: true 2922 | 2923 | /normalize-path@3.0.0: 2924 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2925 | engines: {node: '>=0.10.0'} 2926 | dev: true 2927 | 2928 | /npm-run-path@5.1.0: 2929 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} 2930 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2931 | dependencies: 2932 | path-key: 4.0.0 2933 | dev: true 2934 | 2935 | /nth-check@2.1.1: 2936 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 2937 | dependencies: 2938 | boolbase: 1.0.0 2939 | dev: true 2940 | 2941 | /object-inspect@1.13.1: 2942 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 2943 | dev: true 2944 | 2945 | /object-keys@1.1.1: 2946 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2947 | engines: {node: '>= 0.4'} 2948 | dev: true 2949 | 2950 | /object.assign@4.1.4: 2951 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 2952 | engines: {node: '>= 0.4'} 2953 | dependencies: 2954 | call-bind: 1.0.5 2955 | define-properties: 1.2.1 2956 | has-symbols: 1.0.3 2957 | object-keys: 1.1.1 2958 | dev: true 2959 | 2960 | /object.values@1.1.7: 2961 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} 2962 | engines: {node: '>= 0.4'} 2963 | dependencies: 2964 | call-bind: 1.0.5 2965 | define-properties: 1.2.1 2966 | es-abstract: 1.22.3 2967 | dev: true 2968 | 2969 | /once@1.4.0: 2970 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2971 | dependencies: 2972 | wrappy: 1.0.2 2973 | dev: true 2974 | 2975 | /onetime@6.0.0: 2976 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2977 | engines: {node: '>=12'} 2978 | dependencies: 2979 | mimic-fn: 4.0.0 2980 | dev: true 2981 | 2982 | /optionator@0.9.3: 2983 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2984 | engines: {node: '>= 0.8.0'} 2985 | dependencies: 2986 | '@aashutoshrathi/word-wrap': 1.2.6 2987 | deep-is: 0.1.4 2988 | fast-levenshtein: 2.0.6 2989 | levn: 0.4.1 2990 | prelude-ls: 1.2.1 2991 | type-check: 0.4.0 2992 | dev: true 2993 | 2994 | /p-limit@2.3.0: 2995 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2996 | engines: {node: '>=6'} 2997 | dependencies: 2998 | p-try: 2.2.0 2999 | dev: true 3000 | 3001 | /p-limit@3.1.0: 3002 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 3003 | engines: {node: '>=10'} 3004 | dependencies: 3005 | yocto-queue: 0.1.0 3006 | dev: true 3007 | 3008 | /p-limit@4.0.0: 3009 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 3010 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 3011 | dependencies: 3012 | yocto-queue: 1.0.0 3013 | dev: true 3014 | 3015 | /p-limit@5.0.0: 3016 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 3017 | engines: {node: '>=18'} 3018 | dependencies: 3019 | yocto-queue: 1.0.0 3020 | dev: true 3021 | 3022 | /p-locate@4.1.0: 3023 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 3024 | engines: {node: '>=8'} 3025 | dependencies: 3026 | p-limit: 2.3.0 3027 | dev: true 3028 | 3029 | /p-locate@5.0.0: 3030 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 3031 | engines: {node: '>=10'} 3032 | dependencies: 3033 | p-limit: 3.1.0 3034 | dev: true 3035 | 3036 | /p-locate@6.0.0: 3037 | resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} 3038 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 3039 | dependencies: 3040 | p-limit: 4.0.0 3041 | dev: true 3042 | 3043 | /p-try@2.2.0: 3044 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 3045 | engines: {node: '>=6'} 3046 | dev: true 3047 | 3048 | /parent-module@1.0.1: 3049 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 3050 | engines: {node: '>=6'} 3051 | dependencies: 3052 | callsites: 3.1.0 3053 | dev: true 3054 | 3055 | /parse-entities@2.0.0: 3056 | resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} 3057 | dependencies: 3058 | character-entities: 1.2.4 3059 | character-entities-legacy: 1.1.4 3060 | character-reference-invalid: 1.1.4 3061 | is-alphanumerical: 1.0.4 3062 | is-decimal: 1.0.4 3063 | is-hexadecimal: 1.0.4 3064 | dev: true 3065 | 3066 | /parse-gitignore@2.0.0: 3067 | resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} 3068 | engines: {node: '>=14'} 3069 | dev: true 3070 | 3071 | /parse-json@5.2.0: 3072 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 3073 | engines: {node: '>=8'} 3074 | dependencies: 3075 | '@babel/code-frame': 7.22.13 3076 | error-ex: 1.3.2 3077 | json-parse-even-better-errors: 2.3.1 3078 | lines-and-columns: 1.2.4 3079 | dev: true 3080 | 3081 | /path-exists@4.0.0: 3082 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 3083 | engines: {node: '>=8'} 3084 | dev: true 3085 | 3086 | /path-exists@5.0.0: 3087 | resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} 3088 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 3089 | dev: true 3090 | 3091 | /path-is-absolute@1.0.1: 3092 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 3093 | engines: {node: '>=0.10.0'} 3094 | dev: true 3095 | 3096 | /path-key@3.1.1: 3097 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 3098 | engines: {node: '>=8'} 3099 | dev: true 3100 | 3101 | /path-key@4.0.0: 3102 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 3103 | engines: {node: '>=12'} 3104 | dev: true 3105 | 3106 | /path-parse@1.0.7: 3107 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 3108 | dev: true 3109 | 3110 | /path-scurry@1.10.1: 3111 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} 3112 | engines: {node: '>=16 || 14 >=14.17'} 3113 | dependencies: 3114 | lru-cache: 10.0.1 3115 | minipass: 7.0.4 3116 | dev: true 3117 | 3118 | /path-type@4.0.0: 3119 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 3120 | engines: {node: '>=8'} 3121 | dev: true 3122 | 3123 | /pathe@1.1.1: 3124 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} 3125 | dev: true 3126 | 3127 | /pathval@1.1.1: 3128 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 3129 | dev: true 3130 | 3131 | /picocolors@1.0.0: 3132 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 3133 | dev: true 3134 | 3135 | /picomatch@2.3.1: 3136 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 3137 | engines: {node: '>=8.6'} 3138 | dev: true 3139 | 3140 | /pkg-types@1.0.3: 3141 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 3142 | dependencies: 3143 | jsonc-parser: 3.2.0 3144 | mlly: 1.4.2 3145 | pathe: 1.1.1 3146 | dev: true 3147 | 3148 | /pluralize@8.0.0: 3149 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 3150 | engines: {node: '>=4'} 3151 | dev: true 3152 | 3153 | /postcss-calc@9.0.1(postcss@8.4.31): 3154 | resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} 3155 | engines: {node: ^14 || ^16 || >=18.0} 3156 | peerDependencies: 3157 | postcss: ^8.2.2 3158 | dependencies: 3159 | postcss: 8.4.31 3160 | postcss-selector-parser: 6.0.13 3161 | postcss-value-parser: 4.2.0 3162 | dev: true 3163 | 3164 | /postcss-colormin@6.0.0(postcss@8.4.31): 3165 | resolution: {integrity: sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==} 3166 | engines: {node: ^14 || ^16 || >=18.0} 3167 | peerDependencies: 3168 | postcss: ^8.2.15 3169 | dependencies: 3170 | browserslist: 4.22.1 3171 | caniuse-api: 3.0.0 3172 | colord: 2.9.3 3173 | postcss: 8.4.31 3174 | postcss-value-parser: 4.2.0 3175 | dev: true 3176 | 3177 | /postcss-convert-values@6.0.0(postcss@8.4.31): 3178 | resolution: {integrity: sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==} 3179 | engines: {node: ^14 || ^16 || >=18.0} 3180 | peerDependencies: 3181 | postcss: ^8.2.15 3182 | dependencies: 3183 | browserslist: 4.22.1 3184 | postcss: 8.4.31 3185 | postcss-value-parser: 4.2.0 3186 | dev: true 3187 | 3188 | /postcss-discard-comments@6.0.0(postcss@8.4.31): 3189 | resolution: {integrity: sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==} 3190 | engines: {node: ^14 || ^16 || >=18.0} 3191 | peerDependencies: 3192 | postcss: ^8.2.15 3193 | dependencies: 3194 | postcss: 8.4.31 3195 | dev: true 3196 | 3197 | /postcss-discard-duplicates@6.0.0(postcss@8.4.31): 3198 | resolution: {integrity: sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==} 3199 | engines: {node: ^14 || ^16 || >=18.0} 3200 | peerDependencies: 3201 | postcss: ^8.2.15 3202 | dependencies: 3203 | postcss: 8.4.31 3204 | dev: true 3205 | 3206 | /postcss-discard-empty@6.0.0(postcss@8.4.31): 3207 | resolution: {integrity: sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==} 3208 | engines: {node: ^14 || ^16 || >=18.0} 3209 | peerDependencies: 3210 | postcss: ^8.2.15 3211 | dependencies: 3212 | postcss: 8.4.31 3213 | dev: true 3214 | 3215 | /postcss-discard-overridden@6.0.0(postcss@8.4.31): 3216 | resolution: {integrity: sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==} 3217 | engines: {node: ^14 || ^16 || >=18.0} 3218 | peerDependencies: 3219 | postcss: ^8.2.15 3220 | dependencies: 3221 | postcss: 8.4.31 3222 | dev: true 3223 | 3224 | /postcss-merge-longhand@6.0.0(postcss@8.4.31): 3225 | resolution: {integrity: sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==} 3226 | engines: {node: ^14 || ^16 || >=18.0} 3227 | peerDependencies: 3228 | postcss: ^8.2.15 3229 | dependencies: 3230 | postcss: 8.4.31 3231 | postcss-value-parser: 4.2.0 3232 | stylehacks: 6.0.0(postcss@8.4.31) 3233 | dev: true 3234 | 3235 | /postcss-merge-rules@6.0.1(postcss@8.4.31): 3236 | resolution: {integrity: sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==} 3237 | engines: {node: ^14 || ^16 || >=18.0} 3238 | peerDependencies: 3239 | postcss: ^8.2.15 3240 | dependencies: 3241 | browserslist: 4.22.1 3242 | caniuse-api: 3.0.0 3243 | cssnano-utils: 4.0.0(postcss@8.4.31) 3244 | postcss: 8.4.31 3245 | postcss-selector-parser: 6.0.13 3246 | dev: true 3247 | 3248 | /postcss-minify-font-values@6.0.0(postcss@8.4.31): 3249 | resolution: {integrity: sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==} 3250 | engines: {node: ^14 || ^16 || >=18.0} 3251 | peerDependencies: 3252 | postcss: ^8.2.15 3253 | dependencies: 3254 | postcss: 8.4.31 3255 | postcss-value-parser: 4.2.0 3256 | dev: true 3257 | 3258 | /postcss-minify-gradients@6.0.0(postcss@8.4.31): 3259 | resolution: {integrity: sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==} 3260 | engines: {node: ^14 || ^16 || >=18.0} 3261 | peerDependencies: 3262 | postcss: ^8.2.15 3263 | dependencies: 3264 | colord: 2.9.3 3265 | cssnano-utils: 4.0.0(postcss@8.4.31) 3266 | postcss: 8.4.31 3267 | postcss-value-parser: 4.2.0 3268 | dev: true 3269 | 3270 | /postcss-minify-params@6.0.0(postcss@8.4.31): 3271 | resolution: {integrity: sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==} 3272 | engines: {node: ^14 || ^16 || >=18.0} 3273 | peerDependencies: 3274 | postcss: ^8.2.15 3275 | dependencies: 3276 | browserslist: 4.22.1 3277 | cssnano-utils: 4.0.0(postcss@8.4.31) 3278 | postcss: 8.4.31 3279 | postcss-value-parser: 4.2.0 3280 | dev: true 3281 | 3282 | /postcss-minify-selectors@6.0.0(postcss@8.4.31): 3283 | resolution: {integrity: sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==} 3284 | engines: {node: ^14 || ^16 || >=18.0} 3285 | peerDependencies: 3286 | postcss: ^8.2.15 3287 | dependencies: 3288 | postcss: 8.4.31 3289 | postcss-selector-parser: 6.0.13 3290 | dev: true 3291 | 3292 | /postcss-modules-extract-imports@3.0.0(postcss@8.4.31): 3293 | resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} 3294 | engines: {node: ^10 || ^12 || >= 14} 3295 | peerDependencies: 3296 | postcss: ^8.1.0 3297 | dependencies: 3298 | postcss: 8.4.31 3299 | dev: true 3300 | 3301 | /postcss-modules-local-by-default@4.0.3(postcss@8.4.31): 3302 | resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} 3303 | engines: {node: ^10 || ^12 || >= 14} 3304 | peerDependencies: 3305 | postcss: ^8.1.0 3306 | dependencies: 3307 | icss-utils: 5.1.0(postcss@8.4.31) 3308 | postcss: 8.4.31 3309 | postcss-selector-parser: 6.0.13 3310 | postcss-value-parser: 4.2.0 3311 | dev: true 3312 | 3313 | /postcss-modules-scope@3.0.0(postcss@8.4.31): 3314 | resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} 3315 | engines: {node: ^10 || ^12 || >= 14} 3316 | peerDependencies: 3317 | postcss: ^8.1.0 3318 | dependencies: 3319 | postcss: 8.4.31 3320 | postcss-selector-parser: 6.0.13 3321 | dev: true 3322 | 3323 | /postcss-modules-values@4.0.0(postcss@8.4.31): 3324 | resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} 3325 | engines: {node: ^10 || ^12 || >= 14} 3326 | peerDependencies: 3327 | postcss: ^8.1.0 3328 | dependencies: 3329 | icss-utils: 5.1.0(postcss@8.4.31) 3330 | postcss: 8.4.31 3331 | dev: true 3332 | 3333 | /postcss-modules@6.0.0(postcss@8.4.31): 3334 | resolution: {integrity: sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==} 3335 | peerDependencies: 3336 | postcss: ^8.0.0 3337 | dependencies: 3338 | generic-names: 4.0.0 3339 | icss-utils: 5.1.0(postcss@8.4.31) 3340 | lodash.camelcase: 4.3.0 3341 | postcss: 8.4.31 3342 | postcss-modules-extract-imports: 3.0.0(postcss@8.4.31) 3343 | postcss-modules-local-by-default: 4.0.3(postcss@8.4.31) 3344 | postcss-modules-scope: 3.0.0(postcss@8.4.31) 3345 | postcss-modules-values: 4.0.0(postcss@8.4.31) 3346 | string-hash: 1.1.3 3347 | dev: true 3348 | 3349 | /postcss-normalize-charset@6.0.0(postcss@8.4.31): 3350 | resolution: {integrity: sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==} 3351 | engines: {node: ^14 || ^16 || >=18.0} 3352 | peerDependencies: 3353 | postcss: ^8.2.15 3354 | dependencies: 3355 | postcss: 8.4.31 3356 | dev: true 3357 | 3358 | /postcss-normalize-display-values@6.0.0(postcss@8.4.31): 3359 | resolution: {integrity: sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==} 3360 | engines: {node: ^14 || ^16 || >=18.0} 3361 | peerDependencies: 3362 | postcss: ^8.2.15 3363 | dependencies: 3364 | postcss: 8.4.31 3365 | postcss-value-parser: 4.2.0 3366 | dev: true 3367 | 3368 | /postcss-normalize-positions@6.0.0(postcss@8.4.31): 3369 | resolution: {integrity: sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==} 3370 | engines: {node: ^14 || ^16 || >=18.0} 3371 | peerDependencies: 3372 | postcss: ^8.2.15 3373 | dependencies: 3374 | postcss: 8.4.31 3375 | postcss-value-parser: 4.2.0 3376 | dev: true 3377 | 3378 | /postcss-normalize-repeat-style@6.0.0(postcss@8.4.31): 3379 | resolution: {integrity: sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==} 3380 | engines: {node: ^14 || ^16 || >=18.0} 3381 | peerDependencies: 3382 | postcss: ^8.2.15 3383 | dependencies: 3384 | postcss: 8.4.31 3385 | postcss-value-parser: 4.2.0 3386 | dev: true 3387 | 3388 | /postcss-normalize-string@6.0.0(postcss@8.4.31): 3389 | resolution: {integrity: sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==} 3390 | engines: {node: ^14 || ^16 || >=18.0} 3391 | peerDependencies: 3392 | postcss: ^8.2.15 3393 | dependencies: 3394 | postcss: 8.4.31 3395 | postcss-value-parser: 4.2.0 3396 | dev: true 3397 | 3398 | /postcss-normalize-timing-functions@6.0.0(postcss@8.4.31): 3399 | resolution: {integrity: sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==} 3400 | engines: {node: ^14 || ^16 || >=18.0} 3401 | peerDependencies: 3402 | postcss: ^8.2.15 3403 | dependencies: 3404 | postcss: 8.4.31 3405 | postcss-value-parser: 4.2.0 3406 | dev: true 3407 | 3408 | /postcss-normalize-unicode@6.0.0(postcss@8.4.31): 3409 | resolution: {integrity: sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==} 3410 | engines: {node: ^14 || ^16 || >=18.0} 3411 | peerDependencies: 3412 | postcss: ^8.2.15 3413 | dependencies: 3414 | browserslist: 4.22.1 3415 | postcss: 8.4.31 3416 | postcss-value-parser: 4.2.0 3417 | dev: true 3418 | 3419 | /postcss-normalize-url@6.0.0(postcss@8.4.31): 3420 | resolution: {integrity: sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==} 3421 | engines: {node: ^14 || ^16 || >=18.0} 3422 | peerDependencies: 3423 | postcss: ^8.2.15 3424 | dependencies: 3425 | postcss: 8.4.31 3426 | postcss-value-parser: 4.2.0 3427 | dev: true 3428 | 3429 | /postcss-normalize-whitespace@6.0.0(postcss@8.4.31): 3430 | resolution: {integrity: sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==} 3431 | engines: {node: ^14 || ^16 || >=18.0} 3432 | peerDependencies: 3433 | postcss: ^8.2.15 3434 | dependencies: 3435 | postcss: 8.4.31 3436 | postcss-value-parser: 4.2.0 3437 | dev: true 3438 | 3439 | /postcss-ordered-values@6.0.0(postcss@8.4.31): 3440 | resolution: {integrity: sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==} 3441 | engines: {node: ^14 || ^16 || >=18.0} 3442 | peerDependencies: 3443 | postcss: ^8.2.15 3444 | dependencies: 3445 | cssnano-utils: 4.0.0(postcss@8.4.31) 3446 | postcss: 8.4.31 3447 | postcss-value-parser: 4.2.0 3448 | dev: true 3449 | 3450 | /postcss-reduce-initial@6.0.0(postcss@8.4.31): 3451 | resolution: {integrity: sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==} 3452 | engines: {node: ^14 || ^16 || >=18.0} 3453 | peerDependencies: 3454 | postcss: ^8.2.15 3455 | dependencies: 3456 | browserslist: 4.22.1 3457 | caniuse-api: 3.0.0 3458 | postcss: 8.4.31 3459 | dev: true 3460 | 3461 | /postcss-reduce-transforms@6.0.0(postcss@8.4.31): 3462 | resolution: {integrity: sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==} 3463 | engines: {node: ^14 || ^16 || >=18.0} 3464 | peerDependencies: 3465 | postcss: ^8.2.15 3466 | dependencies: 3467 | postcss: 8.4.31 3468 | postcss-value-parser: 4.2.0 3469 | dev: true 3470 | 3471 | /postcss-selector-parser@6.0.13: 3472 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 3473 | engines: {node: '>=4'} 3474 | dependencies: 3475 | cssesc: 3.0.0 3476 | util-deprecate: 1.0.2 3477 | dev: true 3478 | 3479 | /postcss-svgo@6.0.0(postcss@8.4.31): 3480 | resolution: {integrity: sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==} 3481 | engines: {node: ^14 || ^16 || >= 18} 3482 | peerDependencies: 3483 | postcss: ^8.2.15 3484 | dependencies: 3485 | postcss: 8.4.31 3486 | postcss-value-parser: 4.2.0 3487 | svgo: 3.0.2 3488 | dev: true 3489 | 3490 | /postcss-unique-selectors@6.0.0(postcss@8.4.31): 3491 | resolution: {integrity: sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==} 3492 | engines: {node: ^14 || ^16 || >=18.0} 3493 | peerDependencies: 3494 | postcss: ^8.2.15 3495 | dependencies: 3496 | postcss: 8.4.31 3497 | postcss-selector-parser: 6.0.13 3498 | dev: true 3499 | 3500 | /postcss-value-parser@4.2.0: 3501 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 3502 | dev: true 3503 | 3504 | /postcss@8.4.31: 3505 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 3506 | engines: {node: ^10 || ^12 || >=14} 3507 | dependencies: 3508 | nanoid: 3.3.6 3509 | picocolors: 1.0.0 3510 | source-map-js: 1.0.2 3511 | dev: true 3512 | 3513 | /postcss@8.4.32: 3514 | resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} 3515 | engines: {node: ^10 || ^12 || >=14} 3516 | dependencies: 3517 | nanoid: 3.3.7 3518 | picocolors: 1.0.0 3519 | source-map-js: 1.0.2 3520 | dev: true 3521 | 3522 | /preact@10.18.1: 3523 | resolution: {integrity: sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==} 3524 | dev: true 3525 | 3526 | /prelude-ls@1.2.1: 3527 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 3528 | engines: {node: '>= 0.8.0'} 3529 | dev: true 3530 | 3531 | /pretty-format@29.7.0: 3532 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 3533 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 3534 | dependencies: 3535 | '@jest/schemas': 29.6.3 3536 | ansi-styles: 5.2.0 3537 | react-is: 18.2.0 3538 | dev: true 3539 | 3540 | /punycode@2.3.1: 3541 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 3542 | engines: {node: '>=6'} 3543 | dev: true 3544 | 3545 | /queue-microtask@1.2.3: 3546 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 3547 | dev: true 3548 | 3549 | /react-is@18.2.0: 3550 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 3551 | dev: true 3552 | 3553 | /read-pkg-up@7.0.1: 3554 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 3555 | engines: {node: '>=8'} 3556 | dependencies: 3557 | find-up: 4.1.0 3558 | read-pkg: 5.2.0 3559 | type-fest: 0.8.1 3560 | dev: true 3561 | 3562 | /read-pkg@5.2.0: 3563 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 3564 | engines: {node: '>=8'} 3565 | dependencies: 3566 | '@types/normalize-package-data': 2.4.3 3567 | normalize-package-data: 2.5.0 3568 | parse-json: 5.2.0 3569 | type-fest: 0.6.0 3570 | dev: true 3571 | 3572 | /readdirp@3.6.0: 3573 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 3574 | engines: {node: '>=8.10.0'} 3575 | dependencies: 3576 | picomatch: 2.3.1 3577 | dev: true 3578 | 3579 | /regexp-tree@0.1.27: 3580 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 3581 | hasBin: true 3582 | dev: true 3583 | 3584 | /regexp.prototype.flags@1.5.1: 3585 | resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} 3586 | engines: {node: '>= 0.4'} 3587 | dependencies: 3588 | call-bind: 1.0.5 3589 | define-properties: 1.2.1 3590 | set-function-name: 2.0.1 3591 | dev: true 3592 | 3593 | /regjsparser@0.10.0: 3594 | resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} 3595 | hasBin: true 3596 | dependencies: 3597 | jsesc: 0.5.0 3598 | dev: true 3599 | 3600 | /require-directory@2.1.1: 3601 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 3602 | engines: {node: '>=0.10.0'} 3603 | dev: true 3604 | 3605 | /resolve-from@4.0.0: 3606 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 3607 | engines: {node: '>=4'} 3608 | dev: true 3609 | 3610 | /resolve-pkg-maps@1.0.0: 3611 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 3612 | dev: true 3613 | 3614 | /resolve@1.22.8: 3615 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 3616 | hasBin: true 3617 | dependencies: 3618 | is-core-module: 2.13.1 3619 | path-parse: 1.0.7 3620 | supports-preserve-symlinks-flag: 1.0.0 3621 | dev: true 3622 | 3623 | /reusify@1.0.4: 3624 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 3625 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 3626 | dev: true 3627 | 3628 | /rev-hash@4.0.0: 3629 | resolution: {integrity: sha512-5w/auZRs65pf1AkZIbfICeorQfOCb6XVWaHmDEbkMyjmyRMxck+W0Erdj9zffuBRXxn5cbKfgmWQ9GpgR8dFZQ==} 3630 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 3631 | dev: true 3632 | 3633 | /rgb-hex@4.1.0: 3634 | resolution: {integrity: sha512-UZLM57BW09Yi9J1R3OP8B1yCbbDK3NT8BDtihGZkGkGEs2b6EaV85rsfJ6yK4F+8UbxFFmfA+9xHT5ZWhN1gDQ==} 3635 | engines: {node: '>=12'} 3636 | 3637 | /rimraf@3.0.2: 3638 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 3639 | hasBin: true 3640 | dependencies: 3641 | glob: 7.2.3 3642 | dev: true 3643 | 3644 | /rollup@4.8.0: 3645 | resolution: {integrity: sha512-NpsklK2fach5CdI+PScmlE5R4Ao/FSWtF7LkoIrHDxPACY/xshNasPsbpG0VVHxUTbf74tJbVT4PrP8JsJ6ZDA==} 3646 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 3647 | hasBin: true 3648 | optionalDependencies: 3649 | '@rollup/rollup-android-arm-eabi': 4.8.0 3650 | '@rollup/rollup-android-arm64': 4.8.0 3651 | '@rollup/rollup-darwin-arm64': 4.8.0 3652 | '@rollup/rollup-darwin-x64': 4.8.0 3653 | '@rollup/rollup-linux-arm-gnueabihf': 4.8.0 3654 | '@rollup/rollup-linux-arm64-gnu': 4.8.0 3655 | '@rollup/rollup-linux-arm64-musl': 4.8.0 3656 | '@rollup/rollup-linux-riscv64-gnu': 4.8.0 3657 | '@rollup/rollup-linux-x64-gnu': 4.8.0 3658 | '@rollup/rollup-linux-x64-musl': 4.8.0 3659 | '@rollup/rollup-win32-arm64-msvc': 4.8.0 3660 | '@rollup/rollup-win32-ia32-msvc': 4.8.0 3661 | '@rollup/rollup-win32-x64-msvc': 4.8.0 3662 | fsevents: 2.3.3 3663 | dev: true 3664 | 3665 | /run-parallel@1.2.0: 3666 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 3667 | dependencies: 3668 | queue-microtask: 1.2.3 3669 | dev: true 3670 | 3671 | /sade@1.8.1: 3672 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 3673 | engines: {node: '>=6'} 3674 | dependencies: 3675 | mri: 1.2.0 3676 | dev: true 3677 | 3678 | /safe-array-concat@1.0.1: 3679 | resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} 3680 | engines: {node: '>=0.4'} 3681 | dependencies: 3682 | call-bind: 1.0.5 3683 | get-intrinsic: 1.2.2 3684 | has-symbols: 1.0.3 3685 | isarray: 2.0.5 3686 | dev: true 3687 | 3688 | /safe-regex-test@1.0.0: 3689 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 3690 | dependencies: 3691 | call-bind: 1.0.5 3692 | get-intrinsic: 1.2.2 3693 | is-regex: 1.1.4 3694 | dev: true 3695 | 3696 | /semver@5.7.2: 3697 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 3698 | hasBin: true 3699 | dev: true 3700 | 3701 | /semver@7.5.4: 3702 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 3703 | engines: {node: '>=10'} 3704 | hasBin: true 3705 | dependencies: 3706 | lru-cache: 6.0.0 3707 | dev: true 3708 | 3709 | /set-function-length@1.1.1: 3710 | resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} 3711 | engines: {node: '>= 0.4'} 3712 | dependencies: 3713 | define-data-property: 1.1.1 3714 | get-intrinsic: 1.2.2 3715 | gopd: 1.0.1 3716 | has-property-descriptors: 1.0.1 3717 | dev: true 3718 | 3719 | /set-function-name@2.0.1: 3720 | resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} 3721 | engines: {node: '>= 0.4'} 3722 | dependencies: 3723 | define-data-property: 1.1.1 3724 | functions-have-names: 1.2.3 3725 | has-property-descriptors: 1.0.1 3726 | dev: true 3727 | 3728 | /shebang-command@2.0.0: 3729 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 3730 | engines: {node: '>=8'} 3731 | dependencies: 3732 | shebang-regex: 3.0.0 3733 | dev: true 3734 | 3735 | /shebang-regex@3.0.0: 3736 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 3737 | engines: {node: '>=8'} 3738 | dev: true 3739 | 3740 | /side-channel@1.0.4: 3741 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 3742 | dependencies: 3743 | call-bind: 1.0.5 3744 | get-intrinsic: 1.2.2 3745 | object-inspect: 1.13.1 3746 | dev: true 3747 | 3748 | /siginfo@2.0.0: 3749 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 3750 | dev: true 3751 | 3752 | /signal-exit@4.1.0: 3753 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 3754 | engines: {node: '>=14'} 3755 | dev: true 3756 | 3757 | /simple-git-hooks@2.9.0: 3758 | resolution: {integrity: sha512-waSQ5paUQtyGC0ZxlHmcMmD9I1rRXauikBwX31bX58l5vTOhCEcBC5Bi+ZDkPXTjDnZAF8TbCqKBY+9+sVPScw==} 3759 | hasBin: true 3760 | requiresBuild: true 3761 | dev: true 3762 | 3763 | /simple-swizzle@0.2.2: 3764 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 3765 | dependencies: 3766 | is-arrayish: 0.3.2 3767 | dev: false 3768 | 3769 | /slash@3.0.0: 3770 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 3771 | engines: {node: '>=8'} 3772 | dev: true 3773 | 3774 | /slash@4.0.0: 3775 | resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} 3776 | engines: {node: '>=12'} 3777 | dev: true 3778 | 3779 | /source-map-js@1.0.2: 3780 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 3781 | engines: {node: '>=0.10.0'} 3782 | dev: true 3783 | 3784 | /spdx-correct@3.2.0: 3785 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 3786 | dependencies: 3787 | spdx-expression-parse: 3.0.1 3788 | spdx-license-ids: 3.0.16 3789 | dev: true 3790 | 3791 | /spdx-exceptions@2.3.0: 3792 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 3793 | dev: true 3794 | 3795 | /spdx-expression-parse@3.0.1: 3796 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 3797 | dependencies: 3798 | spdx-exceptions: 2.3.0 3799 | spdx-license-ids: 3.0.16 3800 | dev: true 3801 | 3802 | /spdx-license-ids@3.0.16: 3803 | resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} 3804 | dev: true 3805 | 3806 | /stackback@0.0.2: 3807 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 3808 | dev: true 3809 | 3810 | /std-env@3.6.0: 3811 | resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} 3812 | dev: true 3813 | 3814 | /string-hash@1.1.3: 3815 | resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} 3816 | dev: true 3817 | 3818 | /string-width@4.2.3: 3819 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 3820 | engines: {node: '>=8'} 3821 | dependencies: 3822 | emoji-regex: 8.0.0 3823 | is-fullwidth-code-point: 3.0.0 3824 | strip-ansi: 6.0.1 3825 | dev: true 3826 | 3827 | /string-width@5.1.2: 3828 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 3829 | engines: {node: '>=12'} 3830 | dependencies: 3831 | eastasianwidth: 0.2.0 3832 | emoji-regex: 9.2.2 3833 | strip-ansi: 7.1.0 3834 | dev: true 3835 | 3836 | /string.prototype.trim@1.2.8: 3837 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} 3838 | engines: {node: '>= 0.4'} 3839 | dependencies: 3840 | call-bind: 1.0.5 3841 | define-properties: 1.2.1 3842 | es-abstract: 1.22.3 3843 | dev: true 3844 | 3845 | /string.prototype.trimend@1.0.7: 3846 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} 3847 | dependencies: 3848 | call-bind: 1.0.5 3849 | define-properties: 1.2.1 3850 | es-abstract: 1.22.3 3851 | dev: true 3852 | 3853 | /string.prototype.trimstart@1.0.7: 3854 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} 3855 | dependencies: 3856 | call-bind: 1.0.5 3857 | define-properties: 1.2.1 3858 | es-abstract: 1.22.3 3859 | dev: true 3860 | 3861 | /strip-ansi@6.0.1: 3862 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 3863 | engines: {node: '>=8'} 3864 | dependencies: 3865 | ansi-regex: 5.0.1 3866 | dev: true 3867 | 3868 | /strip-ansi@7.1.0: 3869 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 3870 | engines: {node: '>=12'} 3871 | dependencies: 3872 | ansi-regex: 6.0.1 3873 | dev: true 3874 | 3875 | /strip-final-newline@3.0.0: 3876 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 3877 | engines: {node: '>=12'} 3878 | dev: true 3879 | 3880 | /strip-indent@3.0.0: 3881 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 3882 | engines: {node: '>=8'} 3883 | dependencies: 3884 | min-indent: 1.0.1 3885 | dev: true 3886 | 3887 | /strip-json-comments@3.1.1: 3888 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3889 | engines: {node: '>=8'} 3890 | dev: true 3891 | 3892 | /strip-literal@1.3.0: 3893 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} 3894 | dependencies: 3895 | acorn: 8.11.2 3896 | dev: true 3897 | 3898 | /stylehacks@6.0.0(postcss@8.4.31): 3899 | resolution: {integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==} 3900 | engines: {node: ^14 || ^16 || >=18.0} 3901 | peerDependencies: 3902 | postcss: ^8.2.15 3903 | dependencies: 3904 | browserslist: 4.22.1 3905 | postcss: 8.4.31 3906 | postcss-selector-parser: 6.0.13 3907 | dev: true 3908 | 3909 | /supports-color@5.5.0: 3910 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 3911 | engines: {node: '>=4'} 3912 | dependencies: 3913 | has-flag: 3.0.0 3914 | dev: true 3915 | 3916 | /supports-color@7.2.0: 3917 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 3918 | engines: {node: '>=8'} 3919 | dependencies: 3920 | has-flag: 4.0.0 3921 | dev: true 3922 | 3923 | /supports-preserve-symlinks-flag@1.0.0: 3924 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 3925 | engines: {node: '>= 0.4'} 3926 | dev: true 3927 | 3928 | /svgo@3.0.2: 3929 | resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==} 3930 | engines: {node: '>=14.0.0'} 3931 | hasBin: true 3932 | dependencies: 3933 | '@trysound/sax': 0.2.0 3934 | commander: 7.2.0 3935 | css-select: 5.1.0 3936 | css-tree: 2.3.1 3937 | csso: 5.0.5 3938 | picocolors: 1.0.0 3939 | dev: true 3940 | 3941 | /temp-dir@2.0.0: 3942 | resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} 3943 | engines: {node: '>=8'} 3944 | dev: true 3945 | 3946 | /temp-dir@3.0.0: 3947 | resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} 3948 | engines: {node: '>=14.16'} 3949 | dev: true 3950 | 3951 | /temp-write@5.0.0: 3952 | resolution: {integrity: sha512-cJhnzBW7DjNox7VcZDXeNlQSkIh3mX/h+M0n0Fh+zgT7YAHwI9c+OngKx4MCiQCVx9iXxV104xYlJgDBCCtawA==} 3953 | engines: {node: '>=12'} 3954 | dependencies: 3955 | graceful-fs: 4.2.11 3956 | is-stream: 2.0.1 3957 | temp-dir: 2.0.0 3958 | uuid: 8.3.2 3959 | dev: true 3960 | 3961 | /tempy@3.1.0: 3962 | resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} 3963 | engines: {node: '>=14.16'} 3964 | dependencies: 3965 | is-stream: 3.0.0 3966 | temp-dir: 3.0.0 3967 | type-fest: 2.19.0 3968 | unique-string: 3.0.0 3969 | dev: true 3970 | 3971 | /text-table@0.2.0: 3972 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 3973 | dev: true 3974 | 3975 | /tinybench@2.5.1: 3976 | resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} 3977 | dev: true 3978 | 3979 | /tinypool@0.8.1: 3980 | resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} 3981 | engines: {node: '>=14.0.0'} 3982 | dev: true 3983 | 3984 | /tinyspy@2.2.0: 3985 | resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} 3986 | engines: {node: '>=14.0.0'} 3987 | dev: true 3988 | 3989 | /to-regex-range@5.0.1: 3990 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3991 | engines: {node: '>=8.0'} 3992 | dependencies: 3993 | is-number: 7.0.0 3994 | dev: true 3995 | 3996 | /ts-api-utils@1.0.3(typescript@5.2.2): 3997 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} 3998 | engines: {node: '>=16.13.0'} 3999 | peerDependencies: 4000 | typescript: '>=4.2.0' 4001 | dependencies: 4002 | typescript: 5.2.2 4003 | dev: true 4004 | 4005 | /type-check@0.4.0: 4006 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 4007 | engines: {node: '>= 0.8.0'} 4008 | dependencies: 4009 | prelude-ls: 1.2.1 4010 | dev: true 4011 | 4012 | /type-detect@4.0.8: 4013 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 4014 | engines: {node: '>=4'} 4015 | dev: true 4016 | 4017 | /type-fest@0.20.2: 4018 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 4019 | engines: {node: '>=10'} 4020 | dev: true 4021 | 4022 | /type-fest@0.6.0: 4023 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 4024 | engines: {node: '>=8'} 4025 | dev: true 4026 | 4027 | /type-fest@0.8.1: 4028 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 4029 | engines: {node: '>=8'} 4030 | dev: true 4031 | 4032 | /type-fest@1.4.0: 4033 | resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} 4034 | engines: {node: '>=10'} 4035 | dev: true 4036 | 4037 | /type-fest@2.19.0: 4038 | resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 4039 | engines: {node: '>=12.20'} 4040 | dev: true 4041 | 4042 | /typed-array-buffer@1.0.0: 4043 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 4044 | engines: {node: '>= 0.4'} 4045 | dependencies: 4046 | call-bind: 1.0.5 4047 | get-intrinsic: 1.2.2 4048 | is-typed-array: 1.1.12 4049 | dev: true 4050 | 4051 | /typed-array-byte-length@1.0.0: 4052 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 4053 | engines: {node: '>= 0.4'} 4054 | dependencies: 4055 | call-bind: 1.0.5 4056 | for-each: 0.3.3 4057 | has-proto: 1.0.1 4058 | is-typed-array: 1.1.12 4059 | dev: true 4060 | 4061 | /typed-array-byte-offset@1.0.0: 4062 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 4063 | engines: {node: '>= 0.4'} 4064 | dependencies: 4065 | available-typed-arrays: 1.0.5 4066 | call-bind: 1.0.5 4067 | for-each: 0.3.3 4068 | has-proto: 1.0.1 4069 | is-typed-array: 1.1.12 4070 | dev: true 4071 | 4072 | /typed-array-length@1.0.4: 4073 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 4074 | dependencies: 4075 | call-bind: 1.0.5 4076 | for-each: 0.3.3 4077 | is-typed-array: 1.1.12 4078 | dev: true 4079 | 4080 | /typed-css-modules@0.8.0: 4081 | resolution: {integrity: sha512-zX9n45IYv27B/85W/b7o+PLmSiLHKSGI/loE8etbIrkVPqB60S7Le7Bkcxl7KR1/visRJRPC/DDFiwx4370FEg==} 4082 | engines: {node: '>=18.0.0'} 4083 | hasBin: true 4084 | dependencies: 4085 | camelcase: 6.3.0 4086 | chalk: 4.1.2 4087 | chokidar: 3.5.3 4088 | glob: 10.3.10 4089 | icss-replace-symbols: 1.1.0 4090 | is-there: 4.5.1 4091 | mkdirp: 3.0.1 4092 | postcss: 8.4.31 4093 | postcss-modules-extract-imports: 3.0.0(postcss@8.4.31) 4094 | postcss-modules-local-by-default: 4.0.3(postcss@8.4.31) 4095 | postcss-modules-scope: 3.0.0(postcss@8.4.31) 4096 | postcss-modules-values: 4.0.0(postcss@8.4.31) 4097 | yargs: 17.7.2 4098 | dev: true 4099 | 4100 | /typescript@5.2.2: 4101 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} 4102 | engines: {node: '>=14.17'} 4103 | hasBin: true 4104 | dev: true 4105 | 4106 | /ufo@1.3.1: 4107 | resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} 4108 | dev: true 4109 | 4110 | /unbox-primitive@1.0.2: 4111 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 4112 | dependencies: 4113 | call-bind: 1.0.5 4114 | has-bigints: 1.0.2 4115 | has-symbols: 1.0.3 4116 | which-boxed-primitive: 1.0.2 4117 | dev: true 4118 | 4119 | /unique-string@3.0.0: 4120 | resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} 4121 | engines: {node: '>=12'} 4122 | dependencies: 4123 | crypto-random-string: 4.0.0 4124 | dev: true 4125 | 4126 | /unist-util-stringify-position@2.0.3: 4127 | resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} 4128 | dependencies: 4129 | '@types/unist': 2.0.9 4130 | dev: true 4131 | 4132 | /update-browserslist-db@1.0.13(browserslist@4.22.1): 4133 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 4134 | hasBin: true 4135 | peerDependencies: 4136 | browserslist: '>= 4.21.0' 4137 | dependencies: 4138 | browserslist: 4.22.1 4139 | escalade: 3.1.1 4140 | picocolors: 1.0.0 4141 | dev: true 4142 | 4143 | /uri-js@4.4.1: 4144 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 4145 | dependencies: 4146 | punycode: 2.3.1 4147 | dev: true 4148 | 4149 | /util-deprecate@1.0.2: 4150 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 4151 | dev: true 4152 | 4153 | /uuid@8.3.2: 4154 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 4155 | hasBin: true 4156 | dev: true 4157 | 4158 | /validate-npm-package-license@3.0.4: 4159 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 4160 | dependencies: 4161 | spdx-correct: 3.2.0 4162 | spdx-expression-parse: 3.0.1 4163 | dev: true 4164 | 4165 | /vite-node@1.0.4: 4166 | resolution: {integrity: sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==} 4167 | engines: {node: ^18.0.0 || >=20.0.0} 4168 | hasBin: true 4169 | dependencies: 4170 | cac: 6.7.14 4171 | debug: 4.3.4 4172 | pathe: 1.1.1 4173 | picocolors: 1.0.0 4174 | vite: 5.0.8 4175 | transitivePeerDependencies: 4176 | - '@types/node' 4177 | - less 4178 | - lightningcss 4179 | - sass 4180 | - stylus 4181 | - sugarss 4182 | - supports-color 4183 | - terser 4184 | dev: true 4185 | 4186 | /vite@5.0.8: 4187 | resolution: {integrity: sha512-jYMALd8aeqR3yS9xlHd0OzQJndS9fH5ylVgWdB+pxTwxLKdO1pgC5Dlb398BUxpfaBxa4M9oT7j1g503Gaj5IQ==} 4188 | engines: {node: ^18.0.0 || >=20.0.0} 4189 | hasBin: true 4190 | peerDependencies: 4191 | '@types/node': ^18.0.0 || >=20.0.0 4192 | less: '*' 4193 | lightningcss: ^1.21.0 4194 | sass: '*' 4195 | stylus: '*' 4196 | sugarss: '*' 4197 | terser: ^5.4.0 4198 | peerDependenciesMeta: 4199 | '@types/node': 4200 | optional: true 4201 | less: 4202 | optional: true 4203 | lightningcss: 4204 | optional: true 4205 | sass: 4206 | optional: true 4207 | stylus: 4208 | optional: true 4209 | sugarss: 4210 | optional: true 4211 | terser: 4212 | optional: true 4213 | dependencies: 4214 | esbuild: 0.19.5 4215 | postcss: 8.4.32 4216 | rollup: 4.8.0 4217 | optionalDependencies: 4218 | fsevents: 2.3.3 4219 | dev: true 4220 | 4221 | /vitest@1.0.4: 4222 | resolution: {integrity: sha512-s1GQHp/UOeWEo4+aXDOeFBJwFzL6mjycbQwwKWX2QcYfh/7tIerS59hWQ20mxzupTJluA2SdwiBuWwQHH67ckg==} 4223 | engines: {node: ^18.0.0 || >=20.0.0} 4224 | hasBin: true 4225 | peerDependencies: 4226 | '@edge-runtime/vm': '*' 4227 | '@types/node': ^18.0.0 || >=20.0.0 4228 | '@vitest/browser': ^1.0.0 4229 | '@vitest/ui': ^1.0.0 4230 | happy-dom: '*' 4231 | jsdom: '*' 4232 | peerDependenciesMeta: 4233 | '@edge-runtime/vm': 4234 | optional: true 4235 | '@types/node': 4236 | optional: true 4237 | '@vitest/browser': 4238 | optional: true 4239 | '@vitest/ui': 4240 | optional: true 4241 | happy-dom: 4242 | optional: true 4243 | jsdom: 4244 | optional: true 4245 | dependencies: 4246 | '@vitest/expect': 1.0.4 4247 | '@vitest/runner': 1.0.4 4248 | '@vitest/snapshot': 1.0.4 4249 | '@vitest/spy': 1.0.4 4250 | '@vitest/utils': 1.0.4 4251 | acorn-walk: 8.3.0 4252 | cac: 6.7.14 4253 | chai: 4.3.10 4254 | debug: 4.3.4 4255 | execa: 8.0.1 4256 | local-pkg: 0.5.0 4257 | magic-string: 0.30.5 4258 | pathe: 1.1.1 4259 | picocolors: 1.0.0 4260 | std-env: 3.6.0 4261 | strip-literal: 1.3.0 4262 | tinybench: 2.5.1 4263 | tinypool: 0.8.1 4264 | vite: 5.0.8 4265 | vite-node: 1.0.4 4266 | why-is-node-running: 2.2.2 4267 | transitivePeerDependencies: 4268 | - less 4269 | - lightningcss 4270 | - sass 4271 | - stylus 4272 | - sugarss 4273 | - supports-color 4274 | - terser 4275 | dev: true 4276 | 4277 | /vue-eslint-parser@9.3.2(eslint@8.55.0): 4278 | resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} 4279 | engines: {node: ^14.17.0 || >=16.0.0} 4280 | peerDependencies: 4281 | eslint: '>=6.0.0' 4282 | dependencies: 4283 | debug: 4.3.4 4284 | eslint: 8.55.0 4285 | eslint-scope: 7.2.2 4286 | eslint-visitor-keys: 3.4.3 4287 | espree: 9.6.1 4288 | esquery: 1.5.0 4289 | lodash: 4.17.21 4290 | semver: 7.5.4 4291 | transitivePeerDependencies: 4292 | - supports-color 4293 | dev: true 4294 | 4295 | /which-boxed-primitive@1.0.2: 4296 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 4297 | dependencies: 4298 | is-bigint: 1.0.4 4299 | is-boolean-object: 1.1.2 4300 | is-number-object: 1.0.7 4301 | is-string: 1.0.7 4302 | is-symbol: 1.0.4 4303 | dev: true 4304 | 4305 | /which-typed-array@1.1.13: 4306 | resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} 4307 | engines: {node: '>= 0.4'} 4308 | dependencies: 4309 | available-typed-arrays: 1.0.5 4310 | call-bind: 1.0.5 4311 | for-each: 0.3.3 4312 | gopd: 1.0.1 4313 | has-tostringtag: 1.0.0 4314 | dev: true 4315 | 4316 | /which@2.0.2: 4317 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 4318 | engines: {node: '>= 8'} 4319 | hasBin: true 4320 | dependencies: 4321 | isexe: 2.0.0 4322 | dev: true 4323 | 4324 | /why-is-node-running@2.2.2: 4325 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 4326 | engines: {node: '>=8'} 4327 | hasBin: true 4328 | dependencies: 4329 | siginfo: 2.0.0 4330 | stackback: 0.0.2 4331 | dev: true 4332 | 4333 | /wrap-ansi@7.0.0: 4334 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 4335 | engines: {node: '>=10'} 4336 | dependencies: 4337 | ansi-styles: 4.3.0 4338 | string-width: 4.2.3 4339 | strip-ansi: 6.0.1 4340 | dev: true 4341 | 4342 | /wrap-ansi@8.1.0: 4343 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 4344 | engines: {node: '>=12'} 4345 | dependencies: 4346 | ansi-styles: 6.2.1 4347 | string-width: 5.1.2 4348 | strip-ansi: 7.1.0 4349 | dev: true 4350 | 4351 | /wrappy@1.0.2: 4352 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 4353 | dev: true 4354 | 4355 | /xml-name-validator@4.0.0: 4356 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} 4357 | engines: {node: '>=12'} 4358 | dev: true 4359 | 4360 | /xstate@4.38.3: 4361 | resolution: {integrity: sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw==} 4362 | dev: true 4363 | 4364 | /y18n@5.0.8: 4365 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 4366 | engines: {node: '>=10'} 4367 | dev: true 4368 | 4369 | /yallist@4.0.0: 4370 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 4371 | dev: true 4372 | 4373 | /yaml-eslint-parser@1.2.2: 4374 | resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} 4375 | engines: {node: ^14.17.0 || >=16.0.0} 4376 | dependencies: 4377 | eslint-visitor-keys: 3.4.3 4378 | lodash: 4.17.21 4379 | yaml: 2.3.4 4380 | dev: true 4381 | 4382 | /yaml@2.3.4: 4383 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} 4384 | engines: {node: '>= 14'} 4385 | dev: true 4386 | 4387 | /yargs-parser@21.1.1: 4388 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 4389 | engines: {node: '>=12'} 4390 | dev: true 4391 | 4392 | /yargs@17.7.2: 4393 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 4394 | engines: {node: '>=12'} 4395 | dependencies: 4396 | cliui: 8.0.1 4397 | escalade: 3.1.1 4398 | get-caller-file: 2.0.5 4399 | require-directory: 2.1.1 4400 | string-width: 4.2.3 4401 | y18n: 5.0.8 4402 | yargs-parser: 21.1.1 4403 | dev: true 4404 | 4405 | /yocto-queue@0.1.0: 4406 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 4407 | engines: {node: '>=10'} 4408 | dev: true 4409 | 4410 | /yocto-queue@1.0.0: 4411 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 4412 | engines: {node: '>=12.20'} 4413 | dev: true 4414 | -------------------------------------------------------------------------------- /src/generators.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, vi } from 'vitest' 2 | import { createMachine, interpret } from 'xstateV4' 3 | import { type GeneratorOptions, generateXStateV4StateMachineOptions } from './generators' 4 | import { generateNewWriter } from './utils' 5 | 6 | describe('generateXStateV4StateMachineOptions', () => { 7 | it('when passed with an empty list of frames, then throws an error', () => { 8 | // Arrange 9 | const writer = generateNewWriter() 10 | 11 | const generatorOptions: GeneratorOptions = { 12 | writer, 13 | figmaAgnosticDescriptor: { 14 | pageName: 'unitTestPage', 15 | simplifiedFrames: [], 16 | 17 | }, 18 | } 19 | 20 | // Assert 21 | expect(() => generateXStateV4StateMachineOptions(generatorOptions)).toThrowError( 22 | 'The document contains no frames.', 23 | ) 24 | }) 25 | 26 | it('when passed with the options generated from the "Four empty frames" Figma file, then use the writer to compose a the corresponding state machine', () => { 27 | // Arrange 28 | const writer = generateNewWriter() 29 | 30 | const generatorOptions: GeneratorOptions = { 31 | writer, 32 | figmaAgnosticDescriptor: 33 | { 34 | pageName: 'Page 1', 35 | simplifiedFrames: [ 36 | { id: '1:2', name: 'Frame 1', reactionsData: [] }, 37 | { id: '1:3', name: 'Frame 2', reactionsData: [] }, 38 | { id: '1:4', name: 'Frame 3', reactionsData: [] }, 39 | { id: '1:5', name: 'Frame 4', reactionsData: [] }, 40 | ], 41 | }, 42 | } 43 | 44 | // Act 45 | generateXStateV4StateMachineOptions(generatorOptions) 46 | 47 | // Assert 48 | expect(writer.toString()).toMatchInlineSnapshot(` 49 | "{ 50 | id:'Page_1', 51 | initial:'Frame_1', 52 | states:{ 53 | Frame_1:{ 54 | type:'final', 55 | }, 56 | Frame_2:{ 57 | type:'final', 58 | }, 59 | Frame_3:{ 60 | type:'final', 61 | }, 62 | Frame_4:{ 63 | type:'final', 64 | }, 65 | }, 66 | }" 67 | `) 68 | 69 | // Real XState machine conversion 70 | // eslint-disable-next-line no-eval 71 | const machine = createMachine(eval(`(${writer.toString()})`)) 72 | const service = interpret(machine).start() 73 | expect(service.getSnapshot().value).toEqual('Frame_1') 74 | expect(service.getSnapshot().done).toEqual(true) 75 | }) 76 | 77 | it('when passed with the options generated from the "Simple frame navigation" Figma file, then use the writer to compose a the corresponding state machine', () => { 78 | const writer = generateNewWriter() 79 | 80 | const generatorOptions: GeneratorOptions = { 81 | writer, 82 | figmaAgnosticDescriptor: { 83 | pageName: 'Page 1', 84 | simplifiedFrames: [{ 85 | id: '1:2', 86 | name: 'Frame 1', 87 | reactionsData: [{ 88 | triggerType: 'ON_CLICK', 89 | navigationType: 'NAVIGATE', 90 | destinationFrameId: '1:3', 91 | destinationFrameName: 'Frame 2', 92 | generatedName: 'Navigate to Frame 2', 93 | }], 94 | 95 | }, { 96 | id: '1:3', 97 | name: 'Frame 2', 98 | reactionsData: [], 99 | 100 | }], 101 | }, 102 | } 103 | 104 | // Act 105 | generateXStateV4StateMachineOptions(generatorOptions) 106 | 107 | // Assert 108 | expect(writer.toString()).toMatchInlineSnapshot( 109 | ` 110 | "{ 111 | id:'Page_1', 112 | initial:'Frame_1', 113 | states:{ 114 | Frame_1:{ 115 | on:{ 116 | ON_CLICK_NAVIGATE_TO_FRAME_2:'Frame_2', 117 | }, 118 | }, 119 | Frame_2:{ 120 | type:'final', 121 | }, 122 | }, 123 | }" 124 | `, 125 | ) 126 | 127 | // Real XState machine conversion 128 | // eslint-disable-next-line no-eval 129 | const machine = createMachine(eval(`(${writer.toString()})`)) 130 | const service = interpret(machine).start() 131 | expect(service.getSnapshot().value).toEqual('Frame_1') 132 | service.send('ON_CLICK_NAVIGATE_TO_FRAME_2') 133 | expect(service.getSnapshot().value).toEqual('Frame_2') 134 | expect(service.getSnapshot().done).toEqual(true) 135 | }) 136 | 137 | it('when passed with the options generated from the "Click and drag frame navigation" Figma file, then use the writer to compose a the corresponding state machine', () => { 138 | const writer = generateNewWriter() 139 | 140 | const generatorOptions: GeneratorOptions = { 141 | writer, 142 | figmaAgnosticDescriptor: { 143 | pageName: 'Page 1', 144 | simplifiedFrames: [{ 145 | id: '1:2', 146 | name: 'Frame 1', 147 | reactionsData: [{ 148 | triggerType: 'ON_CLICK', 149 | navigationType: 'NAVIGATE', 150 | destinationFrameId: '1:3', 151 | destinationFrameName: 'Frame 2', 152 | generatedName: 'Click to navigate to Frame 2', 153 | }], 154 | 155 | }, { 156 | id: '1:3', 157 | name: 'Frame 2', 158 | reactionsData: [{ 159 | triggerType: 'ON_DRAG', 160 | navigationType: 'NAVIGATE', 161 | destinationFrameId: '1:2', 162 | destinationFrameName: 'Frame 1', 163 | generatedName: 'Drag to navigate to Frame 1', 164 | }], 165 | 166 | }], 167 | }, 168 | } 169 | 170 | // Act 171 | generateXStateV4StateMachineOptions(generatorOptions) 172 | 173 | // Assert 174 | expect(writer.toString()).toMatchInlineSnapshot( 175 | ` 176 | "{ 177 | id:'Page_1', 178 | initial:'Frame_1', 179 | states:{ 180 | Frame_1:{ 181 | on:{ 182 | ON_CLICK_CLICK_TO_NAVIGATE_TO_FRAME_2:'Frame_2', 183 | }, 184 | }, 185 | Frame_2:{ 186 | on:{ 187 | ON_DRAG_DRAG_TO_NAVIGATE_TO_FRAME_1:'Frame_1', 188 | }, 189 | }, 190 | }, 191 | }" 192 | `, 193 | ) 194 | 195 | // Real XState machine conversion 196 | // eslint-disable-next-line no-eval 197 | const machine = createMachine(eval(`(${writer.toString()})`)) 198 | const service = interpret(machine).start() 199 | expect(service.getSnapshot().value).toEqual('Frame_1') 200 | service.send('ON_CLICK_CLICK_TO_NAVIGATE_TO_FRAME_2') 201 | expect(service.getSnapshot().value).toEqual('Frame_2') 202 | service.send('ON_DRAG_DRAG_TO_NAVIGATE_TO_FRAME_1') 203 | expect(service.getSnapshot().value).toEqual('Frame_1') 204 | }) 205 | 206 | it.todo('mouseEvent reactions: these reactions work the same as Drag event, no need to test them') 207 | 208 | it('when passed with the options generated from the "Touch up with delay frame navigation" Figma file, then use the writer to compose a the corresponding state machine', async () => { 209 | const writer = generateNewWriter() 210 | 211 | const generatorOptions: GeneratorOptions = { 212 | writer, 213 | figmaAgnosticDescriptor: { 214 | pageName: 'Page 1', 215 | simplifiedFrames: [{ 216 | id: '1:2', 217 | name: 'Frame 1', 218 | reactionsData: [{ 219 | triggerType: 'MOUSE_UP', 220 | generatedName: 'Navigate to Frame 2 with delay', 221 | delay: 50, 222 | navigationType: 'NAVIGATE', 223 | destinationFrameId: '1:3', 224 | destinationFrameName: 'Frame 2', 225 | }, { 226 | triggerType: 'ON_CLICK', 227 | navigationType: 'NAVIGATE', 228 | destinationFrameId: '207:8', 229 | destinationFrameName: 'Frame 3', 230 | generatedName: 'Navigate to Frame 3', 231 | }], 232 | 233 | }, { 234 | id: '1:3', 235 | name: 'Frame 2', 236 | reactionsData: [], 237 | 238 | }, { 239 | id: '207:8', 240 | name: 'Frame 3', 241 | reactionsData: [], 242 | 243 | }], 244 | }, 245 | } 246 | 247 | // Act 248 | generateXStateV4StateMachineOptions(generatorOptions) 249 | 250 | // Assert 251 | expect(writer.toString()).toMatchInlineSnapshot( 252 | ` 253 | "{ 254 | id:'Page_1', 255 | initial:'Frame_1', 256 | states:{ 257 | Frame_1:{ 258 | id:'Frame_1', 259 | initial:'idle', 260 | states:{ 261 | idle:{}, 262 | MOUSE_UP_NAVIGATE_TO_FRAME_2_WITH_DELAY_AFTER_50:{ 263 | after:{ 264 | 50:'#Page_1.Frame_2', 265 | }, 266 | }, 267 | }, 268 | on:{ 269 | ON_CLICK_NAVIGATE_TO_FRAME_3:'Frame_3', 270 | MOUSE_UP_NAVIGATE_TO_FRAME_2_WITH_DELAY:'#Frame_1.MOUSE_UP_NAVIGATE_TO_FRAME_2_WITH_DELAY_AFTER_50', 271 | }, 272 | }, 273 | Frame_2:{ 274 | type:'final', 275 | }, 276 | Frame_3:{ 277 | type:'final', 278 | }, 279 | }, 280 | }" 281 | `, 282 | ) 283 | 284 | // Real XState machine conversion 285 | // eslint-disable-next-line no-eval 286 | const machine = createMachine(eval(`(${writer.toString()})`)) 287 | 288 | // Simple transition 289 | let service = interpret(machine).start() 290 | expect(service.getSnapshot().value).toEqual({ Frame_1: 'idle' }) 291 | service.send('ON_CLICK_NAVIGATE_TO_FRAME_3') 292 | expect(service.getSnapshot().value).toEqual('Frame_3') 293 | expect(service.getSnapshot().done).toEqual(true) 294 | 295 | // Delayed transition 296 | service = interpret(machine).start() 297 | expect(service.getSnapshot().value).toEqual({ Frame_1: 'idle' }) 298 | service.send('MOUSE_UP_NAVIGATE_TO_FRAME_2_WITH_DELAY') 299 | expect(service.getSnapshot().value).toEqual({ Frame_1: 'MOUSE_UP_NAVIGATE_TO_FRAME_2_WITH_DELAY_AFTER_50' }) 300 | 301 | await vi.waitFor( 302 | () => expect(service.getSnapshot().value).toEqual('Frame_2'), 303 | { timeout: 1000, interval: 20 }, 304 | ) 305 | expect(service.getSnapshot().done).toEqual(true) 306 | 307 | // Non-delayed transition that stops the delayed one 308 | service = interpret(machine).start() 309 | expect(service.getSnapshot().value).toEqual({ Frame_1: 'idle' }) 310 | service.send('MOUSE_UP_NAVIGATE_TO_FRAME_2_WITH_DELAY') 311 | expect(service.getSnapshot().value).toEqual({ Frame_1: 'MOUSE_UP_NAVIGATE_TO_FRAME_2_WITH_DELAY_AFTER_50' }) 312 | service.send('ON_CLICK_NAVIGATE_TO_FRAME_3') 313 | expect(service.getSnapshot().value).toEqual('Frame_3') 314 | expect(service.getSnapshot().done).toEqual(true) 315 | }) 316 | 317 | it('when passed with the options generated from the "Simple scroll" Figma file, then use the writer to compose a the corresponding state machine', () => { 318 | const writer = generateNewWriter() 319 | 320 | const generatorOptions: GeneratorOptions = { 321 | writer, 322 | figmaAgnosticDescriptor: { 323 | pageName: 'Page 1', 324 | simplifiedFrames: [ 325 | { 326 | id: '1:2', 327 | name: 'Frame 1', 328 | reactionsData: [ 329 | { 330 | triggerType: 'ON_CLICK', 331 | navigationType: 'SCROLL_TO', 332 | destinationNodeId: '17:31', 333 | destinationNodeName: 'Anchor 2', 334 | generatedName: 'scroll to anchor 2', 335 | }, 336 | { 337 | triggerType: 'ON_CLICK', 338 | navigationType: 'SCROLL_TO', 339 | destinationNodeId: '17:13', 340 | destinationNodeName: 'Anchor 1', 341 | generatedName: 'scroll to anchor 1', 342 | }, 343 | { 344 | triggerType: 'ON_CLICK', 345 | navigationType: 'SCROLL_TO', 346 | destinationNodeId: '17:55', 347 | destinationNodeName: 'Anchor 3', 348 | generatedName: 'scroll to anchor 3', 349 | }, 350 | ], 351 | 352 | }, 353 | ], 354 | } 355 | , 356 | } 357 | 358 | // Act 359 | generateXStateV4StateMachineOptions(generatorOptions) 360 | 361 | // Assert 362 | expect(writer.toString()).toMatchInlineSnapshot(` 363 | "{ 364 | id:'Page_1', 365 | initial:'Frame_1', 366 | states:{ 367 | Frame_1:{ 368 | id:'Frame_1', 369 | initial:'idle', 370 | states:{ 371 | idle:{}, 372 | Anchor_2:{ 373 | }, 374 | Anchor_1:{ 375 | }, 376 | Anchor_3:{ 377 | }, 378 | }, 379 | on:{ 380 | ON_CLICK_SCROLL_TO_ANCHOR_2_SCROLL_TO:'#Page_1.Frame_1.Anchor_2', 381 | ON_CLICK_SCROLL_TO_ANCHOR_1_SCROLL_TO:'#Page_1.Frame_1.Anchor_1', 382 | ON_CLICK_SCROLL_TO_ANCHOR_3_SCROLL_TO:'#Page_1.Frame_1.Anchor_3', 383 | }, 384 | }, 385 | }, 386 | }" 387 | `) 388 | 389 | // Real XState machine conversion 390 | // eslint-disable-next-line no-eval 391 | const machine = createMachine(eval(`(${writer.toString()})`)) 392 | const service = interpret(machine).start() 393 | expect(service.getSnapshot().value).toEqual({ Frame_1: 'idle' }) 394 | service.send('ON_CLICK_SCROLL_TO_ANCHOR_1_SCROLL_TO') 395 | expect(service.getSnapshot().value).toEqual({ Frame_1: 'Anchor_1' }) 396 | }) 397 | // TODO: test scroll to deeply nested anchors 398 | // TODO: test click and delay to deeply nested anchors mixed with scroll (ahd with meaningful names in figma) 399 | }) 400 | -------------------------------------------------------------------------------- /src/generators.ts: -------------------------------------------------------------------------------- 1 | import type CodeBlockWriter from 'code-block-writer' 2 | 3 | import { normalizeString } from './utils' 4 | import type { FigmaAgnosticDescriptor } from './types' 5 | 6 | export interface GeneratorOptions { 7 | readonly writer: CodeBlockWriter 8 | readonly figmaAgnosticDescriptor: FigmaAgnosticDescriptor 9 | } 10 | 11 | function createWriterUtils(writer: CodeBlockWriter) { 12 | return { 13 | /** 14 | * Generic wrapper for the top-level object of the state machine. 15 | * @example `{ 16 | * // code added by `callback` goes here 17 | * }` 18 | */ 19 | stateMachineConfig(callback: () => void) { writer.block(callback) }, 20 | 21 | /** 22 | * Add an empty idle state that can ba used as the default state of a state node. The parent state node is responsible to define the events to exit the idle state, if any. 23 | * @example `idle: {},` 24 | */ 25 | idleState() { writer.write('idle:').write('{},').newLine() }, 26 | 27 | /** 28 | * Mark a state as final. The state machine will stop when it reaches a final state. 29 | * @example `type: 'final',` 30 | * @see https://xstate.js.org/docs/guides/final.html#final-states 31 | */ 32 | finalType() { writer.write('type:').quote().write('final').quote().write(',') }, 33 | 34 | /** 35 | * Add an id to a state node to be easily referenced across the state machine. 36 | * @example `id: '',` 37 | * @see https://xstate.js.org/docs/guides/ids.html#custom-ids 38 | */ 39 | stateId(id: string) { writer.write('id:').quote().write(id).quote().write(',').newLine() }, 40 | 41 | /** 42 | * Set the initial state of a state node. 43 | * @example `initial: '',` 44 | * @see https://xstate.js.org/docs/guides/hierarchical.html#initial-states 45 | */ 46 | initialState(name: string) { writer.write('initial:').quote().write(normalizeString(name)).quote().write(',').newLine() }, 47 | 48 | /** 49 | * Create a block that contains all the states. 50 | * @example `states: { 51 | * // code added by `callback` goes here 52 | * },` 53 | * @see https://xstate.js.org/docs/guides/states.html#states 54 | */ 55 | statesBlock(callback: () => void) { writer.write('states:').inlineBlock(callback).write(',').newLine() }, 56 | 57 | /** 58 | * Create a new state node block. 59 | * @example `: { 60 | * // code added by `callback` goes here 61 | * },` 62 | */ 63 | stateBlock(stateName: string, callback: () => void) { writer.write(stateName).write(':').inlineBlock(callback).write(',').newLine() }, 64 | 65 | /** 66 | * Create a new events block to list all the events of a state node. 67 | * @example `on: { 68 | * // code added by `callback` goes here 69 | * },` 70 | */ 71 | eventsBlock(callback: () => void) { writer.write('on:').inlineBlock(callback).write(',').newLine() }, 72 | 73 | /** 74 | * Create a `event: destination` pair. 75 | * @example `: '',` 76 | */ 77 | eventGoTo(eventName: string, destinationState: string) { writer.write(eventName).write(':').quote().write(destinationState).quote().write(',').newLine() }, 78 | 79 | /** 80 | * Create a `after` block that hosts delayed events. 81 | * @example `after: { 82 | * : '<(destinationState>, 83 | * }, 84 | * @see https://xstate.js.org/docs/guides/delays.html#delayed-events 85 | * @todo Support multiple delayed events 86 | */ 87 | eventAfterDelay(destinationState: string, delay: number) { 88 | writer.write('after:').inlineBlock(() => { 89 | writer.write(delay.toString()).write(':').quote() 90 | writer.write(destinationState).quote().write(',').newLine() 91 | }).write(',') 92 | }, 93 | } 94 | } 95 | 96 | export function generateXStateV4StateMachineOptions(params: GeneratorOptions) { 97 | const { 98 | writer, 99 | figmaAgnosticDescriptor: { simplifiedFrames, pageName }, 100 | } = params 101 | 102 | const w = createWriterUtils(writer) 103 | 104 | const firstFrame = simplifiedFrames[0] 105 | if (!firstFrame) 106 | throw new Error('The document contains no frames.') 107 | 108 | const machineId = normalizeString(pageName) 109 | 110 | w.stateMachineConfig(() => { 111 | w.stateId(machineId) 112 | w.initialState(firstFrame.name) 113 | w.statesBlock(() => { 114 | for (const simplifiedFrame of simplifiedFrames) { 115 | // TODO: Support frames with same name 116 | const frameStateId = normalizeString(simplifiedFrame.name) 117 | 118 | // ex. Frame_1 119 | w.stateBlock(frameStateId, () => { 120 | // State body 121 | const containStateEvents = simplifiedFrame.reactionsData.length > 0 122 | if (!containStateEvents) { 123 | // --> type: 'final' 124 | w.finalType() 125 | return 126 | } 127 | 128 | const containDelayedReactions = simplifiedFrame.reactionsData.some(reactionData => 'delay' in reactionData) 129 | const containOnScrollReactions = simplifiedFrame.reactionsData.some(reactionData => reactionData.navigationType === 'SCROLL_TO') 130 | const requireSubStates = containDelayedReactions || containOnScrollReactions 131 | 132 | if (requireSubStates) { 133 | // TODO: make sure the id is unique 134 | w.stateId(frameStateId) 135 | 136 | w.initialState('idle') 137 | w.statesBlock(() => { 138 | // Idle state 139 | // --> idle:{}, 140 | w.idleState() 141 | 142 | // Delayed navigation states 143 | for (const reactionData of simplifiedFrame.reactionsData) { 144 | const isDelayedReaction = ('delay' in reactionData) && reactionData.navigationType === 'NAVIGATE' 145 | if (!isDelayedReaction) 146 | continue 147 | 148 | // Filter out reactions with delay = 0 149 | if (typeof reactionData.delay === 'undefined') 150 | continue 151 | 152 | const { 153 | delay, 154 | triggerType, 155 | generatedName, 156 | destinationFrameName, 157 | } = reactionData 158 | 159 | // ex. MOUSE_UP__AFTER_ 160 | const stateName = `${normalizeString(`${triggerType}_${generatedName.toUpperCase()}`)}_AFTER_${delay}` 161 | // ex. #Page_1. 162 | const destinationPath = `#${machineId}.${normalizeString(destinationFrameName)}` 163 | 164 | w.stateBlock(stateName, () => w.eventAfterDelay(destinationPath, delay)) 165 | } 166 | 167 | // Scrollable states 168 | for (const reactionData of simplifiedFrame.reactionsData) { 169 | if (reactionData.navigationType !== 'SCROLL_TO') 170 | continue 171 | 172 | w.stateBlock(normalizeString(reactionData.destinationNodeName), () => {}) 173 | } 174 | }) 175 | } 176 | 177 | w.eventsBlock(() => { 178 | // State events (without delay) 179 | for (const reactionData of simplifiedFrame.reactionsData) { 180 | if (reactionData.navigationType !== 'NAVIGATE') 181 | continue 182 | if (('delay' in reactionData && typeof reactionData.delay !== 'undefined')) 183 | continue 184 | 185 | // ex. ON_CLICK_NAVIGATE_TO_FRAME_3 186 | const eventName = normalizeString(`${reactionData.triggerType}_${reactionData.generatedName.toUpperCase()}`) 187 | 188 | w.eventGoTo(eventName, normalizeString(reactionData.destinationFrameName)) 189 | } 190 | 191 | // State events (with delay) 192 | for (const reactionData of simplifiedFrame.reactionsData) { 193 | if (!('delay' in reactionData)) 194 | continue 195 | 196 | // ex. MOUSE_UP_NAVIGATE_TO_FRAME_2 197 | const eventName = normalizeString(`${reactionData.triggerType}_${reactionData.generatedName.toUpperCase()}`) 198 | // ex. MOUSE_UP_NAVIGATE_TO_FRAME_2_AFTER_2000 199 | const destinationStateName = `${eventName}_AFTER_${reactionData.delay}` 200 | 201 | // ex. #Frame_1.MOUSE_UP_NAVIGATE_TO_FRAME_2_AFTER_2000 202 | const fullDestination = `#${frameStateId}.${destinationStateName}` 203 | 204 | // --> MOUSE_UP_NAVIGATE_TO_FRAME_2: '#Frame_1.MOUSE_UP_NAVIGATE_TO_FRAME_2_AFTER_2000', 205 | w.eventGoTo(eventName, fullDestination) 206 | } 207 | 208 | // Scrollable states 209 | for (const reactionData of simplifiedFrame.reactionsData) { 210 | if (reactionData.navigationType !== 'SCROLL_TO') 211 | continue 212 | 213 | // ex. ??????? 214 | const eventName = normalizeString(`${reactionData.triggerType}_${reactionData.generatedName.toUpperCase()}_${reactionData.navigationType}`) 215 | 216 | // TODO: convert statesPath back to pageId 217 | // TODO: support destinations with same name 218 | const statePath = `#${machineId}.${frameStateId}.${normalizeString(reactionData.destinationNodeName)}` 219 | 220 | w.eventGoTo(eventName, statePath) 221 | } 222 | }) 223 | }) 224 | } 225 | }) 226 | }) 227 | 228 | return writer 229 | } 230 | 231 | export function generateXStateV4Machine(params: GeneratorOptions) { 232 | generateXStateV4StateMachineOptions(params) 233 | } 234 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { on, showUI } from '@create-figma-plugin/utilities' 2 | import type { FigmaAgnosticDescriptor } from './types' 3 | import { type GeneratorOptions, generateXStateV4Machine } from './generators' 4 | import { traversePage } from './traverse' 5 | import { generateNewWriter } from './utils' 6 | 7 | const uiOptions = { width: 480, height: 240 } as const 8 | 9 | function run() { 10 | // -------------------------------------------------- 11 | // TRAVERSE 12 | const { simplifiedFrames } = traversePage() 13 | 14 | // -------------------------------------------------- 15 | 16 | const figmaAgnosticDescriptor: FigmaAgnosticDescriptor = { 17 | pageName: figma.currentPage.name, 18 | simplifiedFrames, 19 | 20 | } 21 | 22 | const writer = generateNewWriter() 23 | 24 | const generatorOptions: GeneratorOptions = { 25 | writer, 26 | figmaAgnosticDescriptor, 27 | } 28 | 29 | console.log('generatorOptions', JSON.stringify(figmaAgnosticDescriptor), null, 2) 30 | 31 | // return 32 | 33 | // -------------------------------------------------- 34 | // GENERATE 35 | generateXStateV4Machine(generatorOptions) 36 | // -------------------------------------------------- 37 | 38 | return writer.toString() 39 | } 40 | 41 | function runAndShowResult() { 42 | showUI(uiOptions, { generatedXStateConfig: run() }) 43 | } 44 | 45 | export default function main() { 46 | runAndShowResult() 47 | 48 | // UI EVENTS 49 | on('REGENERATE', runAndShowResult) 50 | } 51 | -------------------------------------------------------------------------------- /src/traverse.ts: -------------------------------------------------------------------------------- 1 | import { isFrame } from './types' 2 | import type { SimplifiedFrame, SimplifiedFrames } from './types' 3 | import { 4 | assertIsDefined, 5 | findParentRootFrame, 6 | getOnClickReactionData, 7 | getOnDragReactionData, 8 | getOnMouseEventReactionData, 9 | isRootFrame, 10 | } from './utils' 11 | 12 | export function traversePage() { 13 | const simplifiedFrames: SimplifiedFrames = [] 14 | const simplifiedFramesById: Record = {} 15 | 16 | const { skipInvisibleInstanceChildren: skipInvisibleInstanceChildrenBackup } = figma 17 | 18 | // Skip over invisible nodes and their descendants inside instances for faster performance. 19 | figma.skipInvisibleInstanceChildren = true 20 | 21 | // Loop optimized to traverse the full document only once 22 | figma.currentPage.findAll((node) => { 23 | if (isFrame(node) && isRootFrame(node)) { 24 | simplifiedFramesById[node.id] ??= { id: node.id, name: node.name, reactionsData: [] } 25 | const simplifiedFrame = simplifiedFramesById[node.id] 26 | assertIsDefined(simplifiedFrame, `Unexisting frame (node id ${node.id})`) 27 | 28 | simplifiedFrames.push(simplifiedFrame) 29 | } 30 | 31 | const onDragReactionData = getOnDragReactionData({ node }) 32 | const onClickReactionData = getOnClickReactionData({ node }) 33 | const onMouseEventReactionData = getOnMouseEventReactionData({ node }) 34 | 35 | if ( 36 | onDragReactionData.length 37 | || onClickReactionData.length 38 | || onMouseEventReactionData.length 39 | 40 | ) { 41 | const rootFrameId = findParentRootFrame(node).id 42 | 43 | const rootFrame = simplifiedFramesById[rootFrameId] 44 | assertIsDefined(rootFrame, `Root Frame not found (node id ${rootFrameId})`) 45 | 46 | const reactionsData = [ 47 | ...onDragReactionData, 48 | ...onClickReactionData, 49 | ...onMouseEventReactionData, 50 | ] 51 | 52 | rootFrame.reactionsData.push(...reactionsData) 53 | } 54 | 55 | // Ensure the loop traverses the full document 56 | return false 57 | }) 58 | 59 | // Restore the original value 60 | figma.skipInvisibleInstanceChildren = skipInvisibleInstanceChildrenBackup 61 | 62 | return { simplifiedFrames } 63 | } 64 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------- 2 | // TYPES 3 | // -------------------------------------------------- 4 | 5 | /** 6 | * Contain all the Figma prototype-related but agnostic data useful to generate the state machine. 7 | * The object is a proxy between the traversed Figma document and the state machine generators. 8 | */ 9 | export interface FigmaAgnosticDescriptor { 10 | readonly pageName: string 11 | /** 12 | * A tree that reflects the Figma document structure, which contains only the frames and the 13 | * interactive nodes that belong to the frames. Compared to a standard tree, there are multiple 14 | * root frames. 15 | */ 16 | readonly simplifiedFrames: SimplifiedFrames 17 | 18 | } 19 | 20 | export type SimplifiedFrames = SimplifiedFrame[] 21 | 22 | export type SimplifiedFrame = Pick & { 23 | reactionsData: ReactionData[] 24 | } 25 | 26 | export type ReactionData = ReactionDataCommonProperties & ReactionDataTriggerProperties & ReactionDataNavigationProperties 27 | 28 | export interface ReactionDataCommonProperties { 29 | // The node name or the name of the first text element found inside 30 | generatedName: string 31 | } 32 | 33 | export type ReactionDataTriggerProperties = { 34 | triggerType: 'ON_CLICK' | 'ON_DRAG' 35 | } 36 | | { 37 | triggerType: 'MOUSE_ENTER' | 'MOUSE_LEAVE' | 'MOUSE_UP' | 'MOUSE_DOWN' 38 | 39 | // In the Figma UI, the delay can be set only if the device is mobile and the events are 40 | // MOUSE_LEAVE, MOUSE_ENTER, TOUCH_DOWN, TOUCH_UP even if the TOUCH events are typed as mouse 41 | // ones. It's better to specify this detail in the docs. If the delay is 0, the property is not defined 42 | delay?: MillisecondsGreaterThanZero 43 | } 44 | 45 | type ReactionDataNavigationProperties = { 46 | navigationType: 'NAVIGATE' 47 | destinationFrameId: string 48 | destinationFrameName: string 49 | } | { 50 | navigationType: 'SCROLL_TO' 51 | destinationNodeId: string 52 | destinationNodeName: string 53 | } 54 | 55 | type MillisecondsGreaterThanZero = number 56 | 57 | // -------------------------------------------------- 58 | // GUARDS 59 | // -------------------------------------------------- 60 | 61 | export function isFrame(node: SceneNode): node is FrameNode { 62 | return node.type === 'FRAME' 63 | } 64 | 65 | export function isGroup(node: BaseNode): node is GroupNode { 66 | return node.type === 'GROUP' 67 | } 68 | -------------------------------------------------------------------------------- /src/ui.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'preact/hooks' 2 | import { copyToClipboard } from 'figx' 3 | 4 | import { 5 | Banner, 6 | Button, 7 | Code, 8 | Container, 9 | IconWarning32, 10 | Stack, 11 | Text, 12 | render, 13 | } from '@create-figma-plugin/ui' 14 | import { emit } from '@create-figma-plugin/utilities' 15 | 16 | function SomethingWentWrong({ reason }: { reason: string }) { 17 | return ( 18 | } variant="warning"> 19 | Something went wrong ( 20 | {reason} 21 | ) 22 | 23 | ) 24 | } 25 | 26 | function PrintXStateV4Config({ generatedXStateConfig }: { generatedXStateConfig: string }) { 27 | useEffect(() => { 28 | copyToClipboard(generatedXStateConfig) 29 | }, [generatedXStateConfig]) 30 | 31 | return ( 32 | 33 | The XState V4 config has been copied to clipboard. 34 | 35 | {generatedXStateConfig} 36 | 37 | 38 | 39 | ) 40 | } 41 | 42 | function RegenerateButton({ handleClick }: { handleClick: () => void }) { 43 | return ( 44 | 45 | 48 | 49 | ) 50 | } 51 | 52 | /** 53 | * The UI entry point rendered by create-figma-plugin 54 | */ 55 | function UI({ generatedXStateConfig }: { generatedXStateConfig: unknown }) { 56 | if (typeof generatedXStateConfig !== 'string') { 57 | console.log({ generatedXStateConfig }) 58 | return 59 | } 60 | 61 | return ( 62 | 63 | 64 | 65 | { 66 | emit('REGENERATE') 67 | }} 68 | /> 69 | 70 | 71 | ) 72 | } 73 | 74 | export default render(UI) 75 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import CodeBlockWriter from 'code-block-writer' 2 | import { isGroup } from './types' 3 | import type { ReactionData, ReactionDataCommonProperties, ReactionDataTriggerProperties } from './types' 4 | 5 | export function generateNewWriter() { 6 | return new CodeBlockWriter({ 7 | useTabs: false, 8 | useSingleQuote: true, 9 | indentNumberOfSpaces: 2, 10 | }) 11 | } 12 | 13 | export function generateNodeName(node: BaseNode) { 14 | return isGroup(node) ? generateGroupName(node) : node.name 15 | } 16 | 17 | function generateGroupName(node: GroupNode) { 18 | const groupHasGenericName = /^Group\s\d+$/.test(node.name) 19 | if (!groupHasGenericName) 20 | return node.name 21 | 22 | let childName = '' 23 | 24 | node.findAll((child) => { 25 | if (childName) 26 | return false 27 | if (child.type === 'TEXT') 28 | childName = child.name 29 | 30 | return false 31 | }) 32 | 33 | return childName || node.name 34 | } 35 | 36 | export function normalizeString(str: string) { 37 | return str.trim().replace(/[^a-zA-Z0-9]/g, '_') 38 | } 39 | 40 | export function getOnClickReactionData(params: { 41 | 42 | node: SceneNode 43 | 44 | }): ReactionData[] { 45 | const { node } = params 46 | 47 | if (!('reactions' in node)) 48 | return [] 49 | 50 | const result: ReactionData[] = [] 51 | 52 | for (const reaction of node.reactions) { 53 | if (!reaction.trigger) 54 | continue 55 | if (reaction.trigger.type !== 'ON_CLICK') 56 | continue 57 | if (!reaction.action) 58 | continue 59 | if (reaction.action.type !== 'NODE') 60 | continue 61 | if (!reaction.action.destinationId) 62 | continue 63 | 64 | if (reaction.action.navigation === 'NAVIGATE') { 65 | result.push({ 66 | triggerType: reaction.trigger.type, 67 | navigationType: reaction.action.navigation, 68 | destinationFrameId: reaction.action.destinationId, 69 | destinationFrameName: generateNodeName(figma.getNodeById(reaction.action.destinationId)!), 70 | generatedName: generateNodeName(node), 71 | }) 72 | } 73 | if (reaction.action.navigation === 'SCROLL_TO') { 74 | result.push({ 75 | triggerType: reaction.trigger.type, 76 | navigationType: reaction.action.navigation, 77 | destinationNodeId: reaction.action.destinationId, 78 | destinationNodeName: generateNodeName(figma.getNodeById(reaction.action.destinationId)!), 79 | generatedName: generateNodeName(node), 80 | }) 81 | } 82 | } 83 | return result 84 | } 85 | 86 | export function getOnDragReactionData(params: { 87 | node: SceneNode 88 | 89 | }): ReactionData[] { 90 | const { node } = params 91 | 92 | if (!('reactions' in node)) 93 | return [] 94 | 95 | const result: ReactionData[] = [] 96 | 97 | for (const reaction of node.reactions) { 98 | if (!reaction.trigger) 99 | continue 100 | if (reaction.trigger.type !== 'ON_DRAG') 101 | continue 102 | if (!reaction.action) 103 | continue 104 | if (reaction.action.type !== 'NODE') 105 | continue 106 | if (!reaction.action.destinationId) 107 | continue 108 | 109 | if (reaction.action.navigation === 'NAVIGATE') { 110 | result.push({ 111 | triggerType: reaction.trigger.type, 112 | navigationType: reaction.action.navigation, 113 | destinationFrameId: reaction.action.destinationId, 114 | destinationFrameName: generateNodeName(figma.getNodeById(reaction.action.destinationId)!), 115 | generatedName: generateNodeName(node), 116 | }) 117 | } 118 | if (reaction.action.navigation === 'SCROLL_TO') { 119 | result.push({ 120 | triggerType: reaction.trigger.type, 121 | navigationType: reaction.action.navigation, 122 | destinationNodeId: reaction.action.destinationId, 123 | destinationNodeName: generateNodeName(figma.getNodeById(reaction.action.destinationId)!), 124 | generatedName: generateNodeName(node), 125 | }) 126 | } 127 | } 128 | 129 | return result 130 | } 131 | 132 | export function getOnMouseEventReactionData(params: { 133 | node: SceneNode 134 | 135 | }): ReactionData[] { 136 | const { node } = params 137 | 138 | if (!('reactions' in node)) 139 | return [] 140 | 141 | const result: ReactionData[] = [] 142 | 143 | for (const reaction of node.reactions) { 144 | if (!reaction.trigger) 145 | continue 146 | 147 | if ( 148 | reaction.trigger.type !== 'MOUSE_ENTER' 149 | && reaction.trigger.type !== 'MOUSE_LEAVE' 150 | && reaction.trigger.type !== 'MOUSE_UP' 151 | && reaction.trigger.type !== 'MOUSE_DOWN' 152 | ) 153 | continue 154 | 155 | if (!reaction.action) 156 | continue 157 | if (reaction.action.type !== 'NODE') 158 | continue 159 | if (!reaction.action.destinationId) 160 | continue 161 | 162 | const navigationNodeCommonProperties: ReactionDataCommonProperties & ReactionDataTriggerProperties = { 163 | triggerType: reaction.trigger.type, 164 | generatedName: generateNodeName(node), 165 | } 166 | 167 | // TODO: tell the user in case the delay is set to 0 168 | if (reaction.trigger.delay > 0) { 169 | // In the Figma UI, the delay can be set only if the device is mobile and the events are 170 | // MOUSE_LEAVE, MOUSE_ENTER, TOUCH_DOWN, TOUCH_UP even if the TOUCH events are typed as mouse 171 | // ones. It's better to specify this detail in the docs 172 | navigationNodeCommonProperties.delay = reaction.trigger.delay * 1000 173 | } 174 | 175 | if (reaction.action.navigation === 'NAVIGATE') { 176 | result.push({ 177 | ...navigationNodeCommonProperties, 178 | navigationType: reaction.action.navigation, 179 | destinationFrameId: reaction.action.destinationId, 180 | destinationFrameName: generateNodeName(figma.getNodeById(reaction.action.destinationId)!), 181 | }) 182 | // Can't break because the same node can have multiple mouse reactions 183 | } 184 | if (reaction.action.navigation === 'SCROLL_TO') { 185 | result.push({ 186 | ...navigationNodeCommonProperties, 187 | navigationType: reaction.action.navigation, 188 | destinationNodeId: reaction.action.destinationId, 189 | destinationNodeName: generateNodeName(figma.getNodeById(reaction.action.destinationId)!), 190 | 191 | }) 192 | // Can't break because the same node can have multiple mouse reactions 193 | } 194 | } 195 | 196 | return result 197 | } 198 | 199 | export function findParentRootFrame(node: BaseNode) { 200 | const parent = node.parent 201 | 202 | assertIsDefined(parent, `Parentless nodes are not expected (node id: ${node.id})`) 203 | 204 | if (parent.type === 'FRAME' && isRootFrame(parent)) 205 | return parent 206 | 207 | return findParentRootFrame(parent) 208 | } 209 | 210 | export function isRootFrame(node: FrameNode) { 211 | if (node.parent?.type === 'FRAME') 212 | return false 213 | 214 | return true 215 | } 216 | 217 | export function assertIsDefined(value: T, errorMessage: string): asserts value is NonNullable { 218 | if (value === undefined || value === null) 219 | throw new Error(`${value} is not defined (${errorMessage})`) 220 | } 221 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@create-figma-plugin/tsconfig", 3 | "compilerOptions": { 4 | // These are the default Figma plugin settings that, for instance, forbid accessing `navigator` 5 | // (while create-figma-plugin does not forbid it) 6 | "target": "es6", 7 | "jsx": "react-jsx", 8 | "jsxFactory": "", 9 | "jsxFragmentFactory": "", 10 | "jsxImportSource": "preact", 11 | "lib": ["es6"], 12 | "typeRoots": ["./node_modules/@types", "./node_modules/@figma"], 13 | "strict": true, 14 | "noUncheckedIndexedAccess": true, 15 | "skipLibCheck": true 16 | }, 17 | "include": ["src/**/*.ts", "src/**/*.tsx"], 18 | "exclude": [ 19 | "src/**/*.test.ts" 20 | ] 21 | } 22 | --------------------------------------------------------------------------------