From 5a8dc3b057ffc202879c89a07800c2c11021bebe Mon Sep 17 00:00:00 2001 From: DrHaid <40427630+DrHaid@users.noreply.github.com> Date: Sat, 13 Dec 2025 14:09:00 +0100 Subject: [PATCH] Initial commit 2 --- .gitignore | 24 + README.md | 26 +- app.html | 15 + docs/todo-tree.png | Bin 0 -> 54100 bytes global.d.ts | 2 + index.html | 36 + package-lock.json | 1675 ++++++++++++++++++++++++++++++++++++++++++ package.json | 24 + src/app.tsx | 39 + src/assets/style.css | 22 + src/index.ts | 87 +++ tsconfig.json | 37 + vite.config.ts | 31 + 13 files changed, 2016 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 app.html create mode 100644 docs/todo-tree.png create mode 100644 global.d.ts create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/app.tsx create mode 100644 src/assets/style.css create mode 100644 src/index.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b05b37f --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.next + +# testing +/coverage + +# misc +.DS_Store +*.pem +.idea + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env +dist diff --git a/README.md b/README.md index f167422..683c3a6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,24 @@ -# todo-tree-chopper -Miro app for chopping down TODO trees +## TODO Tree Chopper + +Efficiently chop down your TODO trees in Miro 👌 + +![todo-tree](./docs/todo-tree.png) + +### How to start locally + +- Run `npm i` to install dependencies. +- Run `npm start` to start developing. \ + Your URL should be similar to this example: + ``` + http://localhost:3000 + ``` +- Paste the URL under **App URL** in your + [app settings](https://developers.miro.com/docs/build-your-first-hello-world-app#step-3-configure-your-app-in-miro). +- Open a board; you should see your app in the app toolbar or in the **Apps** + panel. + +### How to build the app + +- Run `npm run build`. \ + This generates a static output inside [`dist/`](./dist), which you can host on a static hosting + service. \ No newline at end of file diff --git a/app.html b/app.html new file mode 100644 index 0000000..6ba2554 --- /dev/null +++ b/app.html @@ -0,0 +1,15 @@ + + + + + + + TODO Tree Chopper 🪓 + + + +
+ + + + diff --git a/docs/todo-tree.png b/docs/todo-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..3b9c68f7aaebd8638a18d5748c05147edb9cfae6 GIT binary patch literal 54100 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 diff --git a/index.html b/index.html new file mode 100644 index 0000000..44cea73 --- /dev/null +++ b/index.html @@ -0,0 +1,36 @@ + + + + + + + + TODO Tree Chopper + + +

+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8b0401e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1675 @@ +{ + "name": "todo-tree-chopper", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "todo-tree-chopper", + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "mirotone": "5", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@mirohq/websdk-types": "latest", + "@types/node": "^18.8.2", + "@types/react": "^18.0.24", + "@types/react-dom": "^18.0.8", + "@vitejs/plugin-react": "^2.2.0", + "typescript": "4.9.5", + "vite": "3.0.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mirohq/design-tokens": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@mirohq/design-tokens/-/design-tokens-5.1.1.tgz", + "integrity": "sha512-PcCA7HlumSSaRkAIlrB4+CKhFyF+w93q1SnbIL6zPM69hzN9kJD7zNUk2ngGJpDcQseRyoE+uJkN8f+WRvp0Lg==" + }, + "node_modules/@mirohq/websdk-types": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/@mirohq/websdk-types/-/websdk-types-2.17.2.tgz", + "integrity": "sha512-XpAW438zn/bEV4YHSlBgAoQbSyr5xvptpfE11++uVbbK031DZ5v8YrTSJLdoTCc/Z6hERmqRUNaM7vDpMx0kJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "typescript": ">=4.6.3 || ~5" + }, + "peerDependencies": { + "@mirohq/prettier-config": "*", + "@typescript-eslint/eslint-plugin": "*", + "@typescript-eslint/parser": "*", + "eslint": "*", + "eslint-config-airbnb-typescript": "*", + "eslint-plugin-import": "*", + "husky": "*", + "lint-staged": "*", + "prettier": "*" + }, + "peerDependenciesMeta": { + "@mirohq/prettier-config": { + "optional": true + }, + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + }, + "eslint": { + "optional": true + }, + "eslint-config-airbnb-typescript": { + "optional": true + }, + "eslint-plugin-import": { + "optional": true + }, + "husky": { + "optional": true + }, + "lint-staged": { + "optional": true + }, + "prettier": { + "optional": true + } + } + }, + "node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", + "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz", + "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-jsx": "^7.19.0", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.26.7", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.7", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.7.tgz", + "integrity": "sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001760", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", + "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "license": "MIT" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/cloneable-readable/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/cloneable-readable/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/cloneable-readable/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/gulp-file": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/gulp-file/-/gulp-file-0.4.0.tgz", + "integrity": "sha512-3NPCJpAPpbNoV2aml8T96OK3Aof4pm4PMOIa1jSQbMNSNUUXdZ5QjVgLXLStjv0gg9URcETc7kvYnzXdYXUWug==", + "license": "BSD", + "dependencies": { + "through2": "^0.4.1", + "vinyl": "^2.1.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mirotone": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/mirotone/-/mirotone-5.3.2.tgz", + "integrity": "sha512-LSzXFV4YLdk6VaPj37oIAYMwLaMyLqYi6EgcvAJAzvj8k1vYGtvfjYVZqWd/Hgb7XCb5x1hV49+oT9vTF7a9wQ==", + "license": "MIT", + "dependencies": { + "@mirohq/design-tokens": "5.1.1", + "gulp-file": "^0.4.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "license": "MIT" + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "license": "ISC" + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true, + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "license": "MIT", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vite": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.3.tgz", + "integrity": "sha512-sDIpIcl3mv1NUaSzZwiXGEy1ZoWwwC2vkxUHY6yiDacR6zf//ZFuBJrozO62gedpE43pmxnLATNR5IYUdAEkMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.14.47", + "postcss": "^8.4.14", + "resolve": "^1.22.1", + "rollup": "^2.75.6" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8b63704 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "todo-tree-chopper", + "version": "0.1.0", + "license": "MIT", + "scripts": { + "start": "vite", + "build": "vite build", + "serve": "vite preview" + }, + "dependencies": { + "mirotone": "5", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "vite": "3.0.3", + "@mirohq/websdk-types": "latest", + "@types/react": "^18.0.24", + "@types/react-dom": "^18.0.8", + "@vitejs/plugin-react": "^2.2.0", + "typescript": "4.9.5", + "@types/node": "^18.8.2" + } +} diff --git a/src/app.tsx b/src/app.tsx new file mode 100644 index 0000000..7a29307 --- /dev/null +++ b/src/app.tsx @@ -0,0 +1,39 @@ +import * as React from 'react'; +import {createRoot} from 'react-dom/client'; + +import '../src/assets/style.css'; +import { findExistingAxe } from '.'; + +const App: React.FC = () => { + const addAxe = async () => { + var axe = await findExistingAxe() + if (!axe) { + axe = await miro.board.createImage({ + url: 'https://www.svgrepo.com/show/395800/axe.svg', + width: 200, + title: 'todo-tree-axe' + }); + } + + await miro.board.viewport.zoomTo(axe); + }; + + return ( +
+
+

TODO Tree Chopper 🪓

+
+
+ +
+
+ ); +}; + +const container = document.getElementById('root'); +if (container) { + const root = createRoot(container); + root.render(); +} diff --git a/src/assets/style.css b/src/assets/style.css new file mode 100644 index 0000000..960cfa6 --- /dev/null +++ b/src/assets/style.css @@ -0,0 +1,22 @@ +@import 'mirotone/dist/styles.css'; + +*, +*:before, +*:after { + box-sizing: border-box; +} + +body { + display: flex; +} + +#root { + width: 100%; + overflow: auto; + padding: var(--space-medium); +} + +img { + max-width: 100%; + height: auto; +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..a7a1f8e --- /dev/null +++ b/src/index.ts @@ -0,0 +1,87 @@ +import { StickyNote, Image } from "@mirohq/websdk-types"; + +export async function init() { + miro.board.ui.on('icon:click', async () => { + await miro.board.ui.openPanel({ url: 'app.html' }); + }); + + await miro.board.ui.on('custom:chop-todo-tree', handleChoppingAction); + await miro.board.experimental.action.register( + { + "event": "chop-todo-tree", + "ui": { + "label": { + "en": "Chop TODO tree", + }, + "icon": "scissors", + "description": "Chop down TODO tree staring here", + }, + "scope": "local", + "predicate": { + "type": "sticky_note" + }, + "contexts": { + "item": {} + } + } + ); +} + +interface AxeAnimationArgs { + axe: Image, + stickyNote: StickyNote, + onChopped: () => void +} + +const playAxeAnimation = async ({axe, stickyNote, onChopped}: AxeAnimationArgs) => { + await miro.board.bringToFront(axe); + axe.x = stickyNote.x; + axe.y = stickyNote.y; + await axe.sync(); + + for (let i = 0; i < 3; i++) { + axe.rotation = 90; + await axe.sync(); + await new Promise(resolve => setTimeout(resolve, 200)); + + axe.rotation = 0; + await axe.sync(); + await new Promise(resolve => setTimeout(resolve, 200)); + } + + onChopped(); +} + +async function postInfoNotification(message: string) { + await miro.board.notifications.showInfo(message); +} + +const handleChoppingAction = async ({items}: {items:StickyNote[]}) => { + const axe = await findExistingAxe(); + + if (items.length === 0) { + postInfoNotification("Couldn't find anything to chop 🤔") + return; + } + + if (!axe) { + postInfoNotification('No axe found. Create it first.'); + return; + } + + const target = items[0]; + playAxeAnimation({ + axe, + stickyNote: target, + onChopped: async () => await miro.board.remove(target) + }); +}; + +export const findExistingAxe = async () => { + const items = await miro.board.get({ type: 'image' }); + const axe = items.find(item => item.title === 'todo-tree-axe'); + return axe; +}; + + +init(); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..641615d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "lib": [ + "esnext", + "dom" + ], + "jsx": "preserve", + "moduleResolution": "node", + "strict": true, + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "noEmit": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "typeRoots": [ + "./node_modules/@types", + "./node_modules/@mirohq" + ], + "allowJs": true, + "incremental": true, + "isolatedModules": true + }, + "include": [ + "src", + "pages", + "*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..c2d7967 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,31 @@ +import path from 'path'; +import fs from 'fs'; +import dns from 'dns'; +import {defineConfig} from 'vite'; +import react from '@vitejs/plugin-react'; + +// https://vitejs.dev/config/server-options.html#server-host +dns.setDefaultResultOrder('verbatim'); + +// make sure vite picks up all html files in root, needed for vite build +const allHtmlEntries = fs + .readdirSync('.') + .filter((file) => path.extname(file) === '.html') + .reduce((acc, file) => { + acc[path.basename(file, '.html')] = path.resolve(__dirname, file); + + return acc; + }, {}); + +// https://vitejs.dev/config/ +export default defineConfig({ + build: { + rollupOptions: { + input: allHtmlEntries, + }, + }, + plugins: [react()], + server: { + port: 3000, + }, +});