diff --git a/package.json b/package.json index f32b5ec..386f921 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kevisual/ai-pages", - "version": "0.0.1", + "version": "0.0.2", "description": "", "main": "index.js", "basename": "/root/ai-pages", @@ -8,7 +8,7 @@ "dev": "astro dev", "build": "astro build", "preview": "astro preview", - "pub": "ev deploy ./dist -k ai-pages -v 0.0.1 -u", + "pub": "ev deploy ./dist -k ai-pages -v 0.0.2 -u", "git:submodule": "git submodule update --init --recursive", "sn": "pnpm dlx shadcn@latest add " }, @@ -21,24 +21,26 @@ "@astrojs/react": "^4.3.0", "@astrojs/sitemap": "^3.4.0", "@kevisual/cache": "^0.0.3", + "@kevisual/codemirror": "^0.0.12", "@kevisual/query-login": "^0.0.6", "@kevisual/registry": "^0.0.1", "@radix-ui/react-alert-dialog": "^1.1.14", "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-label": "^2.1.7", "@radix-ui/react-popover": "^1.1.14", "@radix-ui/react-select": "^2.2.5", "@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-tooltip": "^1.2.7", - "@tailwindcss/vite": "^4.1.7", - "astro": "^5.8.0", + "@tailwindcss/vite": "^4.1.8", + "astro": "^5.8.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "dayjs": "^1.11.13", "fuse.js": "^7.1.0", "highlight.js": "^11.11.1", - "i18next": "^25.2.0", + "i18next": "^25.2.1", "i18next-browser-languagedetector": "^8.1.0", "i18next-http-backend": "^3.0.2", "lodash-es": "^4.17.21", @@ -51,6 +53,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-draggable": "^4.4.6", + "react-dropzone": "^14.3.8", "react-hook-form": "^7.56.4", "react-i18next": "^15.5.2", "react-resizable-panels": "^3.0.2", @@ -64,22 +67,26 @@ "access": "public" }, "devDependencies": { + "@excalidraw/excalidraw": "^0.18.0", "@kevisual/markdown-editor": "workspace:*", "@kevisual/query": "^0.0.20", "@kevisual/query-awesome": "^0.0.2", "@kevisual/router": "^0.0.21", - "@kevisual/store": "^0.0.8", + "@kevisual/store": "^0.0.9", "@kevisual/types": "^0.0.10", + "@types/crypto-js": "^4.2.2", "@types/lodash-es": "^4.17.12", - "@types/react": "^19.1.5", + "@types/react": "^19.1.6", "@types/react-dom": "^19.1.5", "@types/sortablejs": "^1.15.8", "@vitejs/plugin-basic-ssl": "^2.0.0", "commander": "^14.0.0", + "crypto-js": "^4.2.0", "dotenv": "^16.5.0", + "idb-keyval": "^6.2.2", "inquire": "^0.4.8", - "tailwindcss": "^4.1.7", - "tw-animate-css": "^1.3.0", + "tailwindcss": "^4.1.8", + "tw-animate-css": "^1.3.3", "vite-plugin-remote-assets": "^2.0.0" }, "packageManager": "pnpm@10.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5140831..6ca8979 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,16 +10,19 @@ importers: dependencies: '@astrojs/mdx': specifier: ^4.3.0 - version: 4.3.0(astro@5.8.0(@types/node@22.15.21)(idb-keyval@6.2.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(typescript@5.8.3)) + version: 4.3.0(astro@5.8.1(@types/node@22.15.21)(idb-keyval@6.2.2)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(sass@1.51.0)(typescript@5.8.3)) '@astrojs/react': specifier: ^4.3.0 - version: 4.3.0(@types/node@22.15.21)(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(jiti@2.4.2)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 4.3.0(@types/node@22.15.21)(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(jiti@2.4.2)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.51.0) '@astrojs/sitemap': specifier: ^3.4.0 version: 3.4.0 '@kevisual/cache': specifier: ^0.0.3 version: 0.0.3 + '@kevisual/codemirror': + specifier: ^0.0.12 + version: 0.0.12 '@kevisual/query-login': specifier: ^0.0.6 version: 0.0.6(@kevisual/query@0.0.20(ws@8.18.2)(zod@3.24.3))(rollup@4.40.1)(tslib@2.8.1)(typescript@5.8.3) @@ -28,31 +31,34 @@ importers: version: 0.0.1(typescript@5.8.3) '@radix-ui/react-alert-dialog': specifier: ^1.1.14 - version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-dialog': specifier: ^1.1.14 - version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dropdown-menu': + specifier: ^2.1.15 + version: 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-label': specifier: ^2.1.7 - version: 2.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-popover': specifier: ^1.1.14 - version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-select': specifier: ^2.2.5 - version: 2.2.5(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.2.5(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': specifier: ^1.2.3 - version: 1.2.3(@types/react@19.1.5)(react@19.1.0) + version: 1.2.3(@types/react@19.1.6)(react@19.1.0) '@radix-ui/react-tooltip': specifier: ^1.2.7 - version: 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/vite': - specifier: ^4.1.7 - version: 4.1.7(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)) + specifier: ^4.1.8 + version: 4.1.8(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)) astro: - specifier: ^5.8.0 - version: 5.8.0(@types/node@22.15.21)(idb-keyval@6.2.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(typescript@5.8.3) + specifier: ^5.8.1 + version: 5.8.1(@types/node@22.15.21)(idb-keyval@6.2.2)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(sass@1.51.0)(typescript@5.8.3) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -61,7 +67,7 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.1(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) dayjs: specifier: ^1.11.13 version: 1.11.13 @@ -72,8 +78,8 @@ importers: specifier: ^11.11.1 version: 11.11.1 i18next: - specifier: ^25.2.0 - version: 25.2.0(typescript@5.8.3) + specifier: ^25.2.1 + version: 25.2.1(typescript@5.8.3) i18next-browser-languagedetector: specifier: ^8.1.0 version: 8.1.0 @@ -110,12 +116,15 @@ importers: react-draggable: specifier: ^4.4.6 version: 4.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-dropzone: + specifier: ^14.3.8 + version: 14.3.8(react@19.1.0) react-hook-form: specifier: ^7.56.4 version: 7.56.4(react@19.1.0) react-i18next: specifier: ^15.5.2 - version: 15.5.2(i18next@25.2.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 15.5.2(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react-resizable-panels: specifier: ^3.0.2 version: 3.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -133,8 +142,11 @@ importers: version: 3.3.0 zustand: specifier: ^5.0.5 - version: 5.0.5(@types/react@19.1.5)(immer@10.1.1)(react@19.1.0) + version: 5.0.5(@types/react@19.1.6)(immer@10.1.1)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)) devDependencies: + '@excalidraw/excalidraw': + specifier: ^0.18.0 + version: 0.18.0(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(immer@10.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@kevisual/markdown-editor': specifier: workspace:* version: link:packages/markdown-editor @@ -148,44 +160,53 @@ importers: specifier: ^0.0.21 version: 0.0.21 '@kevisual/store': - specifier: ^0.0.8 - version: 0.0.8 + specifier: ^0.0.9 + version: 0.0.9 '@kevisual/types': specifier: ^0.0.10 version: 0.0.10 + '@types/crypto-js': + specifier: ^4.2.2 + version: 4.2.2 '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 '@types/react': - specifier: ^19.1.5 - version: 19.1.5 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': specifier: ^19.1.5 - version: 19.1.5(@types/react@19.1.5) + version: 19.1.5(@types/react@19.1.6) '@types/sortablejs': specifier: ^1.15.8 version: 1.15.8 '@vitejs/plugin-basic-ssl': specifier: ^2.0.0 - version: 2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)) + version: 2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)) commander: specifier: ^14.0.0 version: 14.0.0 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 dotenv: specifier: ^16.5.0 version: 16.5.0 + idb-keyval: + specifier: ^6.2.2 + version: 6.2.2 inquire: specifier: ^0.4.8 version: 0.4.8 tailwindcss: - specifier: ^4.1.7 - version: 4.1.7 + specifier: ^4.1.8 + version: 4.1.8 tw-animate-css: - specifier: ^1.3.0 - version: 1.3.0 + specifier: ^1.3.3 + version: 1.3.3 vite-plugin-remote-assets: specifier: ^2.0.0 - version: 2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)) + version: 2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)) packages/markdown-editor: dependencies: @@ -242,7 +263,7 @@ importers: version: 8.0.3 idb-keyval: specifier: ^6.2.1 - version: 6.2.1 + version: 6.2.2 immer: specifier: ^10.1.1 version: 10.1.1 @@ -278,7 +299,7 @@ importers: version: 7.2.0 zustand: specifier: ^5.0.3 - version: 5.0.5(@types/react@19.1.5)(immer@10.1.1)(react@19.1.0) + version: 5.0.5(@types/react@19.1.6)(immer@10.1.1)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)) devDependencies: '@kevisual/query': specifier: 0.0.15 @@ -288,34 +309,34 @@ importers: version: 0.0.6 '@tailwindcss/vite': specifier: ^4.1.3 - version: 4.1.7(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)) + version: 4.1.8(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)) '@types/node': specifier: ^22.14.0 version: 22.15.21 '@types/react': specifier: ^19.1.0 - version: 19.1.5 + version: 19.1.6 '@types/react-dom': specifier: ^19.1.1 - version: 19.1.5(@types/react@19.1.5) + version: 19.1.5(@types/react@19.1.6) '@types/turndown': specifier: ^5.0.5 version: 5.0.5 '@vitejs/plugin-basic-ssl': specifier: ^2.0.0 - version: 2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)) + version: 2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.4.1(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)) + version: 4.4.1(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)) tailwindcss: specifier: ^4.1.3 - version: 4.1.7 + version: 4.1.8 typescript: specifier: ^5.8.3 version: 5.8.3 vite: specifier: ^6.2.5 - version: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1) + version: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0) packages: @@ -441,9 +462,48 @@ packages: resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} + '@braintree/sanitize-url@6.0.2': + resolution: {integrity: sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==} + '@capsizecss/unpack@2.4.0': resolution: {integrity: sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==} + '@codemirror/autocomplete@6.18.6': + resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} + + '@codemirror/commands@6.8.1': + resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==} + + '@codemirror/lang-css@6.3.1': + resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} + + '@codemirror/lang-html@6.4.9': + resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==} + + '@codemirror/lang-javascript@6.2.4': + resolution: {integrity: sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==} + + '@codemirror/lang-json@6.0.1': + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} + + '@codemirror/lang-markdown@6.3.2': + resolution: {integrity: sha512-c/5MYinGbFxYl4itE9q/rgN/sMTjOr8XL5OWnC+EaRMLfCbVUmmubTJfdgpfcSS2SCaT7b+Q+xi3l6CgoE+BsA==} + + '@codemirror/language@6.11.0': + resolution: {integrity: sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==} + + '@codemirror/lint@6.8.5': + resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==} + + '@codemirror/search@6.5.11': + resolution: {integrity: sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==} + + '@codemirror/state@6.5.2': + resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} + + '@codemirror/view@6.37.1': + resolution: {integrity: sha512-Qy4CAUwngy/VQkEz0XzMKVRcckQuqLYWKqVpDDDghBe5FSXSqfVrJn49nw3ePZHxRUz4nRmb05Lgi+9csWo4eg==} + '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} @@ -597,6 +657,25 @@ packages: cpu: [x64] os: [win32] + '@excalidraw/excalidraw@0.18.0': + resolution: {integrity: sha512-QkIiS+5qdy8lmDWTKsuy0sK/fen/LRDtbhm2lc2xcFcqhv2/zdg95bYnl+wnwwXGHo7kEmP65BSiMHE7PJ3Zpw==} + peerDependencies: + react: ^17.0.2 || ^18.2.0 || ^19.0.0 + react-dom: ^17.0.2 || ^18.2.0 || ^19.0.0 + + '@excalidraw/laser-pointer@1.3.1': + resolution: {integrity: sha512-psA1z1N2qeAfsORdXc9JmD2y4CmDwmuMRxnNdJHZexIcPwaNEyIpNcelw+QkL9rz9tosaN9krXuKaRqYpRAR6g==} + + '@excalidraw/markdown-to-text@0.1.2': + resolution: {integrity: sha512-1nDXBNAojfi3oSFwJswKREkFm5wrSjqay81QlyRv2pkITG/XYB5v+oChENVBQLcxQwX4IUATWvXM5BcaNhPiIg==} + + '@excalidraw/mermaid-to-excalidraw@1.1.2': + resolution: {integrity: sha512-hAFv/TTIsOdoy0dL5v+oBd297SQ+Z88gZ5u99fCIFuEMHfQuPgLhU/ztKhFSTs7fISwVo6fizny/5oQRR3d4tQ==} + + '@excalidraw/random-username@1.1.0': + resolution: {integrity: sha512-nULYsQxkWHnbmHvcs+efMkJ4/9TtvNyFeLyHdeGxW0zHs6P+jYVqcRff9A6Vq9w9JXeDRnRh2VKvTtS19GW2qA==} + engines: {node: '>=10'} + '@floating-ui/core@1.7.0': resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} @@ -638,79 +717,67 @@ packages: resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-arm@1.0.5': resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-s390x@1.0.4': resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-x64@1.0.4': resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.0.4': resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.0.4': resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-linux-arm64@0.33.5': resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-linux-arm@0.33.5': resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-linux-s390x@0.33.5': resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-linux-x64@0.33.5': resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-linuxmusl-arm64@0.33.5': resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-linuxmusl-x64@0.33.5': resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-wasm32@0.33.5': resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} @@ -757,6 +824,9 @@ packages: '@kevisual/cache@0.0.3': resolution: {integrity: sha512-BWEck69KYL96/ywjYVkML974RHjDJTj2ITQND1zFPR+hlBV1H1p55QZgSYRJCObg3EAV1S9Zic/fR2T4pfe8yg==} + '@kevisual/codemirror@0.0.12': + resolution: {integrity: sha512-W0m9WbP0p6Z/w/xlQGb5ek7QEqg66CEIr1AJRsCkh+24NcWKEV5x0WhusXtJFC0oxGlGmPIz9rKUttc9In6ZeA==} + '@kevisual/query-awesome@0.0.2': resolution: {integrity: sha512-+dvUmilxlQEWqv0qbXT9dBGbOCyDBxH56OKiDq8wicNqFOChmwsB99ua2X51IloRXKLh0NoylJks91r7Btqy2A==} @@ -780,8 +850,8 @@ packages: '@kevisual/router@0.0.21': resolution: {integrity: sha512-XKTxbNO924cT18UOAGplWErZ+hMze8Y53F2jYCk18v4jsdsvjRho5uXXjJb6HSVsuITMtQR4R3rG0IcM3jkDKQ==} - '@kevisual/store@0.0.8': - resolution: {integrity: sha512-eIAk7lPTCBCCuQKvRJH38jfYjT9uIY3oI4ZVllzqIrJTUAyvd+QudMp/zFduGHC+Nbkr/ldPsVbKF4ZPkl2Pbw==} + '@kevisual/store@0.0.9': + resolution: {integrity: sha512-j6OiVcKbws23AvIwlDBL16ohGmZrRxi/OlH2i/UEScW2hKZo7vICXKySHom4ZzrnlwLV5JzKu4fVP48allGOeA==} '@kevisual/types@0.0.10': resolution: {integrity: sha512-Q73uzzjk9UidumnmCvOpgzqDDvQxsblz22bIFuoiioUFJWwaparx8bpd8ArRyFojicYL1YJoFDzDZ9j9NN8grA==} @@ -789,6 +859,33 @@ packages: '@kevisual/types@0.0.6': resolution: {integrity: sha512-7yxe1QmuC5g7lI/1Hm+zXly8if0z+ZqGM1SVOVv2VNRwRAVYBJDc365zWCCfRwE+5YaB2daWTe5zBOU4EkltkQ==} + '@lezer/common@1.2.3': + resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} + + '@lezer/css@1.2.1': + resolution: {integrity: sha512-2F5tOqzKEKbCUNraIXc0f6HKeyKlmMWJnBB0i4XW6dJgssrZO/YlZ2pY5xgyqDleqqhiNJ3dQhbrV2aClZQMvg==} + + '@lezer/highlight@1.2.1': + resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} + + '@lezer/html@1.3.10': + resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==} + + '@lezer/javascript@1.5.1': + resolution: {integrity: sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw==} + + '@lezer/json@1.0.3': + resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} + + '@lezer/lr@1.4.2': + resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} + + '@lezer/markdown@1.4.3': + resolution: {integrity: sha512-kfw+2uMrQ/wy/+ONfrH83OkdFNM0ye5Xq96cLlaCy7h5UT9FO54DU4oRoIc0CSBh5NWmWuiIJA7NGLMJbQ+Oxg==} + + '@marijn/find-cluster-break@1.0.2': + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} @@ -801,6 +898,12 @@ packages: '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + '@radix-ui/primitive@1.0.0': + resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} + + '@radix-ui/primitive@1.1.1': + resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} + '@radix-ui/primitive@1.1.2': resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} @@ -817,6 +920,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-arrow@1.1.2': + resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: @@ -830,6 +946,12 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-collection@1.0.1': + resolution: {integrity: sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: @@ -843,6 +965,20 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-compose-refs@1.0.0': + resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: @@ -852,6 +988,20 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.0.0': + resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-context@1.1.1': + resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-context@1.1.2': resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: @@ -874,6 +1024,11 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-direction@1.0.0': + resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-direction@1.1.1': resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: @@ -896,6 +1051,41 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.5': + resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.15': + resolution: {integrity: sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.1': + resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-focus-guards@1.1.2': resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} peerDependencies: @@ -905,6 +1095,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-scope@1.1.2': + resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: @@ -918,6 +1121,20 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-id@1.0.0': + resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-id@1.1.0': + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-id@1.1.1': resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: @@ -940,6 +1157,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-menu@2.1.15': + resolution: {integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popover@1.1.14': resolution: {integrity: sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==} peerDependencies: @@ -953,6 +1183,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popover@1.1.6': + resolution: {integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.2': + resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popper@1.2.7': resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} peerDependencies: @@ -966,6 +1222,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.1.4': + resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: @@ -979,6 +1248,25 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-presence@1.0.0': + resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-presence@1.1.2': + resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.1.4': resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} peerDependencies: @@ -992,6 +1280,25 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@1.0.1': + resolution: {integrity: sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-primitive@2.0.2': + resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@2.1.3': resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: @@ -1005,6 +1312,25 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-roving-focus@1.0.2': + resolution: {integrity: sha512-HLK+CqD/8pN6GfJm3U+cqpqhSKYAWiOJDe+A+8MfxBnOue39QEeMa43csUn2CXCHQT0/mewh1LrrG4tfkM9DMA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-roving-focus@1.1.10': + resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-select@2.2.5': resolution: {integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==} peerDependencies: @@ -1018,6 +1344,20 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-slot@1.0.1': + resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: @@ -1027,6 +1367,12 @@ packages: '@types/react': optional: true + '@radix-ui/react-tabs@1.0.2': + resolution: {integrity: sha512-gOUwh+HbjCuL0UCo8kZ+kdUEG8QtpdO4sMQduJ34ZEz0r4922g9REOBM+vIsfwtGxSug4Yb1msJMJYN2Bk8TpQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-tooltip@1.2.7': resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} peerDependencies: @@ -1040,6 +1386,20 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-use-callback-ref@1.0.0': + resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: @@ -1049,6 +1409,20 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-controllable-state@1.0.0': + resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: @@ -1067,6 +1441,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-escape-keydown@1.1.0': + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-escape-keydown@1.1.1': resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: @@ -1076,6 +1459,20 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-layout-effect@1.0.0': + resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: @@ -1094,6 +1491,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-rect@1.1.0': + resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.1.1': resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: @@ -1103,6 +1509,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-size@1.1.0': + resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-size@1.1.1': resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: @@ -1125,6 +1540,9 @@ packages: '@types/react-dom': optional: true + '@radix-ui/rect@1.1.0': + resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} @@ -1205,67 +1623,56 @@ packages: resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.40.1': resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.40.1': resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.40.1': resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.40.1': resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.40.1': resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.40.1': resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.40.1': resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.40.1': resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.40.1': resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.40.1': resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} @@ -1306,69 +1713,65 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@tailwindcss/node@4.1.7': - resolution: {integrity: sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g==} + '@tailwindcss/node@4.1.8': + resolution: {integrity: sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==} - '@tailwindcss/oxide-android-arm64@4.1.7': - resolution: {integrity: sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg==} + '@tailwindcss/oxide-android-arm64@4.1.8': + resolution: {integrity: sha512-Fbz7qni62uKYceWYvUjRqhGfZKwhZDQhlrJKGtnZfuNtHFqa8wmr+Wn74CTWERiW2hn3mN5gTpOoxWKk0jRxjg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.7': - resolution: {integrity: sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg==} + '@tailwindcss/oxide-darwin-arm64@4.1.8': + resolution: {integrity: sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.7': - resolution: {integrity: sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw==} + '@tailwindcss/oxide-darwin-x64@4.1.8': + resolution: {integrity: sha512-t6PgxjEMLp5Ovf7uMb2OFmb3kqzVTPPakWpBIFzppk4JE4ix0yEtbtSjPbU8+PZETpaYMtXvss2Sdkx8Vs4XRw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.7': - resolution: {integrity: sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw==} + '@tailwindcss/oxide-freebsd-x64@4.1.8': + resolution: {integrity: sha512-g8C8eGEyhHTqwPStSwZNSrOlyx0bhK/V/+zX0Y+n7DoRUzyS8eMbVshVOLJTDDC+Qn9IJnilYbIKzpB9n4aBsg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': - resolution: {integrity: sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.8': + resolution: {integrity: sha512-Jmzr3FA4S2tHhaC6yCjac3rGf7hG9R6Gf2z9i9JFcuyy0u79HfQsh/thifbYTF2ic82KJovKKkIB6Z9TdNhCXQ==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': - resolution: {integrity: sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.8': + resolution: {integrity: sha512-qq7jXtO1+UEtCmCeBBIRDrPFIVI4ilEQ97qgBGdwXAARrUqSn/L9fUrkb1XP/mvVtoVeR2bt/0L77xx53bPZ/Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.1.7': - resolution: {integrity: sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.8': + resolution: {integrity: sha512-O6b8QesPbJCRshsNApsOIpzKt3ztG35gfX9tEf4arD7mwNinsoCKxkj8TgEE0YRjmjtO3r9FlJnT/ENd9EVefQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.1.7': - resolution: {integrity: sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.8': + resolution: {integrity: sha512-32iEXX/pXwikshNOGnERAFwFSfiltmijMIAbUhnNyjFr3tmWmMJWQKU2vNcFX0DACSXJ3ZWcSkzNbaKTdngH6g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.1.7': - resolution: {integrity: sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA==} + '@tailwindcss/oxide-linux-x64-musl@4.1.8': + resolution: {integrity: sha512-s+VSSD+TfZeMEsCaFaHTaY5YNj3Dri8rST09gMvYQKwPphacRG7wbuQ5ZJMIJXN/puxPcg/nU+ucvWguPpvBDg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.1.7': - resolution: {integrity: sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A==} + '@tailwindcss/oxide-wasm32-wasi@4.1.8': + resolution: {integrity: sha512-CXBPVFkpDjM67sS1psWohZ6g/2/cd+cq56vPxK4JeawelxwK4YECgl9Y9TjkE2qfF+9/s1tHHJqrC4SS6cVvSg==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -1379,24 +1782,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': - resolution: {integrity: sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.8': + resolution: {integrity: sha512-7GmYk1n28teDHUjPlIx4Z6Z4hHEgvP5ZW2QS9ygnDAdI/myh3HTHjDqtSqgu1BpRoI4OiLx+fThAyA1JePoENA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.7': - resolution: {integrity: sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.8': + resolution: {integrity: sha512-fou+U20j+Jl0EHwK92spoWISON2OBnCazIc038Xj2TdweYV33ZRkS9nwqiUi2d/Wba5xg5UoHfvynnb/UB49cQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.7': - resolution: {integrity: sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ==} + '@tailwindcss/oxide@4.1.8': + resolution: {integrity: sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==} engines: {node: '>= 10'} - '@tailwindcss/vite@4.1.7': - resolution: {integrity: sha512-tYa2fO3zDe41I7WqijyVbRd8oWT0aEID1Eokz5hMT6wShLIHj3yvwj9XbfuloHP9glZ6H+aG2AN/+ZrxJ1Y5RQ==} + '@tailwindcss/vite@4.1.8': + resolution: {integrity: sha512-CQ+I8yxNV5/6uGaJjiuymgw0kEQiNKRinYbZXPdx1fk5WgiyReG0VaUx/Xq6aVNSUNJFzxm6o8FNKS5aMaim5A==} peerDependencies: vite: ^5.2.0 || ^6 @@ -1554,6 +1957,18 @@ packages: '@types/babel__traverse@7.20.7': resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/crypto-js@4.2.2': + resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1587,6 +2002,9 @@ packages: '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -1625,8 +2043,8 @@ packages: peerDependencies: '@types/react': ^19.0.0 - '@types/react@19.1.5': - resolution: {integrity: sha512-piErsCVVbpMMT2r7wbawdZsq4xMvIAhQuac2gedQHysu1TZYEigE6pnFfgZT+/jQnrRuF5r+SHzuehFjfRjr4g==} + '@types/react@19.1.6': + resolution: {integrity: sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -1719,14 +2137,18 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - astro@5.8.0: - resolution: {integrity: sha512-G57ELkdIntDiSrucA5lQaRtBOjquaZ9b9NIwoz2f471ZuuJcynLjWgItgBzlrz5UMY4WqnFbVWUCKlJb7nt9bA==} + astro@5.8.1: + resolution: {integrity: sha512-lkBg1smMRFW+FQ6i92SgEN53o4+ItRjlRt6Ck+rEjmTcb57Bid7faTNKUQNYuNnxiesTWw3NJDyVPQPbfKDyfw==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + attr-accept@2.2.5: + resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} + engines: {node: '>=4'} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -1740,6 +2162,10 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + blob-to-buffer@1.2.9: resolution: {integrity: sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==} @@ -1747,9 +2173,16 @@ packages: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + brotli@1.3.3: resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} + browser-fs-access@0.29.1: + resolution: {integrity: sha512-LSvVX5e21LRrXqVMhqtAwj5xPgDb+fXAIH80NsnCQ9xuZPs2xWsOREi24RKgZa1XOiQRbcmVrv87+ulOKsgjxw==} + browserslist@4.24.4: resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1766,6 +2199,9 @@ packages: caniuse-lite@1.0.30001715: resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==} + canvas-roundrect-polyfill@0.0.1: + resolution: {integrity: sha512-yWq+R3U3jE+coOeEb3a3GgE2j/0MMiDKM/QpLb6h9ihf5fGY9UXtvK9o4vNqjWXoZz7/3EaSVU3IX53TvFFUOw==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1785,6 +2221,10 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1811,6 +2251,10 @@ packages: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} + clsx@1.1.1: + resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + engines: {node: '>=6'} + clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} @@ -1825,6 +2269,9 @@ packages: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc + codemirror@6.0.1: + resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} + collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -1853,6 +2300,14 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -1869,18 +2324,37 @@ packages: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + crc-32@0.3.0: + resolution: {integrity: sha512-kucVIjOmMc1f0tv53BJ/5WIX+MGLcKuoBhnGqQrgKJNqLByb/sVMWfW/Aw6hw0jgcqjJ2pi9E5y32zOIpaUlsA==} + engines: {node: '>=0.8'} + crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + crossws@0.3.4: resolution: {integrity: sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==} + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + css-tree@3.1.0: resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -1893,6 +2367,157 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.32.0: + resolution: {integrity: sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.10: + resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} + dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} @@ -1915,6 +2540,9 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delaunator@5.0.1: + resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1953,6 +2581,9 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dompurify@3.1.6: + resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==} + dotenv@16.5.0: resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} @@ -1968,6 +2599,9 @@ packages: electron-to-chromium@1.5.143: resolution: {integrity: sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g==} + elkjs@0.9.3: + resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} + emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -2005,6 +2639,10 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + es6-promise-pool@2.5.0: + resolution: {integrity: sha512-VHErXfzR/6r/+yyzPKeBvO0lgjfC5cbDCQWjWwMZWSb6YU39TGIl51OUmCfWCq4ylMdJSB8zkz2vIuIeIxXApA==} + engines: {node: '>=0.10.0'} + esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -2073,6 +2711,14 @@ packages: picomatch: optional: true + file-selector@2.1.2: + resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==} + engines: {node: '>= 12'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + flattie@1.1.1: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} @@ -2094,6 +2740,10 @@ packages: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} + fractional-indexing@3.2.0: + resolution: {integrity: sha512-PcOxmqwYCW7O2ovKRU8OoQQj2yqTfEB/yeTYk4gPid6dN5ODRfU1hXd9tTVZzax/0NkO7AxpHykvZnT1aYp/BQ==} + engines: {node: ^14.13.1 || >=16.0.0} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2106,6 +2756,10 @@ packages: resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} engines: {node: '>=10'} + fuzzy@0.1.3: + resolution: {integrity: sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==} + engines: {node: '>= 0.6.0'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2133,10 +2787,17 @@ packages: github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + glur@1.1.2: + resolution: {integrity: sha512-l+8esYHTKOx2G/Aao4lEQ0bnHWg4fWtJbVoZZT9Knxi01pB8C80BR85nONLFwkkQoFRCmXY+BUcGZN3yZ2QsRA==} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -2147,6 +2808,9 @@ packages: h3@1.15.3: resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -2220,26 +2884,39 @@ packages: i18next-http-backend@3.0.2: resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==} - i18next@25.2.0: - resolution: {integrity: sha512-ERhJICsxkw1vE7G0lhCUYv4ZxdBEs03qblt1myJs94rYRK9loJF3xDj8mgQz3LmCyp0yYrNjbN/1/GWZTZDGCA==} + i18next@25.2.1: + resolution: {integrity: sha512-+UoXK5wh+VlE1Zy5p6MjcvctHXAhRwQKCxiJD8noKZzIXmnAX8gdHX5fLPA3MEVxEN4vbZkQFy8N0LyD9tUqPw==} peerDependencies: typescript: ^5 peerDependenciesMeta: typescript: optional: true - idb-keyval@6.2.1: - resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + idb-keyval@6.2.2: + resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==} idb@8.0.3: resolution: {integrity: sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==} + image-blob-reduce@3.0.1: + resolution: {integrity: sha512-/VmmWgIryG/wcn4TVrV7cC4mlfUC/oyiKIfSg5eVM3Ten/c1c34RJhMYKCWTnoSMHSqXLt3tsrBR4Q2HInvN+Q==} + immer@10.1.1: resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -2247,6 +2924,13 @@ packages: resolution: {integrity: sha512-up9ueqKwPnuitvEqyOxBU1ggima7YsUywI00qEnYVnor9IissXbltZ86xi4VXKkci0/qWAtfMP/nu4oR4fUaEQ==} engines: {node: '>=0.8.22'} + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} @@ -2259,6 +2943,10 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -2271,10 +2959,18 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -2286,6 +2982,10 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -2297,10 +2997,31 @@ packages: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + jotai-scope@0.7.2: + resolution: {integrity: sha512-Gwed97f3dDObrO43++2lRcgOqw4O2sdr4JCjP/7eHK1oPACDJ7xKHGScpJX9XaflU+KBHXF+VhwECnzcaQiShg==} + peerDependencies: + jotai: '>=2.9.2' + react: '>=17.0.0' + + jotai@2.11.0: + resolution: {integrity: sha512-zKfoBBD1uDw3rljwHkt0fWuja1B76R7CjznuBO+mSX6jpsO1EBeWNRKpeaQho9yPI/pvCv4recGfgOXGxwPZvQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=17.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2318,6 +3039,13 @@ packages: engines: {node: '>=6'} hasBin: true + katex@0.16.22: + resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} + hasBin: true + + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -2326,6 +3054,9 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + lightningcss-darwin-arm64@1.30.1: resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} @@ -2355,28 +3086,24 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] lightningcss-linux-arm64-musl@1.30.1: resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] lightningcss-linux-x64-gnu@1.30.1: resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] lightningcss-linux-x64-musl@1.30.1: resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] lightningcss-win32-arm64-msvc@1.30.1: resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} @@ -2400,6 +3127,12 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -2471,6 +3204,9 @@ packages: mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} @@ -2513,6 +3249,9 @@ packages: mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} @@ -2522,6 +3261,12 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + mermaid@10.9.3: + resolution: {integrity: sha512-V80X1isSEvAewIL3xhmz/rVmc27CVljcsbWxkxlWJWY/1kQa4XOABqpDl2qQLGKzpKm6WbTfUEKImBlUfFYArw==} + + micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -2561,69 +3306,129 @@ packages: micromark-extension-mdxjs@3.0.0: resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + micromark-factory-destination@2.0.1: resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + micromark-factory-label@2.0.1: resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} micromark-factory-mdx-expression@2.0.3: resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + micromark-factory-space@2.0.1: resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + micromark-factory-title@2.0.1: resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + micromark-factory-whitespace@2.0.1: resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + micromark-util-character@2.1.1: resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + micromark-util-chunked@2.0.1: resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + micromark-util-classify-character@2.0.1: resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + micromark-util-combine-extensions@2.0.1: resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + micromark-util-decode-numeric-character-reference@2.0.2: resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + micromark-util-decode-string@2.0.1: resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + micromark-util-encode@2.0.1: resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} micromark-util-events-to-acorn@2.0.3: resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + micromark-util-html-tag-name@2.0.1: resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + micromark-util-normalize-identifier@2.0.1: resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + micromark-util-resolve-all@2.0.1: resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + micromark-util-sanitize-uri@2.0.1: resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + micromark-util-subtokenize@2.1.0: resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + micromark-util-symbol@2.0.1: resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + micromark-util-types@2.0.2: resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} @@ -2648,6 +3453,10 @@ packages: engines: {node: '>=10'} hasBin: true + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -2655,11 +3464,24 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multimath@2.0.0: + resolution: {integrity: sha512-toRx66cAMJ+Ccz7pMIg38xSIrtnbozk0dchXezwQDMgQmbGpfxjtv68H+L00iFL8hxDaVjrmwAFSb3I6bg8Q2g==} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@4.0.2: + resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + nanoid@5.1.5: resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} engines: {node: ^18 || >=20} @@ -2699,6 +3521,9 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + non-layered-tidy-tree-layout@2.0.2: + resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -2719,6 +3544,9 @@ packages: oniguruma-to-es@4.3.1: resolution: {integrity: sha512-VtX1kepWO+7HG7IWV5v72JhiqofK7XsiHmtgnvurnNOTdIvE5mrdWYtsOrQyrXCv1L2Ckm08hywp+MFO7rC4Ug==} + open-color@1.9.1: + resolution: {integrity: sha512-vCseG/EQ6/RcvxhUcGJiHViOgrtz4x0XbZepXvKik66TMGkvbmjeJrKFyBEx6daG5rNyyd14zYXhz0hZVwQFOw==} + openai@4.100.0: resolution: {integrity: sha512-9soq/wukv3utxcuD7TWFqKdKp0INWdeyhUCvxwrne5KwnxaCp4eHL4GdT/tMFhYolxgNhxFzg5GFwM331Z5CZg==} hasBin: true @@ -2752,6 +3580,9 @@ packages: pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + pako@2.0.3: + resolution: {integrity: sha512-WjR1hOeg+kki3ZIOjaf4b5WVcay1jaliKSYiEaB1XzwhMQZJxRdQRv0V31EKBYlxb4T7SK3hjfc/jxyU64BoSw==} + parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} @@ -2761,6 +3592,13 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -2768,6 +3606,12 @@ packages: resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} engines: {node: '>=16'} + perfect-freehand@1.2.0: + resolution: {integrity: sha512-h/0ikF1M3phW7CwpZ5MMvKnfpHficWoOEyr//KVNTxV4F6deRK1eYMtHyBKEAKFK0aXIEUK9oBvlF6PNXMDsAw==} + + pica@7.1.1: + resolution: {integrity: sha512-WY73tMvNzXWEld2LicT9Y260L43isrZ85tPuqRyvtkljSDLmnNFQmZICt4xUJMVulmcc6L9O7jbBrtx3DOz/YQ==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2779,10 +3623,33 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + png-chunk-text@1.0.0: + resolution: {integrity: sha512-DEROKU3SkkLGWNMzru3xPVgxyd48UGuMSZvioErCure6yhOc/pRH2ZV+SEn7nmaf7WNf3NdIpH+UTrRdKyq9Lw==} + + png-chunks-encode@1.0.0: + resolution: {integrity: sha512-J1jcHgbQRsIIgx5wxW9UmCymV3wwn4qCCJl6KYgEU/yHCh/L2Mwq/nMOkRPtmV79TLxRZj5w3tH69pvygFkDqA==} + + png-chunks-extract@1.0.0: + resolution: {integrity: sha512-ZiVwF5EJ0DNZyzAqld8BP1qyJBaGOFaq9zl579qfbkcmOwWLLO4I9L8i2O4j3HkI6/35i0nKG2n+dZplxiT89Q==} + + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-curve@1.0.1: + resolution: {integrity: sha512-3nmX4/LIiyuwGLwuUrfhTlDeQFlAhi7lyK/zcRNGhalwapDWgAGR82bUpmn2mA03vII3fvNCG8jAONzKXwpxAg==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + engines: {node: '>=14'} + hasBin: true + pretty-bytes@7.0.0: resolution: {integrity: sha512-U5otLYPR3L0SVjHGrkEUx5mf7MxV2ceXeE7VwWPk+hyzC5drNohsOGNPDZqxCqyX1lkbEN4kl1LiI8QFd7r0ZA==} engines: {node: '>=20'} @@ -2866,6 +3733,9 @@ packages: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} + pwacompat@2.0.17: + resolution: {integrity: sha512-6Du7IZdIy7cHiv7AhtDy4X2QRM8IAD5DII69mt5qWibC2d15ZU8DmBG1WdZKekG11cChSu4zkSUGPF9sweOl6w==} + radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -2886,6 +3756,12 @@ packages: react: '>= 16.3.0' react-dom: '>= 16.3.0' + react-dropzone@14.3.8: + resolution: {integrity: sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==} + engines: {node: '>= 10.13'} + peerDependencies: + react: '>= 16.8 || 18.0.0' + react-hook-form@7.56.4: resolution: {integrity: sha512-Rob7Ftz2vyZ/ZGsQZPaRdIefkgOSrQSPXfqBdvOPwJfoGnjwRJUs7EM7Kc1mcoDv3NOtqBzPGbcMB8CGn9CKgw==} engines: {node: '>=18.0.0'} @@ -2969,6 +3845,10 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -3048,6 +3928,9 @@ packages: retext@9.0.0: resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + rollup-plugin-dts@6.2.1: resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==} engines: {node: '>=16'} @@ -3063,6 +3946,24 @@ packages: rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + roughjs@4.6.4: + resolution: {integrity: sha512-s6EZ0BntezkFYMf/9mGn7M8XGIoaav9QQBCnJROWB3brUWQ683Q2LbRD/hq0Z3bAJ/9NVpU/5LpiTWvQMyLDhw==} + + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass@1.51.0: + resolution: {integrity: sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA==} + engines: {node: '>=12.0.0'} + hasBin: true + sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} @@ -3086,6 +3987,14 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + shiki@3.3.0: resolution: {integrity: sha512-j0Z1tG5vlOFGW8JVj0Cpuatzvshes7VJy5ncDmmMaYcmnGW0Js1N81TOW98ivTFNZfKRn9uwEg/aIm638o368g==} @@ -3100,6 +4009,9 @@ packages: engines: {node: '>=14.0.0', npm: '>=6.0.0'} hasBin: true + sliced@1.0.1: + resolution: {integrity: sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==} + smol-toml@1.3.4: resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==} engines: {node: '>= 18'} @@ -3140,12 +4052,18 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + style-to-js@1.1.16: resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -3153,8 +4071,8 @@ packages: tailwind-merge@3.3.0: resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} - tailwindcss@4.1.7: - resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==} + tailwindcss@4.1.8: + resolution: {integrity: sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -3182,6 +4100,10 @@ packages: peerDependencies: '@tiptap/core': ^2.0.3 + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -3191,6 +4113,10 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + tsconfck@3.1.5: resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} engines: {node: ^18 || >=20} @@ -3204,11 +4130,14 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tunnel-rat@0.1.2: + resolution: {integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==} + turndown@7.2.0: resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==} - tw-animate-css@1.3.0: - resolution: {integrity: sha512-jrJ0XenzS9KVuDThJDvnhalbl4IYiMQ/XvpA0a2FL8KmlK+6CSMviO7ROY/I7z1NnUs5NnDhlM6fXmF40xPxzw==} + tw-animate-css@1.3.3: + resolution: {integrity: sha512-tXE2TRWrskc4TU3RDd7T8n8Np/wCfoeH9gz22c7PzYqNPQ9FBGFbWWzwL0JyHcFp+jHozmF76tbHfPAx22ua2Q==} type-fest@4.40.1: resolution: {integrity: sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==} @@ -3267,6 +4196,9 @@ packages: unist-util-remove-position@5.0.0: resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -3364,6 +4296,20 @@ packages: '@types/react': optional: true + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -3440,9 +4386,15 @@ packages: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webworkify@1.5.0: + resolution: {integrity: sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -3450,6 +4402,11 @@ packages: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + widest-line@5.0.0: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} @@ -3510,6 +4467,21 @@ packages: zod@3.24.3: resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} + zustand@4.5.7: + resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + zustand@5.0.5: resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==} engines: {node: '>=12.20.0'} @@ -3568,12 +4540,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.0(astro@5.8.0(@types/node@22.15.21)(idb-keyval@6.2.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(typescript@5.8.3))': + '@astrojs/mdx@4.3.0(astro@5.8.1(@types/node@22.15.21)(idb-keyval@6.2.2)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(sass@1.51.0)(typescript@5.8.3))': dependencies: '@astrojs/markdown-remark': 6.3.2 '@mdx-js/mdx': 3.1.0(acorn@8.14.1) acorn: 8.14.1 - astro: 5.8.0(@types/node@22.15.21)(idb-keyval@6.2.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(typescript@5.8.3) + astro: 5.8.1(@types/node@22.15.21)(idb-keyval@6.2.2)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(sass@1.51.0)(typescript@5.8.3) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -3591,15 +4563,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.3.0(@types/node@22.15.21)(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(jiti@2.4.2)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@astrojs/react@4.3.0(@types/node@22.15.21)(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(jiti@2.4.2)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.51.0)': dependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) ultrahtml: 1.6.0 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0) transitivePeerDependencies: - '@types/node' - jiti @@ -3744,6 +4716,8 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@braintree/sanitize-url@6.0.2': {} + '@capsizecss/unpack@2.4.0': dependencies: blob-to-buffer: 1.2.9 @@ -3752,6 +4726,97 @@ snapshots: transitivePeerDependencies: - encoding + '@codemirror/autocomplete@6.18.6': + dependencies: + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + '@lezer/common': 1.2.3 + + '@codemirror/commands@6.8.1': + dependencies: + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + '@lezer/common': 1.2.3 + + '@codemirror/lang-css@6.3.1': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/css': 1.2.1 + + '@codemirror/lang-html@6.4.9': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + '@lezer/common': 1.2.3 + '@lezer/css': 1.2.1 + '@lezer/html': 1.3.10 + + '@codemirror/lang-javascript@6.2.4': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.0 + '@codemirror/lint': 6.8.5 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + '@lezer/common': 1.2.3 + '@lezer/javascript': 1.5.1 + + '@codemirror/lang-json@6.0.1': + dependencies: + '@codemirror/language': 6.11.0 + '@lezer/json': 1.0.3 + + '@codemirror/lang-markdown@6.3.2': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/lang-html': 6.4.9 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + '@lezer/common': 1.2.3 + '@lezer/markdown': 1.4.3 + + '@codemirror/language@6.11.0': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + style-mod: 4.1.2 + + '@codemirror/lint@6.8.5': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + crelt: 1.0.6 + + '@codemirror/search@6.5.11': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + crelt: 1.0.6 + + '@codemirror/state@6.5.2': + dependencies: + '@marijn/find-cluster-break': 1.0.2 + + '@codemirror/view@6.37.1': + dependencies: + '@codemirror/state': 6.5.2 + crelt: 1.0.6 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 @@ -3832,6 +4897,61 @@ snapshots: '@esbuild/win32-x64@0.25.3': optional: true + '@excalidraw/excalidraw@0.18.0(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(immer@10.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@braintree/sanitize-url': 6.0.2 + '@excalidraw/laser-pointer': 1.3.1 + '@excalidraw/mermaid-to-excalidraw': 1.1.2 + '@excalidraw/random-username': 1.1.0 + '@radix-ui/react-popover': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-tabs': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + browser-fs-access: 0.29.1 + canvas-roundrect-polyfill: 0.0.1 + clsx: 1.1.1 + cross-env: 7.0.3 + es6-promise-pool: 2.5.0 + fractional-indexing: 3.2.0 + fuzzy: 0.1.3 + image-blob-reduce: 3.0.1 + jotai: 2.11.0(@types/react@19.1.6)(react@19.1.0) + jotai-scope: 0.7.2(jotai@2.11.0(@types/react@19.1.6)(react@19.1.0))(react@19.1.0) + lodash.debounce: 4.0.8 + lodash.throttle: 4.1.1 + nanoid: 3.3.3 + open-color: 1.9.1 + pako: 2.0.3 + perfect-freehand: 1.2.0 + pica: 7.1.1 + png-chunk-text: 1.0.0 + png-chunks-encode: 1.0.0 + png-chunks-extract: 1.0.0 + points-on-curve: 1.0.1 + pwacompat: 2.0.17 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + roughjs: 4.6.4 + sass: 1.51.0 + tunnel-rat: 0.1.2(@types/react@19.1.6)(immer@10.1.1)(react@19.1.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - immer + - supports-color + + '@excalidraw/laser-pointer@1.3.1': {} + + '@excalidraw/markdown-to-text@0.1.2': {} + + '@excalidraw/mermaid-to-excalidraw@1.1.2': + dependencies: + '@excalidraw/markdown-to-text': 0.1.2 + mermaid: 10.9.3 + nanoid: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@excalidraw/random-username@1.1.0': {} + '@floating-ui/core@1.7.0': dependencies: '@floating-ui/utils': 0.2.9 @@ -3950,7 +5070,7 @@ snapshots: '@rollup/plugin-commonjs': 28.0.3(rollup@4.40.1) '@rollup/plugin-node-resolve': 16.0.1(rollup@4.40.1) '@rollup/plugin-typescript': 12.1.2(rollup@4.40.1)(tslib@2.8.1)(typescript@5.8.3) - idb-keyval: 6.2.1 + idb-keyval: 6.2.2 rollup-plugin-dts: 6.2.1(rollup@4.40.1)(typescript@5.8.3) transitivePeerDependencies: - rollup @@ -3959,7 +5079,22 @@ snapshots: '@kevisual/cache@0.0.3': dependencies: - idb-keyval: 6.2.1 + idb-keyval: 6.2.2 + + '@kevisual/codemirror@0.0.12': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/commands': 6.8.1 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-html': 6.4.9 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/lang-json': 6.0.1 + '@codemirror/lang-markdown': 6.3.2 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + codemirror: 6.0.1 + eventemitter3: 5.0.1 + prettier: 3.5.3 '@kevisual/query-awesome@0.0.2': {} @@ -3993,13 +5128,13 @@ snapshots: dependencies: class-variance-authority: 0.7.1 clsx: 2.1.1 - i18next: 25.2.0(typescript@5.8.3) + i18next: 25.2.1(typescript@5.8.3) i18next-browser-languagedetector: 8.1.0 i18next-http-backend: 3.0.2 lucide-react: 0.509.0(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-i18next: 15.5.2(i18next@25.2.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + react-i18next: 15.5.2(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react-toastify: 11.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) tailwind-merge: 3.3.0 transitivePeerDependencies: @@ -4021,12 +5156,53 @@ snapshots: path-to-regexp: 8.2.0 selfsigned: 2.4.1 - '@kevisual/store@0.0.8': {} + '@kevisual/store@0.0.9': {} '@kevisual/types@0.0.10': {} '@kevisual/types@0.0.6': {} + '@lezer/common@1.2.3': {} + + '@lezer/css@1.2.1': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/highlight@1.2.1': + dependencies: + '@lezer/common': 1.2.3 + + '@lezer/html@1.3.10': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/javascript@1.5.1': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/json@1.0.3': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/lr@1.4.2': + dependencies: + '@lezer/common': 1.2.3 + + '@lezer/markdown@1.4.3': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + + '@marijn/find-cluster-break@1.0.2': {} + '@mdx-js/mdx@3.1.0(acorn@8.14.1)': dependencies: '@types/estree': 1.0.7 @@ -4063,317 +5239,655 @@ snapshots: '@radix-ui/number@1.1.1': {} + '@radix-ui/primitive@1.0.0': + dependencies: + '@babel/runtime': 7.27.1 + + '@radix-ui/primitive@1.1.1': {} + '@radix-ui/primitive@1.1.2': {} - '@radix-ui/react-alert-dialog@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-alert-dialog@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-collection@1.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0) + '@radix-ui/react-context': 1.0.0(react@19.1.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.0.1(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-compose-refs@1.0.0(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + react: 19.1.0 + + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.1.6)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-context@1.1.2(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.6)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-context@1.0.0(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + react: 19.1.0 + + '@radix-ui/react-context@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-context@1.1.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.6)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-direction@1.0.0(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + react: 19.1.0 + + '@radix-ui/react-direction@1.1.1(@types/react@19.1.6)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.6)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.5 - - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.1.6)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-id@1.1.1(@types/react@19.1.5)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.5 - - '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) - - '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-id@1.0.0(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + '@radix-ui/react-use-layout-effect': 1.0.0(react@19.1.0) + react: 19.1.0 + + '@radix-ui/react-id@1.1.0(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-id@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-menu@2.1.15(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.6)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.6)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-popover@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.1.6)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.6)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-popper@1.2.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/rect': 1.1.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.6)(react@19.1.0) '@radix-ui/rect': 1.1.1 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.6)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@babel/runtime': 7.27.1 + '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.6)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-primitive@1.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + '@radix-ui/react-slot': 1.0.1(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@radix-ui/react-primitive@2.0.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.1.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-roving-focus@1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-collection': 1.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0) + '@radix-ui/react-context': 1.0.0(react@19.1.0) + '@radix-ui/react-direction': 1.0.0(react@19.1.0) + '@radix-ui/react-id': 1.0.0(react@19.1.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.6)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-slot@1.2.3(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-slot@1.0.1(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@babel/runtime': 7.27.1 + '@radix-ui/react-compose-refs': 1.0.0(react@19.1.0) + react: 19.1.0 + + '@radix-ui/react-slot@1.1.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.6)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-tabs@1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-context': 1.0.0(react@19.1.0) + '@radix-ui/react-direction': 1.0.0(react@19.1.0) + '@radix-ui/react-id': 1.0.0(react@19.1.0) + '@radix-ui/react-presence': 1.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.0.0(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + react: 19.1.0 + + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.1.6)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.5)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.5 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.5)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.5 - - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.5)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.5 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.6)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.0.0(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + '@radix-ui/react-use-callback-ref': 1.0.0(react@19.1.0) + react: 19.1.0 + + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-use-layout-effect@1.0.0(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.1 + react: 19.1.0 + + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.1.6)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-use-rect@1.1.0(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/rect': 1.1.0 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.6)(react@19.1.0)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.5)(react@19.1.0)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.1.6)(react@19.1.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.6)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.6)(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 - '@types/react-dom': 19.1.5(@types/react@19.1.5) + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/rect@1.1.0': {} '@radix-ui/rect@1.1.1': {} @@ -4515,7 +6029,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@tailwindcss/node@4.1.7': + '@tailwindcss/node@4.1.8': dependencies: '@ampproject/remapping': 2.3.0 enhanced-resolve: 5.18.1 @@ -4523,68 +6037,68 @@ snapshots: lightningcss: 1.30.1 magic-string: 0.30.17 source-map-js: 1.2.1 - tailwindcss: 4.1.7 + tailwindcss: 4.1.8 - '@tailwindcss/oxide-android-arm64@4.1.7': + '@tailwindcss/oxide-android-arm64@4.1.8': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.7': + '@tailwindcss/oxide-darwin-arm64@4.1.8': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.7': + '@tailwindcss/oxide-darwin-x64@4.1.8': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.7': + '@tailwindcss/oxide-freebsd-x64@4.1.8': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.8': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.8': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.7': + '@tailwindcss/oxide-linux-arm64-musl@4.1.8': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.7': + '@tailwindcss/oxide-linux-x64-gnu@4.1.8': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.7': + '@tailwindcss/oxide-linux-x64-musl@4.1.8': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.7': + '@tailwindcss/oxide-wasm32-wasi@4.1.8': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.8': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.7': + '@tailwindcss/oxide-win32-x64-msvc@4.1.8': optional: true - '@tailwindcss/oxide@4.1.7': + '@tailwindcss/oxide@4.1.8': dependencies: detect-libc: 2.0.4 tar: 7.4.3 optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.7 - '@tailwindcss/oxide-darwin-arm64': 4.1.7 - '@tailwindcss/oxide-darwin-x64': 4.1.7 - '@tailwindcss/oxide-freebsd-x64': 4.1.7 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.7 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.7 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.7 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.7 - '@tailwindcss/oxide-linux-x64-musl': 4.1.7 - '@tailwindcss/oxide-wasm32-wasi': 4.1.7 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.7 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.7 + '@tailwindcss/oxide-android-arm64': 4.1.8 + '@tailwindcss/oxide-darwin-arm64': 4.1.8 + '@tailwindcss/oxide-darwin-x64': 4.1.8 + '@tailwindcss/oxide-freebsd-x64': 4.1.8 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.8 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.8 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.8 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.8 + '@tailwindcss/oxide-linux-x64-musl': 4.1.8 + '@tailwindcss/oxide-wasm32-wasi': 4.1.8 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.8 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.8 - '@tailwindcss/vite@4.1.7(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))': + '@tailwindcss/vite@4.1.8(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0))': dependencies: - '@tailwindcss/node': 4.1.7 - '@tailwindcss/oxide': 4.1.7 - tailwindcss: 4.1.7 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1) + '@tailwindcss/node': 4.1.8 + '@tailwindcss/oxide': 4.1.8 + tailwindcss: 4.1.8 + vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0) '@tiptap/core@2.12.0(@tiptap/pm@2.12.0)': dependencies: @@ -4763,6 +6277,16 @@ snapshots: dependencies: '@babel/types': 7.27.0 + '@types/crypto-js@4.2.2': {} + + '@types/d3-scale-chromatic@3.1.0': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-time@3.0.4': {} + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -4801,6 +6325,10 @@ snapshots: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 + '@types/mdast@3.0.15': + dependencies: + '@types/unist': 2.0.11 + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -4836,11 +6364,11 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/react-dom@19.1.5(@types/react@19.1.5)': + '@types/react-dom@19.1.5(@types/react@19.1.6)': dependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - '@types/react@19.1.5': + '@types/react@19.1.6': dependencies: csstype: 3.1.3 @@ -4860,18 +6388,18 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-basic-ssl@2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))': + '@vitejs/plugin-basic-ssl@2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0))': dependencies: - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0) - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0) transitivePeerDependencies: - supports-color @@ -4918,7 +6446,7 @@ snapshots: astring@1.9.0: {} - astro@5.8.0(@types/node@22.15.21)(idb-keyval@6.2.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(typescript@5.8.3): + astro@5.8.1(@types/node@22.15.21)(idb-keyval@6.2.2)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.40.1)(sass@1.51.0)(typescript@5.8.3): dependencies: '@astrojs/compiler': 2.11.0 '@astrojs/internal-helpers': 0.6.1 @@ -4971,10 +6499,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.5.0 unist-util-visit: 5.0.0 - unstorage: 1.16.0(idb-keyval@6.2.1) + unstorage: 1.16.0(idb-keyval@6.2.2) vfile: 6.0.3 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1) - vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)) + vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0) + vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.2 @@ -5020,6 +6548,8 @@ snapshots: asynckit@0.4.0: {} + attr-accept@2.2.5: {} + axobject-query@4.1.0: {} bail@2.0.2: {} @@ -5028,6 +6558,8 @@ snapshots: base64-js@1.5.1: {} + binary-extensions@2.3.0: {} + blob-to-buffer@1.2.9: {} boxen@8.0.1: @@ -5041,10 +6573,16 @@ snapshots: widest-line: 5.0.0 wrap-ansi: 9.0.0 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + brotli@1.3.3: dependencies: base64-js: 1.5.1 + browser-fs-access@0.29.1: {} + browserslist@4.24.4: dependencies: caniuse-lite: 1.0.30001715 @@ -5061,6 +6599,8 @@ snapshots: caniuse-lite@1.0.30001715: {} + canvas-roundrect-polyfill@0.0.1: {} + ccount@2.0.1: {} chalk@5.4.1: {} @@ -5073,6 +6613,18 @@ snapshots: character-reference-invalid@2.0.1: {} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -5091,22 +6643,34 @@ snapshots: clone@2.1.2: {} + clsx@1.1.1: {} + clsx@1.2.1: {} clsx@2.1.1: {} - cmdk@1.1.1(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + cmdk@1.1.1(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' + codemirror@6.0.1: + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/commands': 6.8.1 + '@codemirror/language': 6.11.0 + '@codemirror/lint': 6.8.5 + '@codemirror/search': 6.5.11 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.37.1 + collapse-white-space@2.1.0: {} color-convert@2.0.1: @@ -5137,6 +6701,10 @@ snapshots: commander@14.0.0: {} + commander@7.2.0: {} + + commander@8.3.0: {} + common-ancestor-path@1.0.1: {} commondir@1.0.1: {} @@ -5147,8 +6715,18 @@ snapshots: cookie@1.0.2: {} + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + crc-32@0.3.0: {} + crelt@1.0.6: {} + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.6 + cross-fetch@3.2.0: dependencies: node-fetch: 2.7.0 @@ -5161,10 +6739,18 @@ snapshots: transitivePeerDependencies: - encoding + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crossws@0.3.4: dependencies: uncrypto: 0.1.3 + crypto-js@4.2.0: {} + css-tree@3.1.0: dependencies: mdn-data: 2.12.2 @@ -5174,6 +6760,185 @@ snapshots: csstype@3.1.3: {} + cytoscape-cose-bilkent@4.1.0(cytoscape@3.32.0): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.32.0 + + cytoscape@3.32.0: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.0.1 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.0: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.0 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + + dagre-d3-es@7.0.10: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.21 + dayjs@1.11.13: {} debug@4.4.0: @@ -5188,6 +6953,10 @@ snapshots: defu@6.1.4: {} + delaunator@5.0.1: + dependencies: + robust-predicates: 3.0.2 + delayed-stream@1.0.0: {} dequal@2.0.3: {} @@ -5214,6 +6983,8 @@ snapshots: dlv@1.1.3: {} + dompurify@3.1.6: {} + dotenv@16.5.0: {} dset@3.1.4: {} @@ -5226,6 +6997,8 @@ snapshots: electron-to-chromium@1.5.143: {} + elkjs@0.9.3: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -5256,6 +7029,8 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + es6-promise-pool@2.5.0: {} + esast-util-from-estree@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -5351,6 +7126,14 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + file-selector@2.1.2: + dependencies: + tslib: 2.8.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + flattie@1.1.1: {} fontace@0.3.0: @@ -5384,6 +7167,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 + fractional-indexing@3.2.0: {} + fsevents@2.3.3: optional: true @@ -5391,6 +7176,8 @@ snapshots: fuse.js@7.1.0: {} + fuzzy@0.1.3: {} + gensync@1.0.0-beta.2: {} get-east-asian-width@1.3.0: {} @@ -5419,8 +7206,14 @@ snapshots: github-slugger@2.0.0: {} + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + globals@11.12.0: {} + glur@1.1.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -5437,6 +7230,8 @@ snapshots: ufo: 1.6.1 uncrypto: 0.1.3 + hachure-fill@0.5.2: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -5601,24 +7396,40 @@ snapshots: transitivePeerDependencies: - encoding - i18next@25.2.0(typescript@5.8.3): + i18next@25.2.1(typescript@5.8.3): dependencies: '@babel/runtime': 7.27.1 optionalDependencies: typescript: 5.8.3 - idb-keyval@6.2.1: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + idb-keyval@6.2.2: {} idb@8.0.3: {} + image-blob-reduce@3.0.1: + dependencies: + pica: 7.1.1 + immer@10.1.1: {} + immutable@4.3.7: {} + import-meta-resolve@4.1.0: {} + inherits@2.0.4: {} + inline-style-parser@0.2.4: {} inquire@0.4.8: {} + internmap@1.0.1: {} + + internmap@2.0.3: {} + iron-webcrypto@1.2.1: {} is-alphabetical@2.0.1: {} @@ -5631,6 +7442,10 @@ snapshots: is-arrayish@0.3.2: optional: true + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -5639,8 +7454,14 @@ snapshots: is-docker@3.0.0: {} + is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + is-hexadecimal@2.0.1: {} is-inside-container@1.0.0: @@ -5649,6 +7470,8 @@ snapshots: is-module@1.0.0: {} + is-number@7.0.0: {} + is-plain-obj@4.1.0: {} is-reference@1.2.1: @@ -5659,8 +7482,20 @@ snapshots: dependencies: is-inside-container: 1.0.0 + isexe@2.0.0: {} + jiti@2.4.2: {} + jotai-scope@0.7.2(jotai@2.11.0(@types/react@19.1.6)(react@19.1.0))(react@19.1.0): + dependencies: + jotai: 2.11.0(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + + jotai@2.11.0(@types/react@19.1.6)(react@19.1.0): + optionalDependencies: + '@types/react': 19.1.6 + react: 19.1.0 + js-tokens@4.0.0: {} js-yaml@4.1.0: @@ -5671,10 +7506,18 @@ snapshots: json5@2.2.3: {} + katex@0.16.22: + dependencies: + commander: 8.3.0 + + khroma@2.1.0: {} + kleur@3.0.3: {} kleur@4.1.5: {} + layout-base@1.0.2: {} + lightningcss-darwin-arm64@1.30.1: optional: true @@ -5726,6 +7569,10 @@ snapshots: lodash-es@4.17.21: {} + lodash.debounce@4.0.8: {} + + lodash.throttle@4.1.1: {} + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -5802,6 +7649,23 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + mdast-util-from-markdown@1.3.1: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + decode-named-character-reference: 1.1.0 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + mdast-util-from-markdown@2.0.2: dependencies: '@types/mdast': 4.0.4 @@ -5954,6 +7818,10 @@ snapshots: unist-util-visit: 5.0.0 zwitch: 2.0.4 + mdast-util-to-string@3.2.0: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-string@4.0.0: dependencies: '@types/mdast': 4.0.4 @@ -5962,6 +7830,50 @@ snapshots: mdurl@2.0.0: {} + mermaid@10.9.3: + dependencies: + '@braintree/sanitize-url': 6.0.2 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + cytoscape: 3.32.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.32.0) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.10 + dayjs: 1.11.13 + dompurify: 3.1.6 + elkjs: 0.9.3 + katex: 0.16.22 + khroma: 2.1.0 + lodash-es: 4.17.21 + mdast-util-from-markdown: 1.3.1 + non-layered-tidy-tree-layout: 2.0.2 + stylis: 4.3.6 + ts-dedent: 2.2.0 + uuid: 9.0.1 + web-worker: 1.5.0 + transitivePeerDependencies: + - supports-color + + micromark-core-commonmark@1.1.0: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.1.0 @@ -6090,12 +8002,25 @@ snapshots: micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.2 + micromark-factory-destination@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-factory-destination@2.0.1: dependencies: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-factory-label@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + micromark-factory-label@2.0.1: dependencies: devlop: 1.1.0 @@ -6115,11 +8040,23 @@ snapshots: unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.2 + micromark-factory-space@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + micromark-factory-space@2.0.1: dependencies: micromark-util-character: 2.1.1 micromark-util-types: 2.0.2 + micromark-factory-title@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-factory-title@2.0.1: dependencies: micromark-factory-space: 2.0.1 @@ -6127,6 +8064,13 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-factory-whitespace@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-factory-whitespace@2.0.1: dependencies: micromark-factory-space: 2.0.1 @@ -6134,30 +8078,61 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-util-character@1.2.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-util-character@2.1.1: dependencies: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-util-chunked@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-chunked@2.0.1: dependencies: micromark-util-symbol: 2.0.1 + micromark-util-classify-character@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-util-classify-character@2.0.1: dependencies: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-util-combine-extensions@1.1.0: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + micromark-util-combine-extensions@2.0.1: dependencies: micromark-util-chunked: 2.0.1 micromark-util-types: 2.0.2 + micromark-util-decode-numeric-character-reference@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-decode-numeric-character-reference@2.0.2: dependencies: micromark-util-symbol: 2.0.1 + micromark-util-decode-string@1.1.0: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-decode-string@2.0.1: dependencies: decode-named-character-reference: 1.1.0 @@ -6165,6 +8140,8 @@ snapshots: micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 + micromark-util-encode@1.1.0: {} + micromark-util-encode@2.0.1: {} micromark-util-events-to-acorn@2.0.3: @@ -6177,22 +8154,45 @@ snapshots: micromark-util-types: 2.0.2 vfile-message: 4.0.2 + micromark-util-html-tag-name@1.2.0: {} + micromark-util-html-tag-name@2.0.1: {} + micromark-util-normalize-identifier@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-normalize-identifier@2.0.1: dependencies: micromark-util-symbol: 2.0.1 + micromark-util-resolve-all@1.1.0: + dependencies: + micromark-util-types: 1.1.0 + micromark-util-resolve-all@2.0.1: dependencies: micromark-util-types: 2.0.2 + micromark-util-sanitize-uri@1.2.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-sanitize-uri@2.0.1: dependencies: micromark-util-character: 2.1.1 micromark-util-encode: 2.0.1 micromark-util-symbol: 2.0.1 + micromark-util-subtokenize@1.1.0: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + micromark-util-subtokenize@2.1.0: dependencies: devlop: 1.1.0 @@ -6200,10 +8200,36 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-util-symbol@1.1.0: {} + micromark-util-symbol@2.0.1: {} + micromark-util-types@1.1.0: {} + micromark-util-types@2.0.2: {} + micromark@3.2.0: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.0 + decode-named-character-reference: 1.1.0 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + micromark@4.0.2: dependencies: '@types/debug': 4.1.12 @@ -6240,12 +8266,23 @@ snapshots: mkdirp@3.0.1: {} + mri@1.2.0: {} + mrmime@2.0.1: {} ms@2.1.3: {} + multimath@2.0.0: + dependencies: + glur: 1.1.2 + object-assign: 4.1.1 + nanoid@3.3.11: {} + nanoid@3.3.3: {} + + nanoid@4.0.2: {} + nanoid@5.1.5: {} neotraverse@0.6.18: {} @@ -6268,6 +8305,8 @@ snapshots: node-releases@2.0.19: {} + non-layered-tidy-tree-layout@2.0.2: {} + normalize-path@3.0.0: {} object-assign@4.1.1: {} @@ -6288,6 +8327,8 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 + open-color@1.9.1: {} + openai@4.100.0(ws@8.18.2)(zod@3.24.3): dependencies: '@types/node': 18.19.87 @@ -6320,6 +8361,8 @@ snapshots: pako@0.2.9: {} + pako@2.0.3: {} + parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -6343,22 +8386,58 @@ snapshots: dependencies: entities: 6.0.0 + path-data-parser@0.1.0: {} + + path-key@3.1.1: {} + path-parse@1.0.7: {} path-to-regexp@8.2.0: {} + perfect-freehand@1.2.0: {} + + pica@7.1.1: + dependencies: + glur: 1.1.2 + inherits: 2.0.4 + multimath: 2.0.0 + object-assign: 4.1.1 + webworkify: 1.5.0 + picocolors@1.1.1: {} picomatch@2.3.1: {} picomatch@4.0.2: {} + png-chunk-text@1.0.0: {} + + png-chunks-encode@1.0.0: + dependencies: + crc-32: 0.3.0 + sliced: 1.0.1 + + png-chunks-extract@1.0.0: + dependencies: + crc-32: 0.3.0 + + points-on-curve@0.2.0: {} + + points-on-curve@1.0.1: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + postcss@8.5.3: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + prettier@3.5.3: {} + pretty-bytes@7.0.0: {} prismjs@1.30.0: {} @@ -6483,6 +8562,8 @@ snapshots: punycode.js@2.3.1: {} + pwacompat@2.0.17: {} + radix3@1.1.2: {} re-resizable@6.11.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): @@ -6502,15 +8583,22 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) + react-dropzone@14.3.8(react@19.1.0): + dependencies: + attr-accept: 2.2.5 + file-selector: 2.1.2 + prop-types: 15.8.1 + react: 19.1.0 + react-hook-form@7.56.4(react@19.1.0): dependencies: react: 19.1.0 - react-i18next@15.5.2(i18next@25.2.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + react-i18next@15.5.2(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@babel/runtime': 7.27.1 html-parse-stringify: 3.0.1 - i18next: 25.2.0(typescript@5.8.3) + i18next: 25.2.1(typescript@5.8.3) react: 19.1.0 optionalDependencies: react-dom: 19.1.0(react@19.1.0) @@ -6520,24 +8608,24 @@ snapshots: react-refresh@0.17.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.1.5)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.1.6)(react@19.1.0): dependencies: react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.5)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.6)(react@19.1.0) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - react-remove-scroll@2.7.0(@types/react@19.1.5)(react@19.1.0): + react-remove-scroll@2.7.0(@types/react@19.1.6)(react@19.1.0): dependencies: react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.5)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.5)(react@19.1.0) + react-remove-scroll-bar: 2.3.8(@types/react@19.1.6)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.6)(react@19.1.0) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.5)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.1.5)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.1.6)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.1.6)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 react-resizable-panels@3.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: @@ -6553,13 +8641,13 @@ snapshots: sortablejs: 1.15.6 tiny-invariant: 1.2.0 - react-style-singleton@2.2.3(@types/react@19.1.5)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.1.6)(react@19.1.0): dependencies: get-nonce: 1.0.1 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 react-toastify@11.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: @@ -6569,6 +8657,10 @@ snapshots: react@19.1.0: {} + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + readdirp@4.1.2: {} recma-build-jsx@1.0.0: @@ -6725,6 +8817,8 @@ snapshots: retext-stringify: 4.0.0 unified: 11.0.5 + robust-predicates@3.0.2: {} + rollup-plugin-dts@6.2.1(rollup@4.40.1)(typescript@5.8.3): dependencies: magic-string: 0.30.17 @@ -6761,6 +8855,27 @@ snapshots: rope-sequence@1.3.4: {} + roughjs@4.6.4: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + + rw@1.3.3: {} + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safer-buffer@2.1.2: {} + + sass@1.51.0: + dependencies: + chokidar: 3.6.0 + immutable: 4.3.7 + source-map-js: 1.2.1 + sax@1.4.1: {} scheduler@0.26.0: {} @@ -6801,6 +8916,12 @@ snapshots: '@img/sharp-win32-x64': 0.33.5 optional: true + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + shiki@3.3.0: dependencies: '@shikijs/core': 3.3.0 @@ -6826,6 +8947,8 @@ snapshots: arg: 5.0.2 sax: 1.4.1 + sliced@1.0.1: {} + smol-toml@1.3.4: {} sortablejs@1.15.6: {} @@ -6863,6 +8986,8 @@ snapshots: dependencies: ansi-regex: 6.1.0 + style-mod@4.1.2: {} + style-to-js@1.1.16: dependencies: style-to-object: 1.0.8 @@ -6871,11 +8996,13 @@ snapshots: dependencies: inline-style-parser: 0.2.4 + stylis@4.3.6: {} + supports-preserve-symlinks-flag@1.0.0: {} tailwind-merge@3.3.0: {} - tailwindcss@4.1.7: {} + tailwindcss@4.1.8: {} tapable@2.2.1: {} @@ -6907,23 +9034,37 @@ snapshots: markdown-it-task-lists: 2.1.1 prosemirror-markdown: 1.13.2 + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + tr46@0.0.3: {} trim-lines@3.0.1: {} trough@2.2.0: {} + ts-dedent@2.2.0: {} + tsconfck@3.1.5(typescript@5.8.3): optionalDependencies: typescript: 5.8.3 tslib@2.8.1: {} + tunnel-rat@0.1.2(@types/react@19.1.6)(immer@10.1.1)(react@19.1.0): + dependencies: + zustand: 4.5.7(@types/react@19.1.6)(immer@10.1.1)(react@19.1.0) + transitivePeerDependencies: + - '@types/react' + - immer + - react + turndown@7.2.0: dependencies: '@mixmark-io/domino': 2.2.0 - tw-animate-css@1.3.0: {} + tw-animate-css@1.3.3: {} type-fest@4.40.1: {} @@ -6993,6 +9134,10 @@ snapshots: '@types/unist': 3.0.3 unist-util-visit: 5.0.0 + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -7012,7 +9157,7 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unstorage@1.16.0(idb-keyval@6.2.1): + unstorage@1.16.0(idb-keyval@6.2.2): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -7023,7 +9168,7 @@ snapshots: ofetch: 1.4.1 ufo: 1.6.1 optionalDependencies: - idb-keyval: 6.2.1 + idb-keyval: 6.2.2 update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: @@ -7031,20 +9176,33 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - use-callback-ref@1.3.3(@types/react@19.1.5)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.1.6)(react@19.1.0): dependencies: react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 - use-sidecar@1.1.3(@types/react@19.1.5)(react@19.1.0): + use-sidecar@1.1.3(@types/react@19.1.6)(react@19.1.0): dependencies: detect-node-es: 1.1.0 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 + + use-sync-external-store@1.5.0(react@19.1.0): + dependencies: + react: 19.1.0 + + uuid@9.0.1: {} + + uvu@0.5.6: + dependencies: + dequal: 2.0.3 + diff: 5.2.0 + kleur: 4.1.5 + sade: 1.8.1 vfile-location@5.0.3: dependencies: @@ -7061,17 +9219,17 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-remote-assets@2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)): + vite-plugin-remote-assets@2.0.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)): dependencies: debug: 4.4.0 magic-string: 0.30.17 node-fetch-native: 1.6.6 ohash: 2.0.11 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0) transitivePeerDependencies: - supports-color - vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1): + vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0): dependencies: esbuild: 0.25.3 fdir: 6.4.4(picomatch@4.0.2) @@ -7084,10 +9242,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 + sass: 1.51.0 - vitefu@1.0.6(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)): + vitefu@1.0.6(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0)): optionalDependencies: - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.51.0) void-elements@3.1.0: {} @@ -7097,8 +9256,12 @@ snapshots: web-streams-polyfill@4.0.0-beta.3: {} + web-worker@1.5.0: {} + webidl-conversions@3.0.1: {} + webworkify@1.5.0: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -7106,6 +9269,10 @@ snapshots: which-pm-runs@1.1.0: {} + which@2.0.2: + dependencies: + isexe: 2.0.0 + widest-line@5.0.0: dependencies: string-width: 7.2.0 @@ -7145,10 +9312,19 @@ snapshots: zod@3.24.3: {} - zustand@5.0.5(@types/react@19.1.5)(immer@10.1.1)(react@19.1.0): + zustand@4.5.7(@types/react@19.1.6)(immer@10.1.1)(react@19.1.0): + dependencies: + use-sync-external-store: 1.5.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.6 immer: 10.1.1 react: 19.1.0 + zustand@5.0.5(@types/react@19.1.6)(immer@10.1.1)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)): + optionalDependencies: + '@types/react': 19.1.6 + immer: 10.1.1 + react: 19.1.0 + use-sync-external-store: 1.5.0(react@19.1.0) + zwitch@2.0.4: {} diff --git a/src/apps/ai-chat/chat-history/List.tsx b/src/apps/ai-chat/chat-history/List.tsx index 3102c1a..6ea1e98 100644 --- a/src/apps/ai-chat/chat-history/List.tsx +++ b/src/apps/ai-chat/chat-history/List.tsx @@ -30,7 +30,7 @@ export const ChatHistoryList = ({ storeId }: { storeId: string }) => { }, }); const url = new URL(location.href); - url.searchParams.set('chatId', id); + url.searchParams.set('id', id); setHistoryState({}, url.toString()); }; const { control, handleSubmit, reset, getValues } = useForm({ defaultValues: { title: '', id: '' } }); diff --git a/src/apps/ai-chat/index.tsx b/src/apps/ai-chat/index.tsx index 355ce8b..92283d3 100644 --- a/src/apps/ai-chat/index.tsx +++ b/src/apps/ai-chat/index.tsx @@ -64,7 +64,7 @@ export const Chat = ({ storeId }: { storeId: string }) => { const chat = getHistoryState()[storeId]; const chatId = chat?.chatId; const url = new URL(window.location.href); - const urlChatId = url.searchParams.get('chatId'); + const urlChatId = url.searchParams.get('id'); if (chatId) { setId(chatId); } else if (urlChatId) { diff --git a/src/apps/ai-chat/modules/ModelNav.tsx b/src/apps/ai-chat/modules/ModelNav.tsx index 7c38152..3e645e9 100644 --- a/src/apps/ai-chat/modules/ModelNav.tsx +++ b/src/apps/ai-chat/modules/ModelNav.tsx @@ -104,14 +104,14 @@ export const ModelNav = () => { - + {/* { chat(); }}> - + */} ); diff --git a/src/apps/ai-html/Home.tsx b/src/apps/ai-html/Home.tsx new file mode 100644 index 0000000..106105f --- /dev/null +++ b/src/apps/ai-html/Home.tsx @@ -0,0 +1,169 @@ +import { createEditor } from '@kevisual/codemirror'; +import { Chain } from '@kevisual/codemirror/utils'; +import { IconButton } from '@/components/a/button.tsx'; +import { Tooltip } from '@/components/a/tooltip.tsx'; +import { UploadIcon, UploadCloud as CloudUploadOutlined } from 'lucide-react'; +import { useEffect, useRef, useState } from 'react'; +import { useDropzone } from 'react-dropzone'; +import { CacheWorkspace } from '@kevisual/cache'; +import { useHomeStore } from './store/index.ts'; +import { UploadModal } from './module/UploadModal.tsx'; +import { useShallow } from 'zustand/shallow'; +import { toast } from 'react-toastify'; +import { SuccessModal } from './module/SuccessModal.tsx'; +import { debounce } from 'lodash-es'; +const chain = new Chain(); +export const Home = () => { + const editorElRef = useRef(null); + const editorRef = useRef>(null); + const [isHtml, setIsHtml] = useState(true); + const [html, setHtml] = useState(''); + const { initApp, setOpenUploadModal, setText, filename, openPreview, setOpenPreview } = useHomeStore( + useShallow((state) => ({ + initApp: state.initApp, + setOpenUploadModal: state.setOpenUploadModal, + setText: state.setText, + filename: state.filename, + openPreview: state.openPreview, + setOpenPreview: state.setOpenPreview, + })), + ); + const onDrop = (acceptedFiles) => { + console.log(acceptedFiles); + const file = acceptedFiles[0]; + const reader = new FileReader(); + reader.onload = (e) => { + const content = e.target?.result as string; + if (editorRef.current) { + editorRef.current.dispatch({ + changes: { from: 0, to: editorRef.current.state.doc.length, insert: content }, + }); + } else { + toast.error('编辑器未初始化,请稍后再试'); + } + }; + reader.readAsText(file); + }; + const { getRootProps, getInputProps } = useDropzone({ onDrop, accept: { 'text/html': ['.html'], 'text/javascript': ['.js'], 'text/css': ['.css'] } }); + + useEffect(() => { + initApp(); + initEditor(); + return () => { + if (editorRef.current) { + chain.destroy(); + } + }; + }, []); + + const initEditor = async () => { + if (!editorElRef.current) return; + const cache = new CacheWorkspace(); + let cacheData = ''; + try { + cacheData = (await cache.storage.get('html-editor')) || ''; + } catch (error) { + console.error(error); + } + const type = filename.endsWith('.js') ? 'javascript' : filename.endsWith('.css') ? 'css' : 'html'; + setIsHtml(type === 'html'); + const debouncedSetHtml = debounce((value: string) => { + setHtml(value); + }, 500); + const editor = createEditor(editorElRef.current, { + type: type || 'html', + onChange: (value) => { + cache.storage.set('html-editor', value); + debouncedSetHtml(value); + }, + }); + const cmScroller = editorElRef.current.querySelector('.cm-scroller'); + if (cmScroller) { + cmScroller.classList.add('scrollbar'); + } + chain.setEditor(editor); + editorRef.current = editor; + setTimeout(() => { + if (cacheData) { + editorRef.current!.dispatch({ + changes: { from: 0, to: editorRef.current!.state.doc.length, insert: cacheData }, + }); + } + }, 300); + }; + + return ( +
+
+
+ + { + // const editorContent = editorRef.current?.getContent(); + const editorContent = editorRef.current?.state.doc.toString(); + if (editorContent) { + setOpenUploadModal(true); + setText(editorContent); + } else { + toast.error('请先输入代码'); + } + }}> + + + +
+
+ +
+ + + + +
+
+
+
+
+
+ + {'>'} 快速部署html小应用, 粘贴前端html代码。点击部署。(这个页面内容自动缓存到本地) + + 管理 + + +
+
+
+
+ {isHtml && ( + + + { + setOpenPreview(e.target.checked); + }} + /> + + + )} +
+ {isHtml && openPreview && ( +
+ +
+ )} +
+
+ + +
+ ); +}; diff --git a/src/apps/ai-html/index.tsx b/src/apps/ai-html/index.tsx new file mode 100644 index 0000000..d4674f7 --- /dev/null +++ b/src/apps/ai-html/index.tsx @@ -0,0 +1,14 @@ +import { Home } from './Home'; +import { ToastProvider } from '@/modules/toast/Provider'; + +export const App = () => { + return ( + + + + ); +}; + +export const AIHTML = () => { + return ; +}; diff --git a/src/apps/ai-html/module/SuccessModal.tsx b/src/apps/ai-html/module/SuccessModal.tsx new file mode 100644 index 0000000..c97abaf --- /dev/null +++ b/src/apps/ai-html/module/SuccessModal.tsx @@ -0,0 +1,76 @@ +import { Modal } from '@/components/a/modal'; +import { useShallow } from 'zustand/shallow'; +import { useHomeStore } from '../store'; +import { useEffect, useState } from 'react'; +import { queryLogin } from '@/modules/query'; +import { Button } from '@/components/a/button'; +export const Label = ({ label, children }: { label: string; children: React.ReactNode }) => { + return ( +
+
{label}
+
{children}
+
+ ); +}; +export const SuccessModal = () => { + const { openSuccessModal, setOpenSuccessModal, appKey, version, filename } = useHomeStore( + useShallow((state) => ({ + openSuccessModal: state.openSuccessModal, + setOpenSuccessModal: state.setOpenSuccessModal, + appKey: state.appKey, // + version: state.version, // + filename: state.filename, // + })), + ); + const [link, setLink] = useState(''); + useEffect(() => { + getLink(); + }, [openSuccessModal, appKey, filename]); + const getLink = async () => { + const user = await queryLogin.checkLocalUser(); + if (!user) { + setLink(''); + return; + } + const _currentHref = new URL(window.location.href); + const username = user?.username; + const _filename = filename; + let pathname = `/${username}/${appKey}/`; + if (_filename.endsWith('.html')) { + if (_filename !== 'index.html') { + pathname += _filename; + } + } + const newHref = new URL(pathname, _currentHref.origin); + const link = newHref.toString(); + setLink(link); + return link; + }; + return ( + +
+
+ + + + +
+ 注: 如果需要其他人访问,需要设置共享。 +
+ +
+ +
+
+
+
+ ); +}; diff --git a/src/apps/ai-html/module/UploadModal.tsx b/src/apps/ai-html/module/UploadModal.tsx new file mode 100644 index 0000000..ac625c2 --- /dev/null +++ b/src/apps/ai-html/module/UploadModal.tsx @@ -0,0 +1,114 @@ +import { useHomeStore } from '../store'; +import { Modal } from '@/components/a/modal'; + +import { Controller, useForm } from 'react-hook-form'; +import { Button } from '@/components/a/button'; +import { useEffect } from 'react'; +import { customAlphabet } from 'nanoid'; +import { toast } from 'react-toastify'; +import { uploadFile } from './upload-file'; +import { RefreshCcw } from 'lucide-react'; +import { queryApp } from '../store'; +import { Input } from '@/components/a/input'; +import { Tooltip } from '@/components/a/tooltip'; + +export const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz', 10); +export const UploadModal = () => { + const { appKey, version, filename, openUploadModal, text, setOpenUploadModal, setAppKey, setVersion, setFilename, setOpenSuccessModal } = useHomeStore(); + const { control, handleSubmit, reset, setValue } = useForm(); + // const { publishVersion } = useAppVersionStore(useShallow((state) => ({ publishVersion: state.publishVersion }))); + useEffect(() => { + if (openUploadModal) { + reset({ appKey: appKey || randomAppKey(), version: version || '1.0.0', filename: filename || 'index.html' }); + } + }, [openUploadModal]); + const randomAppKey = () => { + const randomAppKey = nanoid(4) + nanoid(4); + return randomAppKey; + }; + const onSubmit = async (data: any) => { + console.log(data); + if (!text) { + toast.error('代码不能为空'); + return; + } + if (!data.appKey) { + toast.error('应用key不能为空'); + return; + } + if (!data.version) { + toast.error('版本不能为空'); + return; + } + if (!data.filename) { + toast.error('文件名不能为空'); + return; + } + setAppKey(data.appKey); + setVersion(data.version); + setFilename(data.filename); + const res = await uploadFile({ + appKey: data.appKey, + version: data.version, + filename: data.filename, + text, + }); + if (res?.code === 200) { + // toast.success('部署成功'); + const toastId = toast.loading('发布中...'); + await new Promise((resolve) => setTimeout(resolve, 2000)); + const res = await queryApp.publishVersion({ data: { appKey: data.appKey, version: data.version } }); + toast.dismiss(toastId); + if (res?.code === 200) { + toast.success('发布成功'); + setOpenSuccessModal(true); + } else { + toast.error(res?.message || '发布失败'); + } + } else { + toast.error(res?.message || '部署失败'); + } + }; + return ( + +
+
部署页面
+
+
+
+ + } /> +
+
+ + } /> +
+
+ + } /> +
+
+ + +
+
+
+
+
+ ); +}; diff --git a/src/apps/ai-html/module/upload-file.ts b/src/apps/ai-html/module/upload-file.ts new file mode 100644 index 0000000..2653023 --- /dev/null +++ b/src/apps/ai-html/module/upload-file.ts @@ -0,0 +1,30 @@ +import { uploadChunkV2 } from '@/apps/draw/modules/upload'; +import { toFile } from '@/apps/draw/modules/to-file'; +import { toast } from 'react-toastify'; + +type UploadFileOpts = { + appKey: string; + version: string; + filename: string; + text: string; +}; +const getFilenameExtension = (filename: string) => { + return filename.split('.').pop() || ''; +}; +const allowFilesName = ['js', 'css', 'json', 'html']; +export const uploadFile = async (uploadFileOpts: UploadFileOpts) => { + const { appKey, version, filename, text } = uploadFileOpts; + const extension = getFilenameExtension(filename); + if (!allowFilesName.includes(extension)) { + toast.error('文件类型不支持'); + return; + } + const file = toFile(text, filename); + const res = await uploadChunkV2(file, { + appKey, + version, + filename, + noCheckAppFiles: false, + }); + return res as any; +}; diff --git a/src/apps/ai-html/store/index.ts b/src/apps/ai-html/store/index.ts new file mode 100644 index 0000000..a9177e1 --- /dev/null +++ b/src/apps/ai-html/store/index.ts @@ -0,0 +1,64 @@ +import { create } from 'zustand'; + +import { query } from '@/query/index.ts'; + +import { QueryApp } from '@/query/query-app/query-app'; + +export const queryApp = new QueryApp({ query }); + +export type HomeStore = { + appKey: string; + version: string; + setAppKey: (appKey: string) => void; + setVersion: (version: string) => void; + filename: string; + setFilename: (filename: string) => void; + initApp: () => void; + openUploadModal: boolean; + setOpenUploadModal: (open: boolean) => void; + text: string; + setText: (text: string) => void; + openSuccessModal: boolean; + setOpenSuccessModal: (open: boolean) => void; + openPreview: boolean; + setOpenPreview: (open: boolean) => void; +}; +export const useHomeStore = create((set) => ({ + appKey: '', + version: '', + openPreview: false, + setOpenPreview: (open: boolean) => { + set({ openPreview: open }); + }, + setAppKey: (appKey: string) => { + set({ appKey }); + localStorage.setItem('home-app-key', appKey); + }, + setVersion: (version: string) => { + set({ version }); + localStorage.setItem('home-app-version', version); + }, + filename: '', + setFilename: (filename: string) => { + set({ filename }); + localStorage.setItem('home-file-name', filename); + }, + initApp: () => { + const appKey = localStorage.getItem('home-app-key') || ''; + const version = localStorage.getItem('home-app-version') || ''; + const filename = localStorage.getItem('home-file-name') || ''; + set({ appKey, version, filename }); + }, + openUploadModal: false, + setOpenUploadModal: (open: boolean) => { + set({ openUploadModal: open }); + }, + text: '', + setText: (text: string) => { + set({ text }); + }, + openSuccessModal: false, + setOpenSuccessModal: (open: boolean) => { + set({ openSuccessModal: open }); + }, +})); diff --git a/src/apps/assistant-home/data/link.ts b/src/apps/assistant-home/data/link.ts new file mode 100644 index 0000000..de99cea --- /dev/null +++ b/src/apps/assistant-home/data/link.ts @@ -0,0 +1,48 @@ +import { isDev } from '../module/is-dev'; + +export const links = [ + { + title: '单页面应用开发', + description: '单页面应用开发模块。部署单个的网页的页面,适配简单的模块。复杂的使用管理中心。', + link: '/root/ai-pages/apps/html/', + }, + { + title: '提示词规划器(Mark Prompts)', + description: '提示词规划设计的模块。Mark的数据,type为chat的数据。', + link: '/root/ai-pages/mark/ai-prompts/', + }, + { + title: '管理中心', + description: '高级的代码管理中心,网页的版本上传和管理功能。', + link: '/root/center/', + }, + { + title: 'Mark Link', + description: 'Mark的管理模块, 网页导航搜索查询。Mark的数据,type类型为md。', + link: '/root/ai-pages/mark/ai-mark/', + }, + { + title: 'Mark Draw', + description: 'Mark的管理模块, Excaildraw的封装应用。Mark的数据,type类型为excaildraw。', + link: '/root/ai-pages/mark/draw/', + }, + { + title: 'Editor(Dev)', + description: 'Demo编辑器,支持Markdown编辑', + link: '/root/ai-pages/ai-editor/', + }, +].map((item) => { + if (isDev()) { + console.warn('Dev mode: link replaced', item.link); + item.link = item.link.replace('/root/ai-pages', ''); + } + return item; +}); + +export const links2 = [ + { + title: 'cli', + description: '命令行工具,支持多种功能', + link: '/root/cli', + }, +]; diff --git a/src/apps/assistant-home/index.tsx b/src/apps/assistant-home/index.tsx index 5896a49..5f1417d 100644 --- a/src/apps/assistant-home/index.tsx +++ b/src/apps/assistant-home/index.tsx @@ -6,7 +6,8 @@ import { getSuggestionItems } from '../ai-chat/editor/suggestion/item'; import { html2md } from '@kevisual/markdown-editor/tiptap/index.ts'; import { chatId } from '../ai-chat/utils/uuid'; import '../ai-chat/index.css'; -export const App = (props: any) => { +import { links } from './data/link.ts'; +export const Editor = () => { const ref = useRef(null); const editorRef = useRef(null); useEffect(() => { @@ -23,11 +24,32 @@ export const App = (props: any) => { }; }, []); return ( -
-
-
-
- +
+
+
+ ); +}; +export const App = (props: any) => { + return ( +
+ +
+ ); +}; + +const ShowLinks = (props: { links: { title: string; description: string; link: string }[] }) => { + return ( +
+
+ {props.links.map((item, index) => ( +
+ + {item.title} + +

{item.description}

+
+ ))} +
); }; diff --git a/src/apps/assistant-home/module/is-dev.ts b/src/apps/assistant-home/module/is-dev.ts new file mode 100644 index 0000000..8242e7f --- /dev/null +++ b/src/apps/assistant-home/module/is-dev.ts @@ -0,0 +1 @@ +export const isDev = () => location.origin.includes('localhost:4321'); diff --git a/src/apps/draw/App.tsx b/src/apps/draw/App.tsx new file mode 100644 index 0000000..961e399 --- /dev/null +++ b/src/apps/draw/App.tsx @@ -0,0 +1,103 @@ +import { useEffect, useLayoutEffect, useState } from 'react'; +import { getHistoryState, setHistoryState } from '@kevisual/store/web-page.js'; +import { Draw } from './pages/Draw'; +import { App as Manager, ProviderManagerName, useManagerStore } from '../mark/manager/Manager'; +import { ToastProvider } from '@/modules/toast/Provider'; + +import './index.css'; +import { useShallow } from 'zustand/shallow'; +import { toast } from 'react-toastify'; + +// @ts-ignore +window.EXCALIDRAW_ASSET_PATH = 'https://esm.sh/@excalidraw/excalidraw@0.18.0/dist/prod/'; + +export const App = () => { + return ( + + + + ); +}; +export const getUrlId = () => { + const url = new URL(window.location.href); + return url.searchParams.get('id') || ''; +}; +export const DrawApp = () => { + const [id, setId] = useState(''); + const urlId = getUrlId(); + + useLayoutEffect(() => { + const state = getHistoryState(); + if (state?.id) { + setId(state.id); + return; + } + if (urlId) { + setId(urlId); + } + }, []); + + return ( +
+ { + if (data.id !== id) { + setId(''); + const url = new URL(location.href); + url.searchParams.set('id', data.id); + console.log('set url', url.toString()); + setHistoryState({}, url.toString()); + setTimeout(() => { + setId(data.id); + }, 200); + const _store = useManagerStore.getState(ProviderManagerName); + if (_store.markData) { + _store.setCurrentMarkId(''); + // _store.setOpen(false); + _store.setMarkData(undefined); + } + } else if (data.id === id) { + toast.success('已选择当前画布'); + } + console.log('onClick', data, id); + }}> +
+ +
+
+
+ ); +}; + +export const DrawWrapper = (props: { id?: string; setId: (id: string) => void }) => { + const { id, setId } = props; + const store = useManagerStore( + useShallow((state) => { + return { + currentMarkId: state.currentMarkId, + }; + }), + ); + console.log('DrawApp store', store); + return ( + <> + {id ? ( + { + setId(''); + setHistoryState({ + id: '', + }); + }} + /> + ) : ( +
{store.currentMarkId ? '' : '请先选择一个画布'}
+ )} + + ); +}; diff --git a/src/apps/draw/Bootstrap.tsx b/src/apps/draw/Bootstrap.tsx new file mode 100644 index 0000000..c8f61d5 --- /dev/null +++ b/src/apps/draw/Bootstrap.tsx @@ -0,0 +1,21 @@ +import { createRoot } from 'react-dom/client'; +import { App } from './App.tsx'; +import { ToastContainer } from 'react-toastify'; +// import { I18NextProvider, initI18n } from '@kevisual/components/translate/index.tsx'; + +export const Bootstrap = (element: HTMLElement) => { + createRoot(element).render( + <> + {/* */} + + {/* */} + + , + ); +}; +type RenderProps = { + renderRoot: HTMLElement; +}; +export const render = ({ renderRoot }: RenderProps) => { + Bootstrap(renderRoot); +}; diff --git a/src/apps/draw/assets/excalidraw.css b/src/apps/draw/assets/excalidraw.css new file mode 100644 index 0000000..038c58d --- /dev/null +++ b/src/apps/draw/assets/excalidraw.css @@ -0,0 +1,5902 @@ +@charset "UTF-8"; +.excalidraw .Spinner { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + margin-left: auto; + margin-right: auto; + --spinner-color: var(--icon-fill-color); +} +.excalidraw .Spinner svg { + animation: rotate 1.6s linear infinite; + animation-delay: var(--spinner-delay); + transform-origin: center center; +} +.excalidraw .Spinner circle { + stroke: var(--spinner-color); + animation: dash 1.6s linear 0s infinite; + stroke-linecap: round; +} +@keyframes rotate { + to { + transform: rotate(360deg); + } +} +@keyframes dash { + 0% { + stroke-dasharray: 1, 300; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 150, 300; + stroke-dashoffset: -200; + } + to { + stroke-dasharray: 1, 300; + stroke-dashoffset: -280; + } +} +.excalidraw .ToolIcon { + border-radius: var(--border-radius-lg); + display: inline-flex; + align-items: center; + position: relative; + cursor: pointer; + -webkit-tap-highlight-color: transparent; + user-select: none; +} +.excalidraw .ToolIcon__hidden { + display: none !important; +} +.excalidraw .ToolIcon.fillable .ToolIcon_type_radio:checked + .ToolIcon__icon, +.excalidraw .ToolIcon.fillable .ToolIcon_type_checkbox:checked + .ToolIcon__icon { + --icon-fill-color: var(--color-on-primary-container); +} +.excalidraw .ToolIcon.fillable .ToolIcon_type_radio:checked + .ToolIcon__icon svg, +.excalidraw .ToolIcon.fillable .ToolIcon_type_checkbox:checked + .ToolIcon__icon svg { + fill: var(--icon-fill-color); +} +.excalidraw .ToolIcon .ToolIcon_type_radio:checked + .ToolIcon__icon, +.excalidraw .ToolIcon .ToolIcon_type_checkbox:checked + .ToolIcon__icon { + background: var(--color-surface-primary-container); + --keybinding-color: var(--color-on-primary-container); +} +.excalidraw .ToolIcon .ToolIcon_type_radio:checked + .ToolIcon__icon svg, +.excalidraw .ToolIcon .ToolIcon_type_checkbox:checked + .ToolIcon__icon svg { + color: var(--color-on-primary-container); +} +.excalidraw .ToolIcon .ToolIcon__keybinding { + bottom: 4px; + right: 4px; +} +.excalidraw .ToolIcon .ToolIcon__icon:hover { + background: var(--button-hover-bg); +} +.excalidraw .ToolIcon .ToolIcon__icon:active { + background: var(--button-hover-bg); + border: 1px solid var(--button-active-border); +} +.excalidraw .ToolIcon .ToolIcon__icon:active svg { + color: var(--color-on-primary-container); +} +.excalidraw .ToolIcon .ToolIcon__icon[aria-disabled='true'] { + background: initial; + border: none; +} +.excalidraw .ToolIcon .ToolIcon__icon[aria-disabled='true'] svg { + color: var(--color-disabled); +} +.excalidraw .ToolIcon--plain { + background-color: transparent; +} +.excalidraw .ToolIcon--plain .ToolIcon__icon { + width: 2rem; + height: 2rem; +} +.excalidraw .ToolIcon_type_radio, +.excalidraw .ToolIcon_type_checkbox { + position: absolute; + opacity: 0; + pointer-events: none; +} +.excalidraw .ToolIcon__icon { + box-sizing: border-box; + width: var(--default-button-size); + height: var(--default-button-size); + color: var(--icon-fill-color); + display: flex; + justify-content: center; + align-items: center; + border-radius: var(--border-radius-lg); +} +.excalidraw .ToolIcon__icon + .ToolIcon__label { + margin-inline-start: 0; +} +.excalidraw .ToolIcon__icon svg { + position: relative; + width: var(--default-icon-size); + height: var(--default-icon-size); + color: var(--icon-fill-color); +} +.excalidraw .ToolIcon__label { + display: flex; + align-items: center; + color: var(--icon-fill-color); + font-family: var(--ui-font); + margin: 0 0.8em; + text-overflow: ellipsis; +} +.excalidraw .ToolIcon__label .Spinner { + margin-left: 0.6em; +} +.excalidraw .ToolIcon_size_small .ToolIcon__icon { + width: 2rem; + height: 2rem; + font-size: 0.8em; +} +.excalidraw .ToolIcon_type_button, +.excalidraw .Modal .ToolIcon_type_button { + padding: 0; + border: none; + margin: 0; + font-size: inherit; + background-color: initial; +} +.excalidraw .ToolIcon_type_button:focus-visible, +.excalidraw .Modal .ToolIcon_type_button:focus-visible { + box-shadow: 0 0 0 2px var(--focus-highlight-color); +} +.excalidraw .ToolIcon_type_button.ToolIcon--selected, +.excalidraw .Modal .ToolIcon_type_button.ToolIcon--selected { + background-color: var(--button-gray-2); +} +.excalidraw .ToolIcon_type_button.ToolIcon--selected:active, +.excalidraw .Modal .ToolIcon_type_button.ToolIcon--selected:active, +.excalidraw .ToolIcon_type_button:active, +.excalidraw .Modal .ToolIcon_type_button:active { + background-color: var(--button-gray-3); +} +.excalidraw .ToolIcon_type_button:disabled, +.excalidraw .Modal .ToolIcon_type_button:disabled { + cursor: default; +} +.excalidraw .ToolIcon_type_button:disabled:active, +.excalidraw .ToolIcon_type_button:disabled:focus-visible, +.excalidraw .ToolIcon_type_button:disabled:hover, +.excalidraw .Modal .ToolIcon_type_button:disabled:active, +.excalidraw .Modal .ToolIcon_type_button:disabled:focus-visible, +.excalidraw .Modal .ToolIcon_type_button:disabled:hover { + background-color: initial; + border: none; + box-shadow: none; +} +.excalidraw .ToolIcon_type_button:disabled svg, +.excalidraw .Modal .ToolIcon_type_button:disabled svg { + color: var(--color-disabled); +} +.excalidraw .ToolIcon_type_button--show, +.excalidraw .Modal .ToolIcon_type_button--show { + visibility: visible; +} +.excalidraw .ToolIcon_type_button--hide, +.excalidraw .Modal .ToolIcon_type_button--hide { + display: none !important; +} +.excalidraw .ToolIcon_type_floating, +.excalidraw .ToolIcon_type_floating:hover, +.excalidraw .ToolIcon_type_floating:active { + background-color: transparent; +} +.excalidraw .ToolIcon_type_floating .ToolIcon__icon { + background-color: var(--button-gray-1); + width: 2rem; + height: 2rem; +} +.excalidraw .ToolIcon_type_floating .ToolIcon__icon:hover { + background-color: var(--button-gray-2); +} +.excalidraw .ToolIcon_type_floating .ToolIcon__icon:active { + background-color: var(--button-gray-3); +} +.excalidraw .ToolIcon__keybinding { + position: absolute; + bottom: 2px; + right: 3px; + font-size: 0.625rem; + color: var(--keybinding-color); + font-family: var(--ui-font); + user-select: none; +} +:root[dir='ltr'] .excalidraw .unlocked-icon { + left: 2px; +} +:root[dir='rtl'] .excalidraw .unlocked-icon { + right: 2px; +} +.excalidraw .App-toolbar-container .ToolIcon__icon { + width: var(--lg-button-size); + height: var(--lg-button-size); +} +@media screen and (max-width: 450px) { + .excalidraw .App-toolbar-container .ToolIcon__icon { + width: 1.8rem; + height: 1.8rem; + } +} +@media screen and (max-width: 379px) { + .excalidraw .App-toolbar-container .ToolIcon__icon { + width: 1.5rem; + height: 1.5rem; + } +} +.excalidraw .App-toolbar-container .ToolIcon__icon svg { + width: var(--lg-icon-size); + height: var(--lg-icon-size); +} +.excalidraw .App-toolbar-container .ToolIcon__LaserPointer .ToolIcon__icon, +.excalidraw .App-toolbar-container .ToolIcon__MagicButton .ToolIcon__icon { + width: var(--default-button-size); + height: var(--default-button-size); +} +.excalidraw button.standalone { + display: flex; + justify-content: center; + align-items: center; + padding: 0.625rem; + width: var(--button-width, var(--default-button-size)); + height: var(--button-height, var(--default-button-size)); + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: var(--button-border, var(--default-border-color)); + border-radius: var(--border-radius-lg); + cursor: pointer; + background-color: var(--button-bg, var(--island-bg-color)); + color: var(--button-color, var(--color-on-surface)); + font-family: var(--ui-font); + padding: 0; +} +.excalidraw button.standalone svg { + width: var(--button-width, var(--lg-icon-size)); + height: var(--button-height, var(--lg-icon-size)); +} +.excalidraw button.standalone:hover { + background-color: var(--button-hover-bg, var(--island-bg-color)); + border-color: var(--button-hover-border, var(--button-border, var(--default-border-color))); + color: var(--button-hover-color, var(--button-color, var(--text-primary-color, inherit))); +} +.excalidraw button.standalone:active { + background-color: var(--button-active-bg, var(--island-bg-color)); + border-color: var(--button-active-border, var(--color-primary-darkest)); +} +.excalidraw button.standalone.active { + background-color: var(--button-selected-bg, var(--color-surface-primary-container)); + border-color: var(--button-selected-border, var(--color-surface-primary-container)); +} +.excalidraw button.standalone.active:hover { + background-color: var(--button-selected-hover-bg, var(--color-surface-primary-container)); +} +.excalidraw button.standalone.active svg { + color: var(--button-color, var(--color-on-primary-container)); +} +.excalidraw button.standalone svg { + width: var(--default-icon-size); + height: var(--default-icon-size); +} +.excalidraw button.standalone > * { + pointer-events: none; +} +.excalidraw .excalidraw-eye-dropper-container, +.excalidraw .excalidraw-eye-dropper-backdrop { + position: absolute; + width: 100%; + height: 100%; + z-index: var(--zIndex-eyeDropperBackdrop); + touch-action: none; +} +.excalidraw .excalidraw-eye-dropper-container { + pointer-events: none; +} +.excalidraw .excalidraw-eye-dropper-backdrop { + pointer-events: all; +} +.excalidraw .excalidraw-eye-dropper-preview { + pointer-events: none; + width: 3rem; + height: 3rem; + position: fixed; + z-index: var(--zIndex-eyeDropperPreview); + border-radius: 1rem; + border: 1px solid var(--default-border-color); + filter: var(--theme-filter); +} +.excalidraw .excalidraw-eye-dropper-trigger { + width: 1.25rem; + height: 1.25rem; + cursor: pointer; + padding: 4px; + margin-right: -4px; + margin-left: -2px; + border-radius: 0.5rem; + color: var(--icon-fill-color); +} +.excalidraw .excalidraw-eye-dropper-trigger:hover { + background: var(--button-hover-bg); +} +.excalidraw .excalidraw-eye-dropper-trigger.selected { + color: var(--color-primary); + background: var(--color-primary-light); +} +.excalidraw .Island { + --padding: 0; + box-sizing: border-box; + background-color: var(--island-bg-color); + box-shadow: var(--shadow-island); + border-radius: var(--border-radius-lg); + padding: calc(var(--padding) * var(--space-factor)); + position: relative; + transition: box-shadow 0.5s ease-in-out; +} +.excalidraw .Island.zen-mode { + box-shadow: none; +} +.excalidraw .focus-visible-none:focus-visible { + outline: none !important; +} +.excalidraw .color-picker__heading { + padding: 0 0.5rem; + font-size: 0.75rem; + text-align: left; +} +.excalidraw .color-picker-container { + display: grid; + grid-template-columns: 1fr 20px 1.625rem; + padding: 0.25rem 0px; + align-items: center; +} +.excalidraw--mobile.excalidraw .color-picker-container { + max-width: 11rem; +} +.excalidraw .color-picker__top-picks { + display: flex; + justify-content: space-between; +} +.excalidraw .color-picker__button { + --radius: 0.25rem; + padding: 0; + margin: 0; + width: 1.35rem; + height: 1.35rem; + border: 1px solid var(--color-gray-30); + border-radius: var(--radius); + filter: var(--theme-filter); + background-color: var(--swatch-color); + background-position: left center; + position: relative; + font-family: inherit; + box-sizing: border-box; +} +.excalidraw .color-picker__button:hover:after { + content: ''; + position: absolute; + inset: -2px; + box-shadow: 0 0 0 1px var(--color-gray-30); + border-radius: calc(var(--radius) + 1px); + filter: var(--theme-filter); +} +.excalidraw .color-picker__button.active .color-picker__button-outline { + position: absolute; + inset: -2px; + box-shadow: 0 0 0 1px var(--color-primary-darkest); + z-index: 1; + border-radius: calc(var(--radius) + 1px); + filter: var(--theme-filter); +} +.excalidraw .color-picker__button:focus-visible { + outline: none; +} +.excalidraw .color-picker__button:focus-visible:after { + content: ''; + position: absolute; + inset: -4px; + border: 3px solid var(--focus-highlight-color); + border-radius: calc(var(--radius) + 1px); +} +.excalidraw .color-picker__button:focus-visible.active .color-picker__button-outline { + display: none; +} +.excalidraw .color-picker__button--large { + --radius: 0.5rem; + width: 1.875rem; + height: 1.875rem; +} +.excalidraw .color-picker__button.is-transparent { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==); +} +.excalidraw .color-picker__button--no-focus-visible { + border: 0; +} +.excalidraw .color-picker__button--no-focus-visible:after { + display: none; +} +.excalidraw .color-picker__button--no-focus-visible:focus-visible { + outline: none !important; +} +.excalidraw .color-picker__button.active-color { + border-radius: calc(var(--radius) + 1px); + width: 1.625rem; + height: 1.625rem; +} +.excalidraw .color-picker__button__hotkey-label { + position: absolute; + right: 4px; + bottom: 4px; + filter: none; + font-size: 11px; +} +.excalidraw .color-picker { + background: var(--popup-bg-color); + border: 0 solid rgba(255, 255, 255, 0.25); + box-shadow: #00000040 0 1px 4px; + border-radius: 4px; + position: absolute; +} +:root[dir='ltr'] .excalidraw .color-picker { + left: -5.5px; +} +:root[dir='rtl'] .excalidraw .color-picker { + right: -5.5px; +} +.excalidraw .color-picker-control-container { + display: grid; + grid-template-columns: auto 1fr; + align-items: center; + column-gap: 0.5rem; +} +.excalidraw .color-picker-control-container + .popover { + position: static; +} +.excalidraw .color-picker-popover-container { + margin-top: -0.25rem; +} +:root[dir='ltr'] .excalidraw .color-picker-popover-container { + margin-left: 0.5rem; +} +:root[dir='rtl'] .excalidraw .color-picker-popover-container { + margin-left: -3rem; +} +.excalidraw .color-picker-triangle { + width: 0; + height: 0; + border-style: solid; + border-width: 0 9px 10px; + border-color: transparent transparent var(--popup-bg-color); + position: absolute; + top: 10px; +} +:root[dir='ltr'] .excalidraw .color-picker-triangle { + transform: rotate(270deg); + left: -14px; +} +:root[dir='rtl'] .excalidraw .color-picker-triangle { + transform: rotate(90deg); + right: -14px; +} +.excalidraw .color-picker-triangle-shadow { + border-color: transparent transparent rgba(0, 0, 0, 0.1); +} +:root[dir='ltr'] .excalidraw .color-picker-triangle-shadow { + left: -14px; +} +:root[dir='rtl'] .excalidraw .color-picker-triangle-shadow { + right: -16px; +} +.excalidraw .color-picker-content { + display: flex; + flex-direction: column; + gap: 0.75rem; + outline: none; +} +.excalidraw .color-picker-content--default { + padding: 0.5rem; + display: grid; + grid-template-columns: repeat(5, 1.875rem); + grid-gap: 0.25rem; + border-radius: 4px; +} +.excalidraw .color-picker-content--default:focus { + outline: none; + box-shadow: 0 0 0 2px var(--focus-highlight-color); +} +.excalidraw .color-picker-content--canvas { + display: flex; + flex-direction: column; + padding: 0.25rem; +} +.excalidraw .color-picker-content--canvas-title { + color: #868e96; + font-size: 12px; + padding: 0 0.25rem; +} +.excalidraw .color-picker-content--canvas-colors { + padding: 0.5rem 0; +} +.excalidraw .color-picker-content--canvas-colors .color-picker-swatch { + margin: 0 0.25rem; +} +.excalidraw .color-picker-content .color-input-container { + grid-column: 1 / span 5; +} +.excalidraw .color-picker-swatch { + position: relative; + height: 1.875rem; + width: 1.875rem; + cursor: pointer; + border-radius: 4px; + margin: 0; + box-sizing: border-box; + border: 1px solid #ddd; + background-color: currentColor !important; + filter: var(--theme-filter); +} +.excalidraw .color-picker-swatch:focus { + box-shadow: 0 0 4px 1px currentColor; + border-color: var(--select-highlight-color); +} +.excalidraw .color-picker-transparent { + border-radius: 4px; + box-shadow: #0000001a 0 0 0 1px inset; + position: absolute; + inset: 0; +} +.excalidraw .color-picker-transparent, +.excalidraw .color-picker-label-swatch { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==) + left center; +} +.excalidraw .color-picker-hash { + height: var(--default-button-size); + flex-shrink: 0; + padding: 0.5rem 0.5rem 0.5rem 0.75rem; + border: 1px solid var(--default-border-color); + border-right: 0; + box-sizing: border-box; + color: var(--input-label-color); + display: flex; + align-items: center; + justify-content: center; + position: relative; +} +:root[dir='ltr'] .excalidraw .color-picker-hash { + border-radius: var(--border-radius-lg) 0 0 var(--border-radius-lg); +} +:root[dir='rtl'] .excalidraw .color-picker-hash { + border-radius: 0 var(--border-radius-lg) var(--border-radius-lg) 0; + border-right: 1px solid var(--default-border-color); + border-left: 0; +} +.excalidraw .color-input-container { + display: flex; +} +.excalidraw .color-input-container:focus-within { + box-shadow: 0 0 0 1px var(--color-primary-darkest); + border-radius: var(--border-radius-lg); +} +.excalidraw .color-picker__input-label { + display: grid; + grid-template-columns: auto 1fr auto auto; + gap: 8px; + align-items: center; + border: 1px solid var(--default-border-color); + border-radius: 8px; + padding: 0 12px; + margin: 8px; + box-sizing: border-box; +} +.excalidraw .color-picker__input-label:focus-within { + box-shadow: 0 0 0 1px var(--color-primary-darkest); + border-radius: var(--border-radius-lg); +} +.excalidraw .color-picker__input-hash { + padding: 0 0.25rem; +} +.excalidraw .color-picker-input { + box-sizing: border-box; + width: 100%; + margin: 0; + font-size: 0.875rem; + font-family: inherit; + background-color: transparent; + color: var(--text-primary-color); + border: 0; + outline: none; + height: var(--default-button-size); + border: 1px solid var(--default-border-color); + border-left: 0; + letter-spacing: 0.4px; + padding: 0.5rem 0.5rem 0.5rem 0.25rem; + appearance: none; +} +:root[dir='ltr'] .excalidraw .color-picker-input { + border-radius: 0 var(--border-radius-lg) var(--border-radius-lg) 0; +} +:root[dir='rtl'] .excalidraw .color-picker-input { + border-radius: var(--border-radius-lg) 0 0 var(--border-radius-lg); + border-left: 1px solid var(--default-border-color); + border-right: 0; +} +.excalidraw .color-picker-input:focus-visible { + box-shadow: none; +} +.excalidraw .color-picker-label-swatch-container { + border: 1px solid var(--default-border-color); + border-radius: var(--border-radius-lg); + width: var(--default-button-size); + height: var(--default-button-size); + box-sizing: border-box; + overflow: hidden; +} +.excalidraw .color-picker-label-swatch { + display: flex; + justify-content: center; + align-items: center; + padding: 0.625rem; + width: var(--button-width, var(--default-button-size)); + height: var(--button-height, var(--default-button-size)); + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: var(--button-border, var(--default-border-color)); + border-radius: var(--border-radius-lg); + cursor: pointer; + background-color: var(--button-bg, var(--island-bg-color)); + color: var(--button-color, var(--color-on-surface)); + font-family: var(--ui-font); + background-color: var(--swatch-color) !important; + overflow: hidden; + position: relative; + filter: var(--theme-filter); + border: 0 !important; +} +.excalidraw .color-picker-label-swatch svg { + width: var(--button-width, var(--lg-icon-size)); + height: var(--button-height, var(--lg-icon-size)); +} +.excalidraw .color-picker-label-swatch:hover { + background-color: var(--button-hover-bg, var(--island-bg-color)); + border-color: var(--button-hover-border, var(--button-border, var(--default-border-color))); + color: var(--button-hover-color, var(--button-color, var(--text-primary-color, inherit))); +} +.excalidraw .color-picker-label-swatch:active { + background-color: var(--button-active-bg, var(--island-bg-color)); + border-color: var(--button-active-border, var(--color-primary-darkest)); +} +.excalidraw .color-picker-label-swatch.active { + background-color: var(--button-selected-bg, var(--color-surface-primary-container)); + border-color: var(--button-selected-border, var(--color-surface-primary-container)); +} +.excalidraw .color-picker-label-swatch.active:hover { + background-color: var(--button-selected-hover-bg, var(--color-surface-primary-container)); +} +.excalidraw .color-picker-label-swatch.active svg { + color: var(--button-color, var(--color-on-primary-container)); +} +.excalidraw .color-picker-label-swatch:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: var(--swatch-color); +} +.excalidraw .color-picker-keybinding { + position: absolute; + bottom: 2px; + font-size: 0.7em; +} +:root[dir='ltr'] .excalidraw .color-picker-keybinding { + right: 2px; +} +:root[dir='rtl'] .excalidraw .color-picker-keybinding { + left: 2px; +} +.excalidraw--mobile.excalidraw .color-picker-keybinding { + display: none; +} +.excalidraw .color-picker-type-canvasBackground .color-picker-keybinding { + color: #aaa; +} +.excalidraw .color-picker-type-elementBackground .color-picker-keybinding { + color: #fff; +} +.excalidraw .color-picker-swatch[aria-label='transparent'] .color-picker-keybinding { + color: #aaa; +} +.excalidraw .color-picker-type-elementStroke .color-picker-keybinding { + color: #d4d4d4; +} +.excalidraw.theme--dark .color-picker-type-elementBackground .color-picker-keybinding, +.excalidraw.theme--dark .color-picker-swatch[aria-label='transparent'] .color-picker-keybinding { + color: #000; +} +.excalidraw .picker { + padding: 0.5rem; + background: var(--popup-bg-color); + border: 0 solid rgba(255, 255, 255, 0.25); + box-shadow: var(--shadow-island); + border-radius: 4px; + position: absolute; +} +:root[dir='rtl'] .excalidraw .picker { + padding: 0.4rem; +} +.excalidraw .picker-container button, +.excalidraw .picker button { + position: relative; + display: flex; + align-items: center; + justify-content: center; +} +.excalidraw .picker-container button:focus-visible, +.excalidraw .picker button:focus-visible { + outline: transparent; + background-color: var(--button-gray-2); +} +.excalidraw .picker-container button:focus-visible svg, +.excalidraw .picker button:focus-visible svg { + opacity: 1; +} +.excalidraw .picker-container button:hover, +.excalidraw .picker button:hover { + background-color: var(--button-gray-2); +} +.excalidraw .picker-container button:active, +.excalidraw .picker button:active { + background-color: var(--button-gray-3); +} +.excalidraw .picker-container button:disabled, +.excalidraw .picker button:disabled { + cursor: not-allowed; +} +.excalidraw .picker-container button svg, +.excalidraw .picker button svg { + margin: 0; + width: 36px; + height: 18px; + pointer-events: none; +} +.excalidraw .picker button { + padding: 0.25rem 0.28rem 0.35rem 0.25rem; +} +.excalidraw .picker-content { + display: grid; + grid-template-columns: repeat(4, auto); + grid-gap: 0.5rem; + border-radius: 4px; +} +.excalidraw .picker-collapsible { + font-size: 0.75rem; + padding: 0.5rem 0; +} +.excalidraw .picker-keybinding { + position: absolute; + bottom: 2px; + font-size: 0.7em; + color: var(--keybinding-color); +} +:root[dir='ltr'] .excalidraw .picker-keybinding { + right: 2px; +} +:root[dir='rtl'] .excalidraw .picker-keybinding { + left: 2px; +} +.excalidraw--mobile.excalidraw .picker-keybinding { + display: none; +} +.excalidraw .picker-type-canvasBackground .picker-keybinding { + color: #aaa; +} +.excalidraw .picker-type-elementBackground .picker-keybinding { + color: #fff; +} +.excalidraw .picker-swatch[aria-label='transparent'] .picker-keybinding { + color: #aaa; +} +.excalidraw .picker-type-elementStroke .picker-keybinding { + color: #d4d4d4; +} +.excalidraw.theme--dark .picker-type-elementBackground .picker-keybinding, +.excalidraw.theme--dark .picker-swatch[aria-label='transparent'] .picker-keybinding { + color: #000; +} +.excalidraw { + --list-border-color: var(--color-gray-20); +} +.excalidraw .QuickSearch__wrapper { + position: relative; + height: 2.6rem; + border-bottom: 1px solid var(--list-border-color); +} +.excalidraw .QuickSearch__wrapper svg { + position: absolute; + top: 47.5%; + transform: translateY(-50%); + left: 0.75rem; + width: 1.25rem; + height: 1.25rem; + color: var(--color-gray-40); + z-index: 1; +} +.excalidraw.theme--dark { + --list-border-color: var(--color-gray-80); +} +.excalidraw.theme--dark .QuickSearch__wrapper { + border-bottom: none; +} +.excalidraw .QuickSearch__input { + position: absolute; + top: 0; + left: 0; + width: 100%; + box-sizing: border-box; + border: 0 !important; + font-size: 0.875rem; + padding-left: 2.5rem !important; + padding-right: 0.75rem !important; +} +.excalidraw .QuickSearch__input::placeholder { + color: var(--color-gray-40); +} +.excalidraw .QuickSearch__input:focus { + box-shadow: none !important; +} +.excalidraw .ScrollableList__wrapper { + position: static !important; + border: none; + font-size: 0.875rem; + overflow-y: auto; +} +.excalidraw .ScrollableList__wrapper > .empty, +.excalidraw .ScrollableList__wrapper > .hint { + display: flex; + justify-content: center; + align-items: center; + padding: 0.5rem; + font-size: 0.75rem; + color: var(--color-gray-60); + overflow: hidden; + text-align: center; + line-height: 150%; +} +.excalidraw .FontPicker__container { + display: grid; + grid-template-columns: calc(1rem + 3 * var(--default-button-size)) 1rem 1fr; + align-items: center; +} +.excalidraw--mobile.excalidraw .FontPicker__container { + max-width: calc(2rem + 4 * var(--default-button-size)); +} +.excalidraw { + --slider-thumb-size: 16px; +} +.excalidraw .range-wrapper { + position: relative; + padding-top: 10px; + padding-bottom: 30px; +} +.excalidraw .range-input { + width: 100%; + height: 4px; + -webkit-appearance: none; + background: var(--color-slider-track); + border-radius: 2px; + outline: none; +} +.excalidraw .range-input::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: var(--slider-thumb-size); + height: var(--slider-thumb-size); + background: var(--color-slider-thumb); + border-radius: 50%; + cursor: pointer; + border: none; +} +.excalidraw .range-input::-moz-range-thumb { + width: var(--slider-thumb-size); + height: var(--slider-thumb-size); + background: var(--color-slider-thumb); + border-radius: 50%; + cursor: pointer; + border: none; +} +.excalidraw .value-bubble { + position: absolute; + bottom: 0; + transform: translate(-50%); + font-size: 12px; + color: var(--text-primary-color); +} +.excalidraw .zero-label { + position: absolute; + bottom: 0; + left: 4px; + font-size: 12px; + color: var(--text-primary-color); +} +.excalidraw-tooltip { + --ui-font: Assistant, system-ui, BlinkMacSystemFont, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif; + font-family: var(--ui-font); + position: fixed; + z-index: var(--zIndex-popup); + padding: 8px; + border-radius: 6px; + box-sizing: border-box; + pointer-events: none; + word-wrap: break-word; + background: #000; + line-height: 1.5; + text-align: center; + font-size: 13px; + font-weight: 500; + color: #fff; + display: none; +} +.excalidraw-tooltip.excalidraw-tooltip--visible { + display: block; +} +.excalidraw-tooltip-wrapper { + display: flex; +} +.excalidraw-tooltip-icon { + width: 0.9em; + height: 0.9em; + margin-left: 5px; + margin-top: 1px; + display: flex; +} +.excalidraw--mobile.excalidraw-tooltip-icon { + display: none; +} +.excalidraw .TextInput { + display: inline-block; +} +.ProjectName { + margin: auto; + display: flex; + align-items: center; +} +.ProjectName .TextInput { + height: calc(1rem - 3px); + width: 200px; + overflow: hidden; + text-align: center; + margin-left: 8px; + text-overflow: ellipsis; +} +.ProjectName .TextInput--readonly { + background: none; + border: none; + width: auto; + max-width: 200px; + padding-left: 2px; +} +.ProjectName .TextInput--readonly:hover { + background: none; +} +.excalidraw .Checkbox { + margin: 4px 0.3em; + display: flex; + align-items: center; + cursor: pointer; + user-select: none; + -webkit-tap-highlight-color: transparent; +} +.excalidraw .Checkbox:hover:not(.is-checked) .Checkbox-box:not(:focus) { + box-shadow: 0 0 0 2px #4dabf7; +} +.excalidraw .Checkbox:hover:not(.is-checked) .Checkbox-box:not(:focus) svg { + display: block; + opacity: 0.3; +} +.excalidraw .Checkbox:active .Checkbox-box { + box-shadow: 0 0 2px 1px inset #1c7ed6 !important; +} +.excalidraw .Checkbox:hover .Checkbox-box { + background-color: #d0ebff33; +} +.excalidraw .Checkbox.is-checked .Checkbox-box { + background-color: #d0ebff; +} +.excalidraw .Checkbox.is-checked .Checkbox-box svg { + display: block; +} +.excalidraw .Checkbox.is-checked:hover .Checkbox-box { + background-color: #a5d8ff; +} +.excalidraw .Checkbox .Checkbox-box { + width: 22px; + height: 22px; + padding: 0; + flex: 0 0 auto; + margin: 0 1em; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 0 0 2px #1c7ed6; + background-color: transparent; + border-radius: 4px; + color: #1c7ed6; + border: 0; +} +.excalidraw .Checkbox .Checkbox-box:focus { + box-shadow: 0 0 0 3px #1c7ed6; +} +.excalidraw .Checkbox .Checkbox-box svg { + display: none; + width: 16px; + height: 16px; + stroke-width: 3px; +} +.excalidraw .Checkbox .Checkbox-label { + display: flex; + align-items: center; +} +.excalidraw .Checkbox .excalidraw-tooltip-icon { + width: 1em; + height: 1em; +} +.excalidraw .Avatar { + width: var(--avatar-size, 1.5rem); + height: var(--avatar-size, 1.5rem); + position: relative; + border-radius: 100%; + outline-offset: 2px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + font-size: 0.75rem; + font-weight: 700; + line-height: 1; + color: var(--color-gray-90); + flex: 0 0 auto; +} +.excalidraw .Avatar:active { + transform: scale(0.94); +} +.excalidraw .Avatar-img { + width: 100%; + height: 100%; + border-radius: 100%; +} +.excalidraw .Avatar:before { + content: ''; + position: absolute; + inset: -3px; + border-radius: 100%; +} +.excalidraw .Avatar.is-followed:before { + border-color: var(--color-primary-hover); + box-shadow: 0 0 0 1px var(--color-primary-hover); +} +.excalidraw .Avatar.is-current-user { + cursor: auto; +} +.excalidraw-hyperlinkContainer { + display: flex; + align-items: center; + justify-content: space-between; + position: absolute; + box-shadow: 0 2px 4px #0000004d; + z-index: var(--zIndex-hyperlinkContainer); + background: var(--island-bg-color); + border-radius: var(--border-radius-md); + box-sizing: border-box; + min-height: 42px; +} +.excalidraw-hyperlinkContainer-input, +.excalidraw-hyperlinkContainer button { + z-index: 100; +} +.excalidraw-hyperlinkContainer-input, +.excalidraw-hyperlinkContainer-link { + height: 24px; + padding: 0 8px; + line-height: 24px; + font-size: 0.9rem; + font-weight: 500; + font-family: var(--ui-font); +} +.excalidraw-hyperlinkContainer-input { + width: 18rem; + background-color: transparent; + color: var(--text-primary-color); + outline: none; + border: none; + box-shadow: none !important; +} +.excalidraw-hyperlinkContainer-link { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 15rem; +} +.excalidraw-hyperlinkContainer button { + color: #228be6; + background-color: transparent !important; + font-weight: 500; +} +.excalidraw-hyperlinkContainer button.excalidraw-hyperlinkContainer--remove { + color: #c92a2a; +} +.excalidraw-hyperlinkContainer--remove .ToolIcon__icon svg { + color: #fa5252; +} +.excalidraw-hyperlinkContainer .ToolIcon__icon { + width: 2rem; + height: 2rem; +} +.excalidraw-hyperlinkContainer__buttons { + flex: 0 0 auto; +} +.excalidraw .Dialog { + user-select: text; + cursor: auto; +} +.excalidraw .Dialog__title { + margin: 0; + text-align: left; + font-size: 1.25rem; + border-bottom: 1px solid var(--dialog-border-color); + padding: 0 0 0.75rem; + margin-bottom: 1.5rem; +} +.excalidraw .Dialog__close { + color: var(--color-gray-40); + margin: 0; + position: absolute; + top: 0.75rem; + right: 0.5rem; + border: 0; + background-color: transparent; + line-height: 0; + cursor: pointer; +} +.excalidraw .Dialog__close:hover { + color: var(--color-gray-60); +} +.excalidraw .Dialog__close:active { + color: var(--color-gray-40); +} +.excalidraw .Dialog__close svg { + width: 1.5rem; + height: 1.5rem; +} +.excalidraw .Dialog__close + .Dialog__content { + --offset: 28px; + height: calc(100% - var(--offset)) !important; + margin-top: var(--offset) !important; +} +.excalidraw .Dialog--fullscreen .Dialog__close { + top: 1.25rem; + right: 1.25rem; +} +.excalidraw.excalidraw-modal-container { + position: absolute; + z-index: var(--zIndex-modal); +} +.excalidraw .Modal { + position: absolute; + inset: 0; + align-items: center; + justify-content: center; + overflow: auto; + padding: calc(var(--space-factor) * 10); + display: flex; + flex-direction: column; +} +.excalidraw .Modal .Island { + padding: 2.5rem; + border: 0; + box-shadow: none; + border-radius: 0; +} +.excalidraw .Modal.animations-disabled .Modal__background { + animation: none; +} +.excalidraw .Modal.animations-disabled .Modal__content { + animation: none; + opacity: 1; +} +.excalidraw .Modal__background { + position: fixed; + inset: 0; + z-index: 1; + background-color: #12121233; + animation: Modal__background__fade-in 0.1s linear forwards; +} +.excalidraw .Modal__content { + z-index: 2; + width: 100%; + max-width: var(--max-width); + max-height: 100%; + opacity: 0; + transform: translateY(10px); + animation: Modal__content_fade-in 25ms ease-out 0s forwards; + position: relative; + overflow-y: auto; + background: var(--island-bg-color); + border: 1px solid var(--dialog-border-color); + box-shadow: var(--modal-shadow); + border-radius: 0.75rem; + box-sizing: border-box; +} +.excalidraw .Modal__content:focus { + outline: none; +} +@keyframes Modal__background__fade-in { + 0% { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes Modal__content_fade-in { + 0% { + opacity: 0; + transform: scale(0.9); + } + to { + opacity: 1; + transform: scale(1); + } +} +.excalidraw .Modal__close { + color: var(--icon-fill-color); + margin: 0; + padding: 0.375rem; + position: absolute; + top: 1rem; + right: 1rem; + border: 0; + background-color: transparent; + line-height: 0; + cursor: pointer; +} +.excalidraw .Modal__close svg { + width: 1.5rem; + height: 1.5rem; +} +.excalidraw .Dialog--fullscreen .Modal { + padding: 0; +} +.excalidraw .Dialog--fullscreen .Modal__content { + position: absolute; + inset: 0; + max-width: 100%; + border: 0; + border-radius: 0; +} +.excalidraw .Stack { + --gap: 0; + display: grid; + gap: calc(var(--space-factor) * var(--gap)); +} +.excalidraw .Stack_vertical { + grid-template-columns: auto; + grid-auto-flow: row; + grid-auto-rows: min-content; +} +.excalidraw .Stack_horizontal { + grid-template-rows: auto; + grid-auto-flow: column; + grid-auto-columns: min-content; +} +.excalidraw .confirm-dialog-buttons { + display: flex; + column-gap: 0.5rem; + justify-content: flex-end; +} +.excalidraw .Dialog__action-button { + position: relative; + display: flex; + column-gap: 0.5rem; + align-items: center; + padding: 0.5rem 1.5rem; + border: 1px solid var(--default-border-color); + background-color: transparent; + height: 3rem; + border-radius: var(--border-radius-lg); + letter-spacing: 0.4px; + color: inherit; + font-family: inherit; + font-size: 0.875rem; + font-weight: 600; + user-select: none; +} +.excalidraw .Dialog__action-button svg { + display: block; + width: 1rem; + height: 1rem; +} +.excalidraw .Dialog__action-button--danger { + background-color: var(--color-danger); + border-color: var(--color-danger); + color: #fff; +} +.excalidraw .Dialog__action-button--primary { + background-color: var(--color-primary); + border-color: var(--color-primary); + color: #fff; +} +.excalidraw.theme--dark .Dialog__action-button--danger, +.excalidraw.theme--dark .Dialog__action-button--primary { + color: var(--color-gray-100); +} +.excalidraw .publish-library__fields { + display: flex; + flex-direction: column; +} +.excalidraw .publish-library__fields label { + padding: 1em 0; + display: flex; + justify-content: space-between; + align-items: center; +} +.excalidraw .publish-library__fields label span { + font-weight: 500; + font-size: 1rem; + color: #868e96; +} +.excalidraw .publish-library__fields label input, +.excalidraw .publish-library__fields label textarea { + width: 70%; + padding: 0.6em; + font-family: var(--ui-font); +} +.excalidraw .publish-library__fields label .required { + color: #e03131; + margin: 0.2rem; +} +.excalidraw .publish-library__buttons { + display: flex; + padding: 0.2rem 0; + justify-content: flex-end; + gap: 0.5rem; +} +.excalidraw .publish-library__buttons .ToolIcon__icon { + min-width: 2.5rem; + width: auto; + font-size: 1rem; +} +.excalidraw .publish-library__buttons .ToolIcon_type_button { + margin-left: 1rem; + padding: 0 0.5rem; +} +.excalidraw .publish-library__buttons--confirm.ToolIcon_type_button { + background-color: #228be6; +} +.excalidraw .publish-library__buttons--confirm.ToolIcon_type_button:hover { + background-color: #1971c2; +} +.excalidraw .publish-library__buttons--cancel.ToolIcon_type_button { + background-color: #adb5bd; +} +.excalidraw .publish-library__buttons--cancel.ToolIcon_type_button:hover { + background-color: #868e96; +} +.excalidraw .publish-library__buttons .ToolIcon__icon { + color: #fff; +} +.excalidraw .publish-library__buttons .ToolIcon__icon .Spinner { + --spinner-color: #fff; +} +.excalidraw .publish-library__buttons .ToolIcon__icon .Spinner svg { + padding: 0.5rem; +} +.excalidraw .publish-library .selected-library-items { + display: flex; + flex-wrap: wrap; +} +.excalidraw .publish-library .selected-library-items .single-library-item-wrapper { + width: 9rem; +} +.excalidraw .publish-library-warning { + color: #fa5252; +} +.excalidraw .publish-library-note { + padding: 1em 0; + font-style: italic; + font-size: 14px; + display: block; +} +.excalidraw .single-library-item { + position: relative; +} +.excalidraw .single-library-item-status { + position: absolute; + top: 0.3rem; + left: 0.3rem; + font-size: 0.7rem; + color: #f03e3e; + background: #ffffffe6; + padding: 0.1rem 0.2rem; + border-radius: 0.2rem; +} +.excalidraw .single-library-item__svg { + background-color: #fff; + padding: 0.3rem; + width: 7.5rem; + height: 7.5rem; + border: 1px solid var(--button-gray-2); +} +.excalidraw .single-library-item__svg svg { + width: 100%; + height: 100%; +} +.excalidraw .single-library-item .ToolIcon__icon { + background-color: #fff; + width: auto; + height: auto; + margin: 0 0.5rem; +} +.excalidraw .single-library-item .ToolIcon, +.excalidraw .single-library-item .ToolIcon_type_button:hover { + background-color: #fff; +} +.excalidraw .single-library-item .required, +.excalidraw .single-library-item .error { + color: #e03131; + font-weight: 700; + font-size: 1rem; + margin: 0.2rem; +} +.excalidraw .single-library-item .error { + font-weight: 500; + margin: 0; + padding: 0.3em 0; +} +.excalidraw .single-library-item--remove { + position: absolute; + top: 0.2rem; + right: 1rem; +} +.excalidraw .single-library-item--remove .ToolIcon__icon { + margin: 0; +} +.excalidraw .single-library-item--remove .ToolIcon__icon { + background-color: #fa5252; +} +.excalidraw .single-library-item--remove .ToolIcon__icon:hover { + background-color: #f03e3e; +} +.excalidraw .single-library-item--remove .ToolIcon__icon:active { + background-color: #e03131; +} +.excalidraw .single-library-item--remove svg { + color: #fff; + padding: 0.26rem; + border-radius: 0.3em; + width: 1rem; + height: 1rem; +} +.excalidraw .dropdown-menu { + position: absolute; + top: 100%; + margin-top: 0.5rem; +} +.excalidraw .dropdown-menu--mobile { + left: 0; + width: 100%; + row-gap: 0.75rem; +} +.excalidraw .dropdown-menu--mobile .dropdown-menu-container { + padding: 8px; + box-sizing: border-box; + box-shadow: var(--shadow-island); + border-radius: var(--border-radius-lg); + position: relative; + transition: box-shadow 0.5s ease-in-out; +} +.excalidraw .dropdown-menu--mobile .dropdown-menu-container.zen-mode { + box-shadow: none; +} +.excalidraw .dropdown-menu .dropdown-menu-container { + background-color: var(--island-bg-color); + max-height: calc(100vh - 150px); + overflow-y: auto; + --gap: 2; +} +.excalidraw .dropdown-menu .dropdown-menu-item-base { + display: flex; + column-gap: 0.625rem; + font-size: 0.875rem; + color: var(--color-on-surface); + width: 100%; + box-sizing: border-box; + font-weight: 400; + font-family: inherit; +} +.excalidraw .dropdown-menu.manual-hover .dropdown-menu-item:hover { + background-color: transparent; +} +.excalidraw .dropdown-menu.manual-hover .dropdown-menu-item--hovered { + background-color: var(--button-hover-bg) !important; +} +.excalidraw .dropdown-menu.manual-hover .dropdown-menu-item--selected { + background-color: var(--color-primary-light) !important; +} +.excalidraw .dropdown-menu.fonts { + margin-top: 1rem; + max-height: calc(7 * (2rem + 2px) + 3.95rem); +} +@media screen and (min-width: 1921px) { + .excalidraw .dropdown-menu.fonts { + max-height: calc(7 * (2.25rem + 2px) + 3.95rem); + } +} +.excalidraw .dropdown-menu.fonts .dropdown-menu-item-base { + display: inline-flex; +} +.excalidraw .dropdown-menu.fonts .dropdown-menu-group:not(:first-child) { + margin-top: 1rem; +} +.excalidraw .dropdown-menu.fonts .dropdown-menu-group-title { + font-size: 0.75rem; + text-align: left; + font-weight: 400; + margin: 0 0 0.5rem; + line-height: 1.3; +} +.excalidraw .dropdown-menu .dropdown-menu-item { + height: 2rem; + margin: 1px; + padding: 0 0.5rem; + width: calc(100% - 2px); + background-color: transparent; + border: 1px solid transparent; + align-items: center; + cursor: pointer; + border-radius: var(--border-radius-md); +} +@media screen and (min-width: 1921px) { + .excalidraw .dropdown-menu .dropdown-menu-item { + height: 2.25rem; + } +} +.excalidraw .dropdown-menu .dropdown-menu-item__text { + display: flex; + align-items: center; + width: 100%; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + gap: 0.75rem; +} +.excalidraw .dropdown-menu .dropdown-menu-item__shortcut { + margin-inline-start: auto; + opacity: 0.5; +} +.excalidraw .dropdown-menu .dropdown-menu-item__shortcut--orphaned { + text-align: right; + font-size: 0.875rem; + padding: 0 0.625rem; +} +.excalidraw .dropdown-menu .dropdown-menu-item--selected { + background: var(--color-primary-light); + --icon-fill-color: var(--color-primary-darker); +} +.excalidraw .dropdown-menu .dropdown-menu-item:hover { + background-color: var(--button-hover-bg); + text-decoration: none; +} +.excalidraw .dropdown-menu .dropdown-menu-item:active { + background-color: var(--button-hover-bg); + border-color: var(--color-brand-active); +} +.excalidraw .dropdown-menu .dropdown-menu-item svg { + width: 1rem; + height: 1rem; + display: block; +} +.excalidraw .dropdown-menu .dropdown-menu-item-bare { + align-items: center; + height: 2rem; + justify-content: space-between; +} +@media screen and (min-width: 1921px) { + .excalidraw .dropdown-menu .dropdown-menu-item-bare { + height: 2.25rem; + } +} +.excalidraw .dropdown-menu .dropdown-menu-item-bare svg { + width: 1rem; + height: 1rem; + display: block; +} +.excalidraw .dropdown-menu .dropdown-menu-item-custom { + margin-top: 0.5rem; +} +.excalidraw .dropdown-menu .dropdown-menu-group-title { + font-size: 14px; + text-align: left; + margin: 10px 0; + font-weight: 500; +} +.excalidraw .dropdown-menu-button { + display: flex; + justify-content: center; + align-items: center; + padding: 0.625rem; + width: var(--button-width, var(--default-button-size)); + height: var(--button-height, var(--default-button-size)); + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: var(--button-border, var(--default-border-color)); + border-radius: var(--border-radius-lg); + cursor: pointer; + background-color: var(--button-bg, var(--island-bg-color)); + color: var(--button-color, var(--color-on-surface)); + font-family: var(--ui-font); + width: var(--lg-button-size); + height: var(--lg-button-size); + --background: var(--color-surface-mid); + background-color: var(--background); +} +.excalidraw .dropdown-menu-button svg { + width: var(--button-width, var(--lg-icon-size)); + height: var(--button-height, var(--lg-icon-size)); +} +.excalidraw .dropdown-menu-button:hover { + background-color: var(--button-hover-bg, var(--island-bg-color)); + border-color: var(--button-hover-border, var(--button-border, var(--default-border-color))); + color: var(--button-hover-color, var(--button-color, var(--text-primary-color, inherit))); +} +.excalidraw .dropdown-menu-button:active { + background-color: var(--button-active-bg, var(--island-bg-color)); + border-color: var(--button-active-border, var(--color-primary-darkest)); +} +.excalidraw .dropdown-menu-button.active { + background-color: var(--button-selected-bg, var(--color-surface-primary-container)); + border-color: var(--button-selected-border, var(--color-surface-primary-container)); +} +.excalidraw .dropdown-menu-button.active:hover { + background-color: var(--button-selected-hover-bg, var(--color-surface-primary-container)); +} +.excalidraw .dropdown-menu-button.active svg { + color: var(--button-color, var(--color-on-primary-container)); +} +.excalidraw.theme--dark.excalidraw .dropdown-menu-button { + --background: var(--color-surface-high); +} +.excalidraw.theme--dark.excalidraw .dropdown-menu-button:hover { + --background: #363541; +} +.excalidraw .dropdown-menu-button:hover { + --background: var(--color-surface-high); + background-color: var(--background); + text-decoration: none; +} +.excalidraw .dropdown-menu-button:active { + border-color: var(--color-primary); +} +.excalidraw .dropdown-menu-button svg { + width: var(--lg-icon-size); + height: var(--lg-icon-size); +} +.excalidraw .dropdown-menu-button--mobile { + border: none; + margin: 0; + padding: 0; + width: var(--default-button-size); + height: var(--default-button-size); +} +.excalidraw .library-unit { + align-items: center; + border: 1px solid transparent; + display: flex; + justify-content: center; + position: relative; + width: 55px; + height: 55px; + box-sizing: border-box; + border-radius: var(--border-radius-lg); +} +.excalidraw .library-unit svg { + pointer-events: none; +} +.excalidraw .library-unit--hover { + border-color: var(--color-primary); +} +.excalidraw .library-unit--selected { + border-color: var(--color-primary); + border-width: 1px; +} +.excalidraw .library-unit--skeleton { + opacity: 0.5; + background: linear-gradient(-45deg, var(--color-gray-10), var(--color-gray-20), var(--color-gray-10)); + background-size: 200% 200%; + animation: library-unit__skeleton-opacity-animation 0.2s linear; +} +.excalidraw.theme--dark .library-unit--skeleton { + background-image: linear-gradient(-45deg, var(--color-gray-100), var(--color-gray-80), var(--color-gray-100)); +} +.excalidraw .library-unit__dragger { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + width: 100%; +} +.excalidraw .library-unit__dragger > svg { + filter: var(--theme-filter); + flex-grow: 1; + max-height: 100%; + max-width: 100%; +} +.excalidraw .library-unit__checkbox-container, +.excalidraw .library-unit__checkbox-container:hover, +.excalidraw .library-unit__checkbox-container:active { + align-items: center; + background: none; + border: none; + color: var(--icon-fill-color); + display: flex; + justify-content: center; + margin: 0; + padding: 0.5rem; + position: absolute; + left: 2rem; + bottom: 2rem; + cursor: pointer; +} +.excalidraw .library-unit__checkbox-container input, +.excalidraw .library-unit__checkbox-container:hover input, +.excalidraw .library-unit__checkbox-container:active input { + cursor: pointer; +} +.excalidraw .library-unit__checkbox { + position: absolute; + top: 0.125rem; + right: 0.125rem; + margin: 0; +} +.excalidraw .library-unit__checkbox .Checkbox-box { + margin: 0; + width: 1rem; + height: 1rem; + border-radius: 4px; + background-color: var(--color-primary-light); + border: 1px solid var(--color-primary); + box-shadow: none !important; + padding: 2px; +} +.excalidraw .library-unit__checkbox.Checkbox:hover .Checkbox-box { + background-color: var(--color-primary-light); +} +.excalidraw .library-unit__checkbox.is-checked .Checkbox-box { + background-color: var(--color-primary) !important; +} +.excalidraw .library-unit__checkbox.is-checked .Checkbox-box svg { + color: var(--color-primary-light); +} +.excalidraw .library-unit__removeFromLibrary > svg { + height: 16px; + width: 16px; +} +.excalidraw .library-unit__adder { + transform: scale(1); + animation: library-unit__adder-animation 1s ease-in infinite; + position: absolute; + width: 1.5rem; + height: 1.5rem; + background-color: var(--color-primary); + border-radius: var(--border-radius-md); + display: flex; + justify-content: center; + align-items: center; + pointer-events: none; +} +.excalidraw .library-unit__adder svg { + color: var(--color-primary-light); + width: 1rem; + height: 1rem; +} +.excalidraw .library-unit:active .library-unit__adder { + animation: none; + transform: scale(0.8); +} +.excalidraw .library-unit__active { + cursor: pointer; +} +@keyframes library-unit__adder-animation { + 0% { + transform: scale(0.85); + } + 50% { + transform: scale(1); + } + to { + transform: scale(0.85); + } +} +@keyframes library-unit__skeleton-opacity-animation { + 0% { + opacity: 0; + } + 75% { + opacity: 0; + } + to { + opacity: 0.5; + } +} +.excalidraw { + --container-padding-y: 1.5rem; + --container-padding-x: 0.75rem; +} +.excalidraw .library-menu-items__no-items { + text-align: center; + color: var(--color-gray-70); + line-height: 1.5; + font-size: 0.875rem; + width: 100%; +} +.excalidraw .library-menu-items__no-items__label { + color: var(--color-primary); + font-weight: 700; + font-size: 1.125rem; + margin-bottom: 0.75rem; +} +.excalidraw.theme--dark .library-menu-items__no-items { + color: var(--color-gray-40); +} +.excalidraw .library-menu-items-container { + width: 100%; + display: flex; + flex-grow: 1; + flex-shrink: 1; + flex-basis: 0; + overflow-y: auto; + flex-direction: column; + height: 100%; + justify-content: center; + margin: 0; + position: relative; +} +.excalidraw .library-menu-items-container > div { + padding-left: 0.75rem; + padding-right: 0.75rem; +} +.excalidraw .library-menu-items-container__row { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1rem; +} +.excalidraw .library-menu-items-container__items { + row-gap: 0.5rem; + padding: var(--container-padding-y) 0; + flex: 1; + overflow-y: auto; + overflow-x: hidden; + margin-bottom: 1rem; +} +.excalidraw .library-menu-items-container__header { + color: var(--color-primary); + font-size: 1.125rem; + font-weight: 700; + margin-bottom: 0.75rem; + width: 100%; + padding-right: 4rem; + box-sizing: border-box; +} +.excalidraw .library-menu-items-container__header--excal { + margin-top: 2rem; +} +.excalidraw .library-menu-items-container__grid { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-gap: 1rem; +} +.excalidraw .library-menu-items-container .separator { + width: 100%; + display: flex; + align-items: center; + font-weight: 500; + font-size: 0.9rem; + margin: 0.6em 0.2em; + color: var(--text-primary-color); +} +.excalidraw .library-menu-items-private-library-container { + min-height: 3.75rem; + width: 100%; +} +.excalidraw .layer-ui__library { + display: flex; + flex-direction: column; + flex: 1 1 auto; +} +.excalidraw .library-actions-counter { + background-color: var(--color-primary); + color: var(--color-primary-light); + font-weight: 700; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + width: 1rem; + height: 1rem; + position: absolute; + bottom: -0.25rem; + right: -0.25rem; + font-size: 0.625rem; + pointer-events: none; +} +.excalidraw .layer-ui__library-message { + padding: 2rem; + min-width: 200px; + display: flex; + flex-direction: column; + align-items: center; + flex-grow: 1; + justify-content: center; +} +.excalidraw .layer-ui__library-message span { + font-size: 0.8em; +} +.excalidraw .publish-library-success .Dialog__content { + display: flex; + flex-direction: column; +} +.excalidraw .publish-library-success-close.ToolIcon_type_button { + background-color: #228be6; + align-self: flex-end; +} +.excalidraw .publish-library-success-close.ToolIcon_type_button:hover { + background-color: #1971c2; +} +.excalidraw .publish-library-success-close.ToolIcon_type_button .ToolIcon__icon { + width: auto; + font-size: 1rem; + color: #fff; + padding: 0 0.5rem; +} +.excalidraw .library-menu-control-buttons { + display: flex; + align-items: center; + justify-content: center; + gap: 0.625rem; + position: relative; +} +.excalidraw .library-menu-control-buttons--at-bottom:before { + content: ''; + width: calc(100% - 1.5rem); + height: 1px; + position: absolute; + top: -1px; + background: var(--sidebar-border-color); +} +.excalidraw .library-menu-browse-button { + flex: 1; + height: var(--lg-button-size); + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + position: relative; + border-radius: var(--border-radius-lg); + background-color: var(--color-primary); + color: #fff; + text-align: center; + white-space: nowrap; + text-decoration: none !important; + font-weight: 600; + font-size: 0.75rem; +} +.excalidraw .library-menu-browse-button:hover { + background-color: var(--color-brand-hover); +} +.excalidraw .library-menu-browse-button:active { + background-color: var(--color-brand-active); +} +.excalidraw.theme--dark .library-menu-browse-button { + color: var(--color-gray-100); +} +.excalidraw.excalidraw--mobile .library-menu-browse-button { + height: var(--default-button-size); +} +.excalidraw .layer-ui__library .dropdown-menu { + width: auto; + top: initial; + right: 0; + left: initial; + bottom: 100%; + margin-bottom: 0.625rem; +} +.excalidraw .layer-ui__library .dropdown-menu .dropdown-menu-container { + width: 196px; + box-shadow: var(--library-dropdown-shadow); + border-radius: var(--border-radius-lg); + padding: 0.25rem 0.5rem; +} +.excalidraw .layer-ui__library .library-menu-dropdown-container { + position: relative; +} +.excalidraw .layer-ui__library .library-menu-dropdown-container--in-heading { + padding: 0; + position: absolute; + top: 1rem; + right: 0.75rem; + z-index: 1; +} +.excalidraw .layer-ui__library .library-menu-dropdown-container--in-heading .dropdown-menu { + top: 100%; +} +.excalidraw { + --ExcTextField--color: var(--color-on-surface); + --ExcTextField--label-color: var(--color-on-surface); + --ExcTextField--background: var(--color-surface-low); + --ExcTextField--readonly--background: var(--color-surface-high); + --ExcTextField--readonly--color: var(--color-on-surface); + --ExcTextField--border: var(--color-gray-20); + --ExcTextField--readonly--border: var(--color-border-outline-variant); + --ExcTextField--border-hover: var(--color-brand-hover); + --ExcTextField--border-active: var(--color-brand-active); + --ExcTextField--placeholder: var(--color-border-outline-variant); +} +.excalidraw .ExcTextField { + position: relative; +} +.excalidraw .ExcTextField svg { + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 0.75rem; + width: 1.25rem; + height: 1.25rem; + color: var(--color-gray-40); + z-index: 1; +} +.excalidraw .ExcTextField--fullWidth { + width: 100%; + flex-grow: 1; +} +.excalidraw .ExcTextField__label { + font-family: Assistant; + font-style: normal; + font-weight: 600; + font-size: 0.875rem; + line-height: 150%; + color: var(--ExcTextField--label-color); + margin-bottom: 0.25rem; + user-select: none; +} +.excalidraw .ExcTextField__input { + box-sizing: border-box; + display: flex; + flex-direction: row; + align-items: center; + height: 3rem; + background: var(--ExcTextField--background); + border: 1px solid var(--ExcTextField--border); + border-radius: 0.5rem; + padding: 0 0.75rem; +} +.excalidraw .ExcTextField__input:not(.excalidraw .ExcTextField__input--readonly):hover { + border-color: var(--ExcTextField--border-hover); +} +.excalidraw .ExcTextField__input:not(.excalidraw .ExcTextField__input--readonly):active, +.excalidraw .ExcTextField__input:not(.excalidraw .ExcTextField__input--readonly):focus-within { + border-color: var(--ExcTextField--border-active); +} +.excalidraw .ExcTextField__input input { + display: flex; + align-items: center; + border: none; + outline: none; + padding: 0; + margin: 0; + height: 1.5rem; + color: var(--ExcTextField--color); + font-family: Assistant; + font-style: normal; + font-weight: 400; + font-size: 1rem; + line-height: 150%; + text-overflow: ellipsis; + background: transparent; + width: 100%; +} +.excalidraw .ExcTextField__input input:not(:focus):hover { + background-color: initial; +} +.excalidraw .ExcTextField__input input:focus { + outline: initial; + box-shadow: initial; +} +.excalidraw .ExcTextField__input--readonly { + background: var(--ExcTextField--readonly--background); + border-color: var(--ExcTextField--readonly--border); +} +.excalidraw .ExcTextField__input--readonly input { + color: var(--ExcTextField--readonly--color); +} +.excalidraw .ExcTextField--hasIcon .ExcTextField__input { + padding-left: 2.5rem; +} +.excalidraw .excalidraw-button { + display: flex; + justify-content: center; + align-items: center; + padding: 0.625rem; + width: var(--button-width, var(--default-button-size)); + height: var(--button-height, var(--default-button-size)); + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: var(--button-border, var(--default-border-color)); + border-radius: var(--border-radius-lg); + cursor: pointer; + background-color: var(--button-bg, var(--island-bg-color)); + color: var(--button-color, var(--color-on-surface)); + font-family: var(--ui-font); +} +.excalidraw .excalidraw-button svg { + width: var(--button-width, var(--lg-icon-size)); + height: var(--button-height, var(--lg-icon-size)); +} +.excalidraw .excalidraw-button:hover { + background-color: var(--button-hover-bg, var(--island-bg-color)); + border-color: var(--button-hover-border, var(--button-border, var(--default-border-color))); + color: var(--button-hover-color, var(--button-color, var(--text-primary-color, inherit))); +} +.excalidraw .excalidraw-button:active { + background-color: var(--button-active-bg, var(--island-bg-color)); + border-color: var(--button-active-border, var(--color-primary-darkest)); +} +.excalidraw .excalidraw-button.active { + background-color: var(--button-selected-bg, var(--color-surface-primary-container)); + border-color: var(--button-selected-border, var(--color-surface-primary-container)); +} +.excalidraw .excalidraw-button.active:hover { + background-color: var(--button-selected-hover-bg, var(--color-surface-primary-container)); +} +.excalidraw .excalidraw-button.active svg { + color: var(--button-color, var(--color-on-primary-container)); +} +.zoom-actions, +.undo-redo-buttons { + background-color: var(--island-bg-color); + border-radius: var(--border-radius-lg); + box-shadow: 0 0 0 1px var(--color-surface-lowest); +} +.zoom-button, +.undo-redo-buttons button { + border-radius: 0 !important; + background-color: var(--color-surface-low) !important; + font-size: 0.875rem !important; + width: var(--lg-button-size); + height: var(--lg-button-size); +} +.zoom-button svg, +.undo-redo-buttons button svg { + width: var(--lg-icon-size) !important; + height: var(--lg-icon-size) !important; +} +.zoom-button .ToolIcon__icon, +.undo-redo-buttons button .ToolIcon__icon { + width: 100%; + height: 100%; +} +.reset-zoom-button { + border-left: 0 !important; + border-right: 0 !important; + padding: 0 0.625rem !important; + width: 3.75rem !important; + justify-content: center; + color: var(--text-primary-color); +} +.zoom-out-button { + border-top-left-radius: var(--border-radius-lg) !important; + border-bottom-left-radius: var(--border-radius-lg) !important; +} +:root[dir='rtl'] .zoom-out-button { + transform: scaleX(-1); +} +.zoom-out-button .ToolIcon__icon { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} +.zoom-in-button { + border-top-right-radius: var(--border-radius-lg) !important; + border-bottom-right-radius: var(--border-radius-lg) !important; +} +:root[dir='rtl'] .zoom-in-button { + transform: scaleX(-1); +} +.zoom-in-button .ToolIcon__icon { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; +} +.undo-redo-buttons .undo-button-container button { + border-top-left-radius: var(--border-radius-lg) !important; + border-bottom-left-radius: var(--border-radius-lg) !important; + border-right: 0 !important; +} +:root[dir='rtl'] .undo-redo-buttons .undo-button-container button { + transform: scaleX(-1); +} +.undo-redo-buttons .undo-button-container button .ToolIcon__icon { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} +.undo-redo-buttons .redo-button-container button { + border-top-right-radius: var(--border-radius-lg) !important; + border-bottom-right-radius: var(--border-radius-lg) !important; +} +:root[dir='rtl'] .undo-redo-buttons .redo-button-container button { + transform: scaleX(-1); +} +.undo-redo-buttons .redo-button-container button .ToolIcon__icon { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; +} +.excalidraw .command-palette-dialog { + user-select: none; +} +.excalidraw .command-palette-dialog .Modal__content { + height: auto; + max-height: 100%; +} +@media screen and (min-width: 861px) { + .excalidraw .command-palette-dialog .Modal__content { + max-height: 750px; + height: 100%; + } +} +.excalidraw .command-palette-dialog .Modal__content .Island { + height: 100%; + padding: 1.5rem; +} +.excalidraw .command-palette-dialog .Modal__content .Dialog__content { + height: 100%; + display: flex; + flex-direction: column; +} +.excalidraw .command-palette-dialog .shortcuts-wrapper { + display: flex; + justify-content: center; + align-items: center; + margin-top: 12px; + gap: 1.5rem; +} +.excalidraw .command-palette-dialog .shortcut { + display: flex; + justify-content: center; + align-items: center; + height: 16px; + font-size: 10px; + gap: 0.25rem; +} +.excalidraw .command-palette-dialog .shortcut .shortcut-wrapper { + display: flex; +} +.excalidraw .command-palette-dialog .shortcut .shortcut-plus { + margin: 0 4px; +} +.excalidraw .command-palette-dialog .shortcut .shortcut-key { + padding: 0 4px; + height: 16px; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + background-color: var(--color-primary-light); +} +.excalidraw .command-palette-dialog .shortcut .shortcut-desc { + margin-left: 4px; + color: var(--color-gray-50); +} +.excalidraw .command-palette-dialog .commands { + overflow-y: auto; + box-sizing: border-box; + margin-top: 12px; + color: var(--popup-text-color); + user-select: none; +} +.excalidraw .command-palette-dialog .commands .command-category { + display: flex; + flex-direction: column; + padding: 12px 0; + margin-right: 0.25rem; +} +.excalidraw .command-palette-dialog .commands .command-category-title { + font-size: 1rem; + font-weight: 600; + margin-bottom: 6px; + display: flex; + align-items: center; +} +.excalidraw .command-palette-dialog .commands .command-item { + color: var(--popup-text-color); + height: 2.5rem; + display: flex; + justify-content: space-between; + align-items: center; + box-sizing: border-box; + padding: 0 0.5rem; + border-radius: var(--border-radius-lg); + cursor: pointer; +} +.excalidraw .command-palette-dialog .commands .command-item:active { + background-color: var(--color-surface-low); +} +.excalidraw .command-palette-dialog .commands .command-item .name { + display: flex; + align-items: center; + gap: 0.25rem; +} +.excalidraw .command-palette-dialog .commands .item-selected { + background-color: var(--color-surface-mid); +} +.excalidraw .command-palette-dialog .commands .item-disabled { + opacity: 0.3; + cursor: not-allowed; +} +.excalidraw .command-palette-dialog .commands .no-match { + display: flex; + justify-content: center; + align-items: center; + margin-top: 36px; +} +.excalidraw .command-palette-dialog .icon { + width: 16px; + height: 16px; + margin-right: 6px; +} +.excalidraw .popover { + position: absolute; + z-index: 10; + padding: 5px 0; + outline: none; +} +.excalidraw .context-menu { + position: relative; + border-radius: 4px; + box-shadow: 0 3px 10px #0003; + padding: 0; + list-style: none; + user-select: none; + margin: -0.25rem 0 0 0.125rem; + padding: 0.5rem 0; + background-color: var(--popup-secondary-bg-color); + border: 1px solid var(--button-gray-3); + cursor: default; +} +.excalidraw .context-menu button { + color: var(--popup-text-color); +} +.excalidraw .context-menu-item { + position: relative; + width: 100%; + min-width: 9.5rem; + margin: 0; + padding: 0.25rem 1rem 0.25rem 1.25rem; + text-align: start; + border-radius: 0; + background-color: transparent; + border: none; + white-space: nowrap; + font-family: inherit; + display: grid; + grid-template-columns: 1fr 0.2fr; + align-items: center; +} +.excalidraw .context-menu-item.checkmark:before { + position: absolute; + left: 6px; + margin-bottom: 1px; + content: '\2713'; +} +.excalidraw .context-menu-item.dangerous .context-menu-item__label { + color: #f03e3e; +} +.excalidraw .context-menu-item .context-menu-item__label { + justify-self: start; + margin-inline-end: 20px; +} +.excalidraw .context-menu-item .context-menu-item__shortcut { + justify-self: end; + opacity: 0.6; + font-family: inherit; + font-size: 0.7rem; +} +.excalidraw .context-menu-item:hover { + color: var(--popup-bg-color); + background-color: var(--select-highlight-color); +} +.excalidraw .context-menu-item:hover.dangerous { + background-color: #fa5252; +} +.excalidraw .context-menu-item:hover.dangerous .context-menu-item__label { + color: var(--popup-bg-color); +} +.excalidraw .context-menu-item:focus { + z-index: 1; +} +.excalidraw--mobile.excalidraw .context-menu-item { + display: block; +} +.excalidraw--mobile.excalidraw .context-menu-item .context-menu-item__label { + margin-inline-end: 0; +} +.excalidraw--mobile.excalidraw .context-menu-item .context-menu-item__shortcut { + display: none; +} +.excalidraw .context-menu-item-separator { + border: none; + border-top: 1px solid #adb5bd; +} +.excalidraw { + --RadioGroup-background: var(--island-bg-color); + --RadioGroup-border: var(--color-surface-high); + --RadioGroup-choice-color-off: var(--color-primary); + --RadioGroup-choice-color-off-hover: var(--color-brand-hover); + --RadioGroup-choice-background-off: var(--island-bg-color); + --RadioGroup-choice-background-off-active: var(--color-surface-high); + --RadioGroup-choice-color-on: var(--color-surface-lowest); + --RadioGroup-choice-background-on: var(--color-primary); + --RadioGroup-choice-background-on-hover: var(--color-brand-hover); + --RadioGroup-choice-background-on-active: var(--color-brand-active); +} +.excalidraw .RadioGroup { + box-sizing: border-box; + display: flex; + flex-direction: row; + align-items: flex-start; + padding: 3px; + border-radius: 10px; + background: var(--RadioGroup-background); + border: 1px solid var(--RadioGroup-border); +} +.excalidraw .RadioGroup__choice { + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 24px; + color: var(--RadioGroup-choice-color-off); + background: var(--RadioGroup-choice-background-off); + border-radius: 8px; + font-family: Assistant; + font-style: normal; + font-weight: 600; + font-size: 0.75rem; + line-height: 100%; + user-select: none; + letter-spacing: 0.4px; + transition: all 75ms ease-out; +} +.excalidraw .RadioGroup__choice:hover { + color: var(--RadioGroup-choice-color-off-hover); +} +.excalidraw .RadioGroup__choice:active { + background: var(--RadioGroup-choice-background-off-active); +} +.excalidraw .RadioGroup__choice.active { + color: var(--RadioGroup-choice-color-on); + background: var(--RadioGroup-choice-background-on); +} +.excalidraw .RadioGroup__choice.active:hover { + background: var(--RadioGroup-choice-background-on-hover); +} +.excalidraw .RadioGroup__choice.active:active { + background: var(--RadioGroup-choice-background-on-active); +} +.excalidraw .RadioGroup__choice input { + z-index: 1; + position: absolute; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + border-radius: 8px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + cursor: pointer; +} +.excalidraw { + --Switch-disabled-color: var(--color-border-outline); + --Switch-disabled-toggled-background: var(--color-border-outline-variant); + --Switch-disabled-border: var(--color-border-outline-variant); + --Switch-track-background: var(--island-bg-color); + --Switch-thumb-background: var(--color-on-surface); + --Switch-hover-background: var(--color-brand-hover); + --Switch-active-background: var(--color-brand-active); +} +.excalidraw .Switch { + position: relative; + box-sizing: border-box; + width: 40px; + height: 20px; + border-radius: 12px; + transition-property: background, border; + transition-duration: 0.15s; + transition-timing-function: ease-out; + background: var(--Switch-track-background); + border: 1px solid var(--Switch-disabled-color); +} +.excalidraw .Switch:hover { + background: var(--Switch-track-background); + border: 1px solid var(--Switch-hover-background); +} +.excalidraw .Switch:active { + border: 1px solid var(--Switch-active-background); +} +.excalidraw .Switch.toggled { + background: var(--color-primary); + border: 1px solid var(--color-primary); +} +.excalidraw .Switch.toggled:hover { + background: var(--color-primary-darker); + border: 1px solid var(--color-primary-darker); +} +.excalidraw .Switch.disabled { + background: var(--Switch-track-background); + border: 1px solid var(--Switch-disabled-border); +} +.excalidraw .Switch.disabled.toggled { + background: var(--Switch-disabled-toggled-background); + border: 1px solid var(--Switch-disabled-toggled-background); +} +.excalidraw .Switch:before { + content: ''; + box-sizing: border-box; + display: block; + pointer-events: none; + position: absolute; + border-radius: 100%; + transition: all 0.15s ease-out; + width: 10px; + height: 10px; + top: 4px; + left: 4px; + background: var(--Switch-thumb-background); +} +.excalidraw .Switch:active:before { + width: 12px; +} +.excalidraw .Switch.toggled:before { + width: 14px; + height: 14px; + left: 22px; + top: 2px; + background: var(--Switch-track-background); +} +.excalidraw .Switch.toggled:active:before { + width: 16px; + left: 20px; +} +.excalidraw .Switch.disabled:before { + background: var(--Switch-disabled-color); +} +.excalidraw .Switch.disabled.toggled:before { + background: var(--Switch-disabled-color); +} +.excalidraw .Switch input { + width: 100%; + height: 100%; + margin: 0; + border-radius: 12px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + cursor: pointer; +} +.excalidraw .Switch input:disabled { + cursor: unset; +} +.excalidraw { + --ImageExportModal-preview-border: #d6d6d6; +} +.excalidraw.theme--dark { + --ImageExportModal-preview-border: #5c5c5c; +} +.excalidraw .ImageExportModal { + display: flex; + flex-direction: row; + justify-content: space-between; + user-select: none; +} +.excalidraw .ImageExportModal h3 { + font-family: Assistant; + font-style: normal; + font-weight: 700; + font-size: 1.313rem; + line-height: 130%; + padding: 0; + margin: 0; +} +.excalidraw--mobile.excalidraw .ImageExportModal h3 { + display: none; +} +.excalidraw .ImageExportModal > h3 { + display: none; +} +.excalidraw--mobile.excalidraw .ImageExportModal > h3 { + display: block; +} +.excalidraw--mobile.excalidraw .ImageExportModal { + flex-direction: column; + height: calc(100vh - 5rem); +} +.excalidraw .ImageExportModal__preview { + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: center; + height: 360px; + width: 55%; + margin-right: 1.5rem; +} +.excalidraw--mobile.excalidraw .ImageExportModal__preview { + max-width: unset; + margin-right: unset; + width: 100%; + height: unset; + flex-grow: 1; +} +.excalidraw .ImageExportModal__preview__filename > input { + margin-top: 1rem; +} +.excalidraw .ImageExportModal__preview__canvas { + box-sizing: border-box; + width: 100%; + height: 100%; + display: flex; + flex-grow: 1; + justify-content: center; + align-items: center; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==) + left center; + border: 1px solid var(--ImageExportModal-preview-border); + border-radius: 12px; + overflow: hidden; + padding: 1rem; +} +.excalidraw .ImageExportModal__preview__canvas > canvas { + max-width: calc(100% - 2rem); + max-height: calc(100% - 2rem); + filter: none !important; +} +.excalidraw--mobile.excalidraw .ImageExportModal__preview__canvas > canvas { + max-height: 100%; +} +.excalidraw--mobile.excalidraw .ImageExportModal__preview__canvas { + margin-top: 24px; + max-width: unset; +} +.excalidraw .ImageExportModal__settings { + display: flex; + flex-direction: column; + flex-wrap: wrap; + gap: 18px; +} +.excalidraw--mobile.excalidraw .ImageExportModal__settings { + margin-left: unset; + margin-top: 1rem; + flex-direction: row; + gap: 6px 34px; + align-content: flex-start; +} +.excalidraw .ImageExportModal__settings__setting { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} +.excalidraw--mobile.excalidraw .ImageExportModal__settings__setting { + flex-direction: column; + align-items: start; + justify-content: unset; + height: 52px; +} +.excalidraw .ImageExportModal__settings__setting__label { + display: flex; + flex-direction: row; + align-items: center; + font-family: Assistant; + font-weight: 600; + font-size: 1rem; + line-height: 150%; +} +.excalidraw .ImageExportModal__settings__setting__label svg { + width: 20px; + height: 20px; + margin-left: 10px; +} +.excalidraw .ImageExportModal__settings__setting__content { + display: flex; + height: 100%; + align-items: center; +} +.excalidraw .ImageExportModal__settings__buttons { + flex-grow: 1; + flex-wrap: wrap; + display: flex; + flex-direction: row; + gap: 11px; + align-items: flex-end; + align-content: flex-end; +} +.excalidraw--mobile.excalidraw .ImageExportModal__settings__buttons { + padding-top: 32px; + flex-basis: 100%; + justify-content: center; +} +@keyframes successStatusAnimation { + 0% { + transform: scale(0.35); + } + 50% { + transform: scale(1.25); + } + to { + transform: scale(1); + } +} +.excalidraw .ExcButton { + --text-color: transparent; + --border-color: transparent; + --back-color: transparent; + color: var(--text-color); + background-color: var(--back-color); + border-color: var(--border-color); + border-radius: 0.5rem; + border-width: 1px; + border-style: solid; + font-family: var(--font-family); + user-select: none; +} +.excalidraw .ExcButton:hover { + transition: all 0.15s ease-out; +} +.excalidraw .ExcButton .Spinner { + --spinner-color: var(--color-surface-lowest); +} +.excalidraw .ExcButton .ExcButton__statusIcon { + visibility: visible; + position: absolute; + width: 1.2rem; + height: 1.2rem; + animation: successStatusAnimation 0.5s cubic-bezier(0.3, 1, 0.6, 1); +} +.excalidraw .ExcButton.ExcButton--status-loading, +.excalidraw .ExcButton.ExcButton--status-success { + pointer-events: none; +} +.excalidraw .ExcButton.ExcButton--status-loading .ExcButton__contents, +.excalidraw .ExcButton.ExcButton--status-success .ExcButton__contents { + visibility: hidden; +} +.excalidraw .ExcButton[disabled] { + pointer-events: none; +} +.excalidraw .ExcButton, +.excalidraw .ExcButton__contents { + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; + flex-wrap: nowrap; + position: relative; +} +.excalidraw .ExcButton--color-primary.ExcButton--variant-filled { + --text-color: var(--color-surface-lowest); + --back-color: var(--color-primary); +} +.excalidraw .ExcButton--color-primary.ExcButton--variant-filled .Spinner { + --spinner-color: var(--text-color); +} +.excalidraw .ExcButton--color-primary.ExcButton--variant-filled:hover { + --back-color: var(--color-brand-hover); +} +.excalidraw .ExcButton--color-primary.ExcButton--variant-filled:active { + --back-color: var(--color-brand-active); +} +.excalidraw .ExcButton--color-primary.ExcButton--variant-outlined, +.excalidraw .ExcButton--color-primary.ExcButton--variant-icon { + --text-color: var(--color-primary); + --border-color: var(--color-primary); + --back-color: transparent; +} +.excalidraw .ExcButton--color-primary.ExcButton--variant-outlined .Spinner, +.excalidraw .ExcButton--color-primary.ExcButton--variant-icon .Spinner { + --spinner-color: var(--text-color); +} +.excalidraw .ExcButton--color-primary.ExcButton--variant-outlined:hover, +.excalidraw .ExcButton--color-primary.ExcButton--variant-icon:hover { + --text-color: var(--color-brand-hover); + --border-color: var(--color-brand-hover); +} +.excalidraw .ExcButton--color-primary.ExcButton--variant-outlined:active, +.excalidraw .ExcButton--color-primary.ExcButton--variant-icon:active { + --text-color: var(--color-brand-active); + --border-color: var(--color-brand-active); +} +.excalidraw .ExcButton--color-danger.ExcButton--variant-filled { + --text-color: var(--color-danger-text); + --back-color: var(--color-danger-dark); +} +.excalidraw .ExcButton--color-danger.ExcButton--variant-filled .Spinner { + --spinner-color: var(--text-color); +} +.excalidraw .ExcButton--color-danger.ExcButton--variant-filled:hover { + --back-color: var(--color-danger-darker); +} +.excalidraw .ExcButton--color-danger.ExcButton--variant-filled:active { + --back-color: var(--color-danger-darkest); +} +.excalidraw .ExcButton--color-danger.ExcButton--variant-outlined, +.excalidraw .ExcButton--color-danger.ExcButton--variant-icon { + --text-color: var(--color-danger); + --border-color: var(--color-danger); + --back-color: transparent; +} +.excalidraw .ExcButton--color-danger.ExcButton--variant-outlined .Spinner, +.excalidraw .ExcButton--color-danger.ExcButton--variant-icon .Spinner { + --spinner-color: var(--text-color); +} +.excalidraw .ExcButton--color-danger.ExcButton--variant-outlined:hover, +.excalidraw .ExcButton--color-danger.ExcButton--variant-icon:hover { + --text-color: var(--color-danger-darkest); + --border-color: var(--color-danger-darkest); +} +.excalidraw .ExcButton--color-danger.ExcButton--variant-outlined:active, +.excalidraw .ExcButton--color-danger.ExcButton--variant-icon:active { + --text-color: var(--color-danger-darker); + --border-color: var(--color-danger-darker); +} +.excalidraw .ExcButton--color-success.ExcButton--variant-filled { + --text-color: var(--color-success-text); + --back-color: var(--color-success); +} +.excalidraw .ExcButton--color-success.ExcButton--variant-filled .Spinner { + --spinner-color: var(--color-success); +} +.excalidraw .ExcButton--color-success.ExcButton--variant-filled:hover { + --back-color: var(--color-success-darker); +} +.excalidraw .ExcButton--color-success.ExcButton--variant-filled:active { + --back-color: var(--color-success-darkest); +} +.excalidraw .ExcButton--color-success.ExcButton--variant-outlined, +.excalidraw .ExcButton--color-success.ExcButton--variant-icon { + --text-color: var(--color-success-contrast); + --border-color: var(--color-success-contrast); + --back-color: transparent; +} +.excalidraw .ExcButton--color-success.ExcButton--variant-outlined .Spinner, +.excalidraw .ExcButton--color-success.ExcButton--variant-icon .Spinner { + --spinner-color: var(--color-success-contrast); +} +.excalidraw .ExcButton--color-success.ExcButton--variant-outlined:hover, +.excalidraw .ExcButton--color-success.ExcButton--variant-icon:hover { + --text-color: var(--color-success-contrast-hover); + --border-color: var(--color-success-contrast-hover); +} +.excalidraw .ExcButton--color-success.ExcButton--variant-outlined:active, +.excalidraw .ExcButton--color-success.ExcButton--variant-icon:active { + --text-color: var(--color-success-contrast-active); + --border-color: var(--color-success-contrast-active); +} +.excalidraw .ExcButton--color-muted.ExcButton--variant-filled { + --text-color: var(--island-bg-color); + --back-color: var(--color-gray-50); +} +.excalidraw .ExcButton--color-muted.ExcButton--variant-filled .Spinner { + --spinner-color: var(--text-color); +} +.excalidraw .ExcButton--color-muted.ExcButton--variant-filled:hover { + --back-color: var(--color-gray-60); +} +.excalidraw .ExcButton--color-muted.ExcButton--variant-filled:active { + --back-color: var(--color-gray-80); +} +.excalidraw .ExcButton--color-muted.ExcButton--variant-outlined, +.excalidraw .ExcButton--color-muted.ExcButton--variant-icon { + --text-color: var(--color-muted-background); + --border-color: var(--color-muted); + --back-color: var(--island-bg-color); +} +.excalidraw .ExcButton--color-muted.ExcButton--variant-outlined .Spinner, +.excalidraw .ExcButton--color-muted.ExcButton--variant-icon .Spinner { + --spinner-color: var(--text-color); +} +.excalidraw .ExcButton--color-muted.ExcButton--variant-outlined:hover, +.excalidraw .ExcButton--color-muted.ExcButton--variant-icon:hover { + --text-color: var(--color-muted-background-darker); + --border-color: var(--color-muted-darker); +} +.excalidraw .ExcButton--color-muted.ExcButton--variant-outlined:active, +.excalidraw .ExcButton--color-muted.ExcButton--variant-icon:active { + --text-color: var(--color-muted-background-darker); + --border-color: var(--color-muted-darkest); +} +.excalidraw .ExcButton--color-warning.ExcButton--variant-filled { + --text-color: black; + --back-color: var(--color-warning-dark); +} +.excalidraw .ExcButton--color-warning.ExcButton--variant-filled .Spinner { + --spinner-color: var(--text-color); +} +.excalidraw .ExcButton--color-warning.ExcButton--variant-filled:hover { + --back-color: var(--color-warning-darker); +} +.excalidraw .ExcButton--color-warning.ExcButton--variant-filled:active { + --back-color: var(--color-warning-darkest); +} +.excalidraw .ExcButton--color-warning.ExcButton--variant-outlined, +.excalidraw .ExcButton--color-warning.ExcButton--variant-icon { + --text-color: var(--color-warning-dark); + --border-color: var(--color-warning-dark); + --back-color: var(--input-bg-color); +} +.excalidraw .ExcButton--color-warning.ExcButton--variant-outlined .Spinner, +.excalidraw .ExcButton--color-warning.ExcButton--variant-icon .Spinner { + --spinner-color: var(--text-color); +} +.excalidraw .ExcButton--color-warning.ExcButton--variant-outlined:hover, +.excalidraw .ExcButton--color-warning.ExcButton--variant-icon:hover { + --text-color: var(--color-warning-darker); + --border-color: var(--color-warning-darker); +} +.excalidraw .ExcButton--color-warning.ExcButton--variant-outlined:active, +.excalidraw .ExcButton--color-warning.ExcButton--variant-icon:active { + --text-color: var(--color-warning-darkest); + --border-color: var(--color-warning-darkest); +} +.excalidraw .ExcButton--size-large { + font-weight: 600; + font-size: 0.875rem; + min-height: 3rem; + padding: 0.5rem 1.5rem; + letter-spacing: 0.4px; +} +.excalidraw .ExcButton--size-large .ExcButton__contents { + gap: 0.75rem; +} +.excalidraw .ExcButton--size-medium { + font-weight: 600; + font-size: 0.75rem; + min-height: 2.5rem; + padding: 0.5rem 1rem; + letter-spacing: normal; +} +.excalidraw .ExcButton--size-medium .ExcButton__contents { + gap: 0.5rem; +} +.excalidraw .ExcButton--variant-icon { + padding: 0.5rem 0.75rem; + width: 3rem; +} +.excalidraw .ExcButton--fullWidth { + width: 100%; +} +.excalidraw .ExcButton__icon { + width: 1.25rem; + height: 1.25rem; +} +.excalidraw .FixedSideContainer { + position: absolute; + pointer-events: none; +} +.excalidraw .FixedSideContainer > * { + pointer-events: var(--ui-pointerEvents); +} +.excalidraw .FixedSideContainer_side_top { + left: var(--editor-container-padding); + top: var(--editor-container-padding); + right: var(--editor-container-padding); + bottom: var(--editor-container-padding); +} +.excalidraw .FixedSideContainer_side_top.zen-mode { + right: 42px; +} +.excalidraw .HintViewer { + pointer-events: none; + box-sizing: border-box; + position: absolute; + display: flex; + flex-direction: column; + justify-content: center; + left: 0; + top: 100%; + max-width: 100%; + width: 100%; + margin-top: 0.5rem; + text-align: center; + color: var(--color-gray-40); + font-size: 0.75rem; +} +.excalidraw--mobile.excalidraw .HintViewer { + position: static; + padding-right: 2rem; +} +.excalidraw .HintViewer > span { + padding: 0.25rem; +} +.excalidraw.theme--dark .HintViewer { + color: var(--color-gray-60); +} +.excalidraw--mobile.excalidraw .PasteChartDialog .Island { + display: flex; + flex-direction: column; +} +.excalidraw .PasteChartDialog .container { + display: flex; + align-items: center; + justify-content: space-around; + flex-wrap: wrap; +} +.excalidraw--mobile.excalidraw .PasteChartDialog .container { + flex-direction: column; + justify-content: center; +} +.excalidraw .PasteChartDialog .ChartPreview { + margin: 8px; + text-align: center; + width: 192px; + height: 128px; + border-radius: 2px; + padding: 1px; + border: 1px solid #ced4da; + display: flex; + align-items: center; + justify-content: center; + background: transparent; +} +.excalidraw .PasteChartDialog .ChartPreview div { + display: inline-block; +} +.excalidraw .PasteChartDialog .ChartPreview svg { + max-height: 120px; + max-width: 186px; +} +.excalidraw .PasteChartDialog .ChartPreview:hover { + padding: 0; + border: 2px solid #339af0; +} +.excalidraw .HelpDialog .Modal__content { + max-width: 960px; +} +.excalidraw .HelpDialog h3 { + margin: 1.5rem 0; + font-weight: 700; + font-size: 1.125rem; +} +.excalidraw .HelpDialog__header { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; +} +.excalidraw .HelpDialog__btn { + --background: var(--color-surface-mid); + display: flex; + column-gap: 0.5rem; + align-items: center; + background-color: var(--background); + padding: 0.625rem 1rem; + border: 1px solid var(--background); + border-radius: var(--border-radius-lg); + color: var(--text-primary-color); + font-weight: 600; + font-size: 0.75rem; + letter-spacing: 0.4px; +} +.excalidraw.theme--dark.excalidraw .HelpDialog__btn { + --background: var(--color-surface-high); +} +.excalidraw.theme--dark.excalidraw .HelpDialog__btn:hover { + --background: #363541; +} +.excalidraw .HelpDialog__btn:hover { + --background: var(--color-surface-high); + text-decoration: none; +} +.excalidraw .HelpDialog__btn:active { + border-color: var(--color-primary); +} +.excalidraw .HelpDialog__link-icon { + line-height: 0; +} +.excalidraw .HelpDialog__link-icon svg { + width: 1rem; + height: 1rem; +} +.excalidraw .HelpDialog__islands-container { + display: grid; + grid-column-gap: 1.5rem; + grid-row-gap: 2rem; +} +@media screen and (min-width: 1024px) { + .excalidraw .HelpDialog__islands-container { + grid-template-columns: 1fr 1fr; + } +} +@media screen and (min-width: 1024px) { + .excalidraw .HelpDialog__island--tools { + grid-area: 1/1/2/2; + } + .excalidraw .HelpDialog__island--view { + grid-area: 2/1/3/2; + } + .excalidraw .HelpDialog__island--editor { + grid-area: 1/2/3/3; + } +} +.excalidraw .HelpDialog__island h4 { + font-size: 1rem; + font-weight: 700; + margin: 0; + margin-bottom: 0.625rem; +} +.excalidraw .HelpDialog__island-content { + border: 1px solid var(--dialog-border-color); + border-radius: var(--border-radius-lg); +} +.excalidraw .HelpDialog__shortcut { + border-bottom: 1px solid var(--dialog-border-color); + padding: 0.375rem 0.75rem; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 0.875rem; + column-gap: 0.5rem; +} +.excalidraw .HelpDialog__shortcut:last-child { + border-bottom: none; +} +.excalidraw .HelpDialog__key-container { + display: flex; + align-items: center; + column-gap: 0.25rem; + flex-shrink: 0; +} +.excalidraw .HelpDialog__key { + display: flex; + box-sizing: border-box; + font-size: 0.625rem; + background-color: var(--color-primary-light); + border-radius: var(--border-radius-md); + padding: 0.5rem; + word-break: keep-all; + align-items: center; + font-family: inherit; + line-height: 1; +} +.excalidraw { + --avatar-size: 1.75rem; + --avatarList-gap: 0.625rem; + --userList-padding: var(--space-factor); + --userlist-hint-bg-color: var(--color-gray-10); + --userlist-hint-heading-color: var(--color-gray-80); + --userlist-hint-text-color: var(--color-gray-60); + --userlist-collaborators-border-color: var(--color-gray-20); +} +.excalidraw .UserList__wrapper { + display: flex; + width: 100%; + justify-content: flex-end; + align-items: center; + pointer-events: none !important; +} +.excalidraw .UserList { + pointer-events: none; + padding: var(--userList-padding); + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + align-items: center; + gap: var(--avatarList-gap); + box-sizing: border-box; + --max-size: calc(var(--avatar-size) * var(--max-avatars, 2) + var(--avatarList-gap) * (var(--max-avatars, 2) - 1) + var(--userList-padding) * 2); + max-height: var(--max-size); + max-width: var(--max-size); +} +.excalidraw .UserList > * { + pointer-events: var(--ui-pointerEvents); +} +.excalidraw .UserList_mobile { + padding: 0; + justify-content: normal; + margin: 0.5rem 0; + max-width: none; + max-height: none; +} +.excalidraw .UserList__more { + width: var(--avatar-size, 1.5rem); + height: var(--avatar-size, 1.5rem); + position: relative; + border-radius: 100%; + outline-offset: 2px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + font-size: 0.75rem; + line-height: 1; + color: var(--color-gray-90); + flex: 0 0 auto; + background-color: var(--color-gray-20); + border: 0 !important; + font-size: 0.625rem; + font-weight: 400; + flex-shrink: 0; + color: var(--color-gray-100); + font-weight: 700; +} +.excalidraw .UserList__more:active { + transform: scale(0.94); +} +.excalidraw .UserList__more-img { + width: 100%; + height: 100%; + border-radius: 100%; +} +.excalidraw .UserList__more:before { + content: ''; + position: absolute; + inset: -3px; + border-radius: 100%; +} +.excalidraw .UserList__more.is-followed:before { + border-color: var(--color-primary-hover); + box-shadow: 0 0 0 1px var(--color-primary-hover); +} +.excalidraw .UserList__more.is-current-user { + cursor: auto; +} +.excalidraw .UserList__collaborator-name { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.excalidraw .UserList__collaborator--avatar-only { + position: relative; + display: flex; + flex: 0 0 auto; +} +.excalidraw .UserList__collaborator--avatar-only .UserList__collaborator-status-icon { + --size: 14px; + position: absolute; + display: flex; + flex: 0 0 auto; + bottom: -0.25rem; + right: -0.25rem; + width: var(--size); + height: var(--size); +} +.excalidraw .UserList__collaborator--avatar-only .UserList__collaborator-status-icon svg { + flex: 0 0 auto; + width: var(--size); + height: var(--size); +} +.excalidraw .UserList__collaborator-status-icons { + margin-left: auto; + flex: 0 0 auto; + min-width: 2.25rem; + gap: 0.25rem; + justify-content: flex-end; + display: flex; +} +.excalidraw .UserList__collaborator.is-muted .UserList__collaborator-status-icon-microphone-muted { + color: var(--color-danger); + filter: drop-shadow(0px 0px 0px rgba(0, 0, 0, 0.5)); +} +.excalidraw .UserList__collaborator-status-icon-speaking-indicator { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: space-between; + width: 1rem; + padding: 0 3px; + box-sizing: border-box; +} +.excalidraw .UserList__collaborator-status-icon-speaking-indicator div { + width: 0.125rem; + height: 0.4rem; + background-color: #a2f1a6; +} +.excalidraw .UserList__collaborator-status-icon-speaking-indicator div:nth-of-type(1) { + animation: speaking-indicator-anim 1s -0.45s ease-in-out infinite; +} +.excalidraw .UserList__collaborator-status-icon-speaking-indicator div:nth-of-type(2) { + animation: speaking-indicator-anim 1s -0.9s ease-in-out infinite; +} +.excalidraw .UserList__collaborator-status-icon-speaking-indicator div:nth-of-type(3) { + animation: speaking-indicator-anim 1s -0.15s ease-in-out infinite; +} +@keyframes speaking-indicator-anim { + 0%, + to { + transform: scaleY(1); + } + 50% { + transform: scaleY(2); + } +} +.excalidraw.theme--dark { + --userlist-hint-bg-color: var(--color-gray-90); + --userlist-hint-heading-color: var(--color-gray-30); + --userlist-hint-text-color: var(--color-gray-40); + --userlist-collaborators-border-color: var(--color-gray-80); +} +.excalidraw .UserList__collaborators { + top: auto; + max-height: 50vh; +} +.excalidraw .Card { + display: flex; + flex-direction: column; + align-items: center; + max-width: 290px; + margin: 1em; + text-align: center; +} +.excalidraw .Card .Card-icon { + font-size: 2.6em; + display: flex; + flex: 0 0 auto; + padding: 1.4rem; + border-radius: 50%; + background: var(--card-color); + color: #fff; +} +.excalidraw .Card .Card-icon svg { + width: 2.8rem; + height: 2.8rem; +} +.excalidraw .Card .Card-details { + font-size: 0.96em; + min-height: 90px; + padding: 0 1em; + margin-bottom: auto; +} +.excalidraw .Card .Card-button.ToolIcon_type_button { + height: 2.5rem; + margin-top: 1em; + margin-bottom: 0.3em; + background-color: var(--card-color); +} +.excalidraw .Card .Card-button.ToolIcon_type_button:hover { + background-color: var(--card-color-darker); +} +.excalidraw .Card .Card-button.ToolIcon_type_button:active { + background-color: var(--card-color-darkest); +} +.excalidraw .Card .Card-button.ToolIcon_type_button .ToolIcon__label { + color: #fff; +} +.excalidraw .Card .Card-button.ToolIcon_type_button .Spinner { + --spinner-color: #fff; +} +.excalidraw .ExportDialog__preview { + --preview-padding: calc(var(--space-factor) * 4); + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==) + left center; + text-align: center; + padding: var(--preview-padding); + margin-bottom: calc(var(--space-factor) * 3); + display: flex; + justify-content: center; + align-items: center; +} +.excalidraw .ExportDialog__preview canvas { + max-width: calc(100% - var(--preview-padding) * 2); + max-height: 25rem; +} +.excalidraw.theme--dark .ExportDialog__preview canvas { + filter: none; +} +.excalidraw .ExportDialog__actions { + width: 100%; + display: flex; + grid-gap: calc(var(--space-factor) * 2); + align-items: top; + justify-content: space-between; +} +.excalidraw--mobile.excalidraw .ExportDialog { + display: flex; + flex-direction: column; +} +.excalidraw--mobile.excalidraw .ExportDialog__actions { + flex-direction: column; + align-items: center; +} +.excalidraw--mobile.excalidraw .ExportDialog__actions > * { + margin-bottom: calc(var(--space-factor) * 3); +} +.excalidraw--mobile.excalidraw .ExportDialog__preview canvas { + max-height: 30vh; +} +.excalidraw--mobile.excalidraw .ExportDialog__dialog, +.excalidraw--mobile.excalidraw .ExportDialog__dialog .Island { + height: 100%; + box-sizing: border-box; +} +.excalidraw--mobile.excalidraw .ExportDialog__dialog .Island { + overflow-y: auto; +} +.excalidraw .ExportDialog--json .ExportDialog-cards { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + justify-items: center; + row-gap: 2em; +} +@media (max-width: 460px) { + .excalidraw .ExportDialog--json .ExportDialog-cards { + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + } + .excalidraw .ExportDialog--json .ExportDialog-cards .Card-details { + min-height: 40px; + } +} +.excalidraw .ExportDialog--json .ExportDialog-cards .ProjectName { + width: fit-content; + margin: 1em auto; + align-items: flex-start; + flex-direction: column; +} +.excalidraw .ExportDialog--json .ExportDialog-cards .ProjectName .TextInput { + width: auto; +} +.excalidraw .ExportDialog--json .ExportDialog-cards .ProjectName-label { + margin: 0.625em 0; + font-weight: 700; +} +.excalidraw button.ExportDialog-imageExportButton { + border: 0; + width: 5rem; + height: 5rem; + margin: 0 0.2em; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + border-radius: 1rem; + background-color: var(--button-color); + box-shadow: 0 3px 5px -1px #00000047, 0 6px 10px #00000024; + font-family: Cascadia; + font-size: 1.8em; + color: #fff; +} +.excalidraw button.ExportDialog-imageExportButton:hover { + background-color: var(--button-color-darker); +} +.excalidraw button.ExportDialog-imageExportButton:active { + background-color: var(--button-color-darkest); + box-shadow: none; +} +.excalidraw button.ExportDialog-imageExportButton svg { + width: 0.9em; +} +.excalidraw .sidebar-trigger { + justify-content: center; + padding: 0.625rem; + width: var(--button-width, var(--default-button-size)); + height: var(--button-height, var(--default-button-size)); + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: var(--button-border, var(--default-border-color)); + border-radius: var(--border-radius-lg); + cursor: pointer; + background-color: var(--button-bg, var(--island-bg-color)); + color: var(--button-color, var(--color-on-surface)); + font-family: var(--ui-font); + border: none; + box-shadow: 0 0 0 1px var(--color-surface-lowest); + background-color: var(--color-surface-low); + width: auto; + height: var(--lg-button-size); + display: flex; + align-items: center; + gap: 0.5rem; + line-height: 0; + font-size: 0.75rem; + letter-spacing: 0.4px; +} +.excalidraw .sidebar-trigger svg { + width: var(--button-width, var(--lg-icon-size)); + height: var(--button-height, var(--lg-icon-size)); +} +.excalidraw .sidebar-trigger:hover { + background-color: var(--button-hover-bg, var(--island-bg-color)); + border-color: var(--button-hover-border, var(--button-border, var(--default-border-color))); + color: var(--button-hover-color, var(--button-color, var(--text-primary-color, inherit))); +} +.excalidraw .sidebar-trigger:active { + background-color: var(--button-active-bg, var(--island-bg-color)); + border-color: var(--button-active-border, var(--color-primary-darkest)); +} +.excalidraw .sidebar-trigger.active { + background-color: var(--button-selected-bg, var(--color-surface-primary-container)); + border-color: var(--button-selected-border, var(--color-surface-primary-container)); +} +.excalidraw .sidebar-trigger.active:hover { + background-color: var(--button-selected-hover-bg, var(--color-surface-primary-container)); +} +.excalidraw .sidebar-trigger.active svg { + color: var(--button-color, var(--color-on-primary-container)); +} +.excalidraw .sidebar-trigger:active { + box-shadow: 0 0 0 1px var(--color-brand-active); +} +.excalidraw .sidebar-trigger svg { + width: var(--lg-icon-size); + height: var(--lg-icon-size); +} +.excalidraw .sidebar-trigger__label-element { + align-self: flex-start; +} +.excalidraw .default-sidebar-trigger .sidebar-trigger__label { + display: block; + white-space: nowrap; +} +.excalidraw.excalidraw--mobile .default-sidebar-trigger .sidebar-trigger__label { + display: none; +} +.excalidraw .sidebar { + display: flex; + flex-direction: column; + position: absolute; + top: 0; + bottom: 0; + right: 0; + z-index: 5; + margin: 0; + padding: 0; + box-sizing: border-box; + background-color: var(--sidebar-bg-color); + box-shadow: var(--sidebar-shadow); + pointer-events: var(--ui-pointerEvents); + overflow: hidden; + border-radius: 0; + width: calc(var(--right-sidebar-width) - var(--space-factor) * 2); + border-left: 1px solid var(--sidebar-border-color); +} +:root[dir='rtl'] .excalidraw .sidebar { + left: 0; + right: auto; +} +.excalidraw .sidebar--docked { + box-shadow: none; +} +:root[dir='rtl'] .excalidraw .sidebar { + border-right: 1px solid var(--sidebar-border-color); + border-left: 0; +} +.excalidraw .sidebar__header { + box-sizing: border-box; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 1rem 0.75rem; + position: relative; +} +.excalidraw .sidebar__header:after { + content: ''; + width: calc(100% - 1.5rem); + height: 1px; + background: var(--sidebar-border-color); + position: absolute; + bottom: -1px; +} +.excalidraw .sidebar__header__buttons { + gap: 0; + display: flex; + align-items: center; + margin-left: auto; +} +.excalidraw .sidebar__header__buttons button { + display: flex; + justify-content: center; + align-items: center; + padding: 0.625rem; + width: var(--button-width, var(--default-button-size)); + height: var(--button-height, var(--default-button-size)); + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: var(--button-border, var(--default-border-color)); + border-radius: var(--border-radius-lg); + cursor: pointer; + background-color: var(--button-bg, var(--island-bg-color)); + color: var(--button-color, var(--color-on-surface)); + font-family: var(--ui-font); + --button-bg: transparent; + border: 0 !important; + width: var(--lg-button-size); + height: var(--lg-button-size); + padding: 0; +} +.excalidraw .sidebar__header__buttons button svg { + width: var(--button-width, var(--lg-icon-size)); + height: var(--button-height, var(--lg-icon-size)); +} +.excalidraw .sidebar__header__buttons button:hover { + background-color: var(--button-hover-bg, var(--island-bg-color)); + border-color: var(--button-hover-border, var(--button-border, var(--default-border-color))); + color: var(--button-hover-color, var(--button-color, var(--text-primary-color, inherit))); +} +.excalidraw .sidebar__header__buttons button:active { + background-color: var(--button-active-bg, var(--island-bg-color)); + border-color: var(--button-active-border, var(--color-primary-darkest)); +} +.excalidraw .sidebar__header__buttons button.active { + background-color: var(--button-selected-bg, var(--color-surface-primary-container)); + border-color: var(--button-selected-border, var(--color-surface-primary-container)); +} +.excalidraw .sidebar__header__buttons button.active:hover { + background-color: var(--button-selected-hover-bg, var(--color-surface-primary-container)); +} +.excalidraw .sidebar__header__buttons button.active svg { + color: var(--button-color, var(--color-on-primary-container)); +} +.excalidraw .sidebar__header__buttons button svg { + width: var(--lg-icon-size); + height: var(--lg-icon-size); +} +.excalidraw .sidebar__header__buttons button:hover { + background: var(--button-hover-bg, var(--island-bg-color)); +} +.excalidraw .sidebar__header__buttons .sidebar__dock.selected svg { + stroke: var(--color-primary); + fill: var(--color-primary); +} +.excalidraw .sidebar-tabs-root { + display: flex; + flex-direction: column; + flex: 1 1 auto; + padding: 1rem 0; +} +.excalidraw .sidebar-tabs-root [role='tabpanel'] { + flex: 1; + flex: 1 1 auto; + display: flex; + flex-direction: column; + outline: none; +} +.excalidraw .sidebar-tabs-root [role='tabpanel'][data-state='inactive'] { + display: none !important; +} +.excalidraw .sidebar-tabs-root [role='tablist'] { + display: grid; + gap: 1rem; + grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); +} +.excalidraw .sidebar-tabs-root > .sidebar__header { + padding-top: 0; + padding-bottom: 1rem; +} +.excalidraw .sidebar-tab-trigger { + --button-width: auto; + --button-bg: transparent; + --button-hover-bg: transparent; + --button-active-bg: var(--color-primary); + --button-hover-color: var(--color-primary); + --button-hover-border: var(--color-primary); +} +.excalidraw .sidebar-tab-trigger[data-state='active'] { + --button-bg: var(--color-primary); + --button-hover-bg: var(--color-primary-darker); + --button-hover-color: var(--color-icon-white); + --button-border: var(--color-primary); + color: var(--color-icon-white); +} +.excalidraw .default-sidebar { + display: flex; + flex-direction: column; +} +.excalidraw .default-sidebar .sidebar-triggers { + display: flex; + gap: 0; + padding: 2px; + margin-top: -3px; + margin-bottom: -3px; + border: 1px solid var(--sidebar-border-color); + background: var(--default-bg-color); + border-radius: 0.625rem; +} +.excalidraw .default-sidebar .sidebar-triggers .sidebar-tab-trigger { + height: var(--lg-button-size); + width: var(--lg-button-size); + border: none; +} +.excalidraw .ActiveFile .ActiveFile__fileName { + display: flex; + align-items: center; +} +.excalidraw .ActiveFile .ActiveFile__fileName span { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 9.3em; +} +.excalidraw .ActiveFile .ActiveFile__fileName svg { + width: 1.15em; + margin-inline-end: 0.3em; + transform: scaleY(0.9); +} +.excalidraw .OverwriteConfirm { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.75rem; + isolation: isolate; +} +.excalidraw .OverwriteConfirm h3 { + margin: 0; + font-weight: 700; + font-size: 1.3125rem; + line-height: 130%; + align-self: flex-start; + color: var(--text-primary-color); +} +.excalidraw .OverwriteConfirm__Description { + box-sizing: border-box; + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + gap: 1rem; + padding: 2.5rem; + background: var(--color-danger-background); + border-radius: 0.5rem; + font-family: Assistant; + font-style: normal; + font-weight: 400; + font-size: 1rem; + line-height: 150%; + color: var(--color-danger-color); +} +.excalidraw--mobile.excalidraw .OverwriteConfirm__Description { + flex-direction: column; + text-align: center; +} +.excalidraw .OverwriteConfirm__Description__spacer { + flex-grow: 1; +} +.excalidraw .OverwriteConfirm__Description__icon { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: center; + border-radius: 2.5rem; + background: var(--color-danger-icon-background); + width: 3.5rem; + height: 3.5rem; + padding: 0.75rem; +} +.excalidraw .OverwriteConfirm__Description__icon svg { + color: var(--color-danger-icon-color); + width: 1.5rem; + height: 1.5rem; +} +.excalidraw .OverwriteConfirm__Description.OverwriteConfirm__Description--color-warning { + background: var(--color-warning-background); + color: var(--color-warning-color); +} +.excalidraw .OverwriteConfirm__Description.OverwriteConfirm__Description--color-warning .OverwriteConfirm__Description__icon { + background: var(--color-warning-icon-background); + flex: 0 0 auto; +} +.excalidraw .OverwriteConfirm__Description.OverwriteConfirm__Description--color-warning .OverwriteConfirm__Description__icon svg { + color: var(--color-warning-icon-color); +} +.excalidraw .OverwriteConfirm__Actions { + display: flex; + flex-direction: row; + align-items: stretch; + justify-items: stretch; + justify-content: center; + gap: 1.5rem; +} +.excalidraw--mobile.excalidraw .OverwriteConfirm__Actions { + flex-direction: column; +} +.excalidraw .OverwriteConfirm__Actions__Action { + display: flex; + flex-direction: column; + align-items: center; + padding: 1.5rem; + gap: 0.75rem; + flex-basis: 50%; + flex-grow: 0; +} +.excalidraw .OverwriteConfirm__Actions__Action__content { + height: 100%; + font-size: 0.875rem; + text-align: center; +} +.excalidraw .OverwriteConfirm__Actions__Action h4 { + font-weight: 700; + font-size: 1.125rem; + line-height: 130%; + margin: 0; + color: var(--text-primary-color); +} +.excalidraw .layer-ui__search { + flex: 1 0 auto; + display: flex; + flex-direction: column; + padding: 8px 0 0; +} +.excalidraw .layer-ui__search-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 0.75rem; +} +.excalidraw .layer-ui__search-header .ExcTextField { + flex: 1 0 auto; +} +.excalidraw .layer-ui__search-header .ExcTextField__input { + background-color: #f5f5f9; + border-radius: var(--border-radius-md); + border: 0; +} +.excalidraw.theme--dark.excalidraw .layer-ui__search-header .ExcTextField__input { + background-color: #31303b; +} +.excalidraw .layer-ui__search-header .ExcTextField__input input::placeholder { + font-size: 0.9rem; +} +.excalidraw .layer-ui__search-count { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 8px 0; + margin: 0 0.75rem 0.25rem; + font-size: 0.8em; +} +.excalidraw .layer-ui__search-count .result-nav { + display: flex; +} +.excalidraw .layer-ui__search-count .result-nav .result-nav-btn { + width: 36px; + height: 36px; + --button-border: transparent; +} +.excalidraw .layer-ui__search-count .result-nav .result-nav-btn:active { + background-color: var(--color-surface-high); +} +.excalidraw .layer-ui__search-count .result-nav .result-nav-btn:first-child { + margin-right: 4px; +} +.excalidraw .layer-ui__search-result-container { + overflow-y: auto; + flex: 1 1 0; + display: flex; + flex-direction: column; + gap: 0.125rem; +} +.excalidraw .layer-ui__result-item { + display: flex; + align-items: center; + min-height: 2rem; + flex: 0 0 auto; + padding: 0.25rem 0.75rem; + cursor: pointer; + border: 1px solid transparent; + outline: none; + margin: 0 0.75rem; + border-radius: var(--border-radius-md); +} +.excalidraw .layer-ui__result-item .text-icon { + width: 1rem; + height: 1rem; + margin-right: 0.75rem; +} +.excalidraw .layer-ui__result-item .preview-text { + flex: 1; + max-height: 48px; + line-height: 24px; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; +} +.excalidraw .layer-ui__result-item:hover { + background-color: var(--color-surface-high); +} +.excalidraw .layer-ui__result-item:active { + border-color: var(--color-primary); +} +.excalidraw .layer-ui__result-item.active { + background-color: var(--color-surface-high); +} +.excalidraw .dialog-mermaid-title { + margin-block: 0.25rem; + font-size: 1.25rem; + font-weight: 700; + padding-inline: 2.5rem; +} +.excalidraw .Modal.Dialog.ttd-dialog { + padding: 1.25rem; +} +.excalidraw .Modal.Dialog.ttd-dialog.Dialog--fullscreen { + margin-top: 0; +} +.excalidraw .Modal.Dialog.ttd-dialog .Island { + padding-inline: 0 !important; + height: 100%; + display: flex; + flex-direction: column; + flex: 1 1 auto; + box-shadow: none; +} +.excalidraw .Modal.Dialog.ttd-dialog .Modal__content { + height: auto; + max-height: 100%; +} +@media screen and (min-width: 861px) { + .excalidraw .Modal.Dialog.ttd-dialog .Modal__content { + max-height: 750px; + height: 100%; + } +} +.excalidraw .Modal.Dialog.ttd-dialog .Dialog__content { + flex: 1 1 auto; +} +.excalidraw .ttd-dialog-desc { + font-size: 15px; + font-style: italic; + font-weight: 500; + margin-bottom: 1.5rem; +} +.excalidraw .ttd-dialog-tabs-root { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} +.excalidraw .ttd-dialog-tab-trigger { + color: var(--color-on-surface); + font-size: 0.875rem; + margin: 0; + padding: 0 1rem; + background-color: transparent; + border: 0; + height: 2.875rem; + font-weight: 600; + font-family: inherit; + letter-spacing: 0.4px; +} +.excalidraw .ttd-dialog-tab-trigger[data-state='active'] { + border-bottom: 2px solid var(--color-primary); +} +.excalidraw .ttd-dialog-triggers { + border-bottom: 1px solid var(--color-surface-high); + margin-bottom: 1.5rem; + padding-inline: 2.5rem; +} +.excalidraw .ttd-dialog-content { + padding-inline: 2.5rem; + height: 100%; + display: flex; + flex-direction: column; +} +.excalidraw .ttd-dialog-content[hidden] { + display: none; +} +.excalidraw .ttd-dialog-input { + width: auto; + height: 10rem; + resize: none; + border-radius: var(--border-radius-lg); + border: 1px solid var(--dialog-border-color); + white-space: pre-wrap; + padding: 0.85rem; + box-sizing: border-box; + font-family: monospace; +} +@media screen and (min-width: 861px) { + .excalidraw .ttd-dialog-input { + width: 100%; + height: 100%; + } +} +.excalidraw .ttd-dialog-output-wrapper { + display: flex; + align-items: center; + justify-content: center; + padding: 0.85rem; + box-sizing: border-box; + flex-grow: 1; + position: relative; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==) + left center; + border-radius: var(--border-radius-lg); + border: 1px solid var(--dialog-border-color); + height: 400px; + width: auto; +} +@media screen and (min-width: 861px) { + .excalidraw .ttd-dialog-output-wrapper { + width: 100%; + height: 200px; + } +} +.excalidraw .ttd-dialog-output-wrapper canvas { + max-width: 100%; + max-height: 100%; +} +.excalidraw .ttd-dialog-output-canvas-container { + display: flex; + width: 100%; + height: 100%; + align-items: center; + justify-content: center; + flex-grow: 1; +} +.excalidraw .ttd-dialog-output-error { + color: red; + font-weight: 700; + font-size: 30px; + word-break: break-word; + overflow: auto; + max-height: 100%; + height: 100%; + width: 100%; + text-align: center; + position: absolute; + z-index: 10; +} +.excalidraw .ttd-dialog-output-error p { + font-weight: 500; + font-family: Cascadia; + text-align: left; + white-space: pre-wrap; + font-size: 0.875rem; + padding: 0 10px; +} +.excalidraw .ttd-dialog-panels { + height: 100%; +} +@media screen and (min-width: 861px) { + .excalidraw .ttd-dialog-panels { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 4rem; + } +} +.excalidraw .ttd-dialog-panel { + display: flex; + flex-direction: column; + width: 100%; +} +.excalidraw .ttd-dialog-panel__header { + display: flex; + margin: 0 4px 4px; + align-items: center; + gap: 1rem; +} +.excalidraw .ttd-dialog-panel__header label { + font-size: 14px; + font-style: normal; + font-weight: 600; +} +.excalidraw .ttd-dialog-panel:first-child .ttd-dialog-panel-button-container:not(.invisible) { + margin-bottom: 4rem; +} +@media screen and (min-width: 861px) { + .excalidraw .ttd-dialog-panel .ttd-dialog-panel-button-container:not(.invisible) { + margin-bottom: 0.5rem !important; + } +} +.excalidraw .ttd-dialog-panel textarea { + height: 100%; + resize: none; + border-radius: var(--border-radius-lg); + border: 1px solid var(--dialog-border-color); + white-space: pre-wrap; + padding: 0.85rem; + box-sizing: border-box; + width: 100%; + font-family: monospace; +} +@media screen and (max-width: 861px) { + .excalidraw .ttd-dialog-panel textarea { + width: auto; + height: 10rem; + } +} +.excalidraw .ttd-dialog-panel-button-container { + margin-top: 1rem; + margin-bottom: 0.5rem; +} +.excalidraw .ttd-dialog-panel-button-container.invisible .ttd-dialog-panel-button { + display: none; +} +@media screen and (min-width: 861px) { + .excalidraw .ttd-dialog-panel-button-container.invisible .ttd-dialog-panel-button { + display: block; + visibility: hidden; + } +} +.excalidraw .ttd-dialog-panel-button { + position: relative; +} +.excalidraw .ttd-dialog-panel-button.excalidraw-button { + font-family: inherit; + font-weight: 600; + height: 2.5rem; + font-size: 12px; + color: #fff; + background-color: var(--color-primary); + width: 100%; +} +.excalidraw .ttd-dialog-panel-button.excalidraw-button:hover { + background-color: var(--color-primary-darker); +} +.excalidraw .ttd-dialog-panel-button.excalidraw-button:active { + background-color: var(--color-primary-darkest); +} +.excalidraw .ttd-dialog-panel-button.excalidraw-button:disabled { + opacity: 0.5; + cursor: not-allowed; +} +.excalidraw .ttd-dialog-panel-button.excalidraw-button:disabled:hover { + background-color: var(--color-primary); +} +@media screen and (min-width: 861px) { + .excalidraw .ttd-dialog-panel-button.excalidraw-button { + width: auto; + min-width: 7.5rem; + } +} +.excalidraw.theme--dark.excalidraw .ttd-dialog-panel-button.excalidraw-button { + color: var(--color-gray-100); +} +.excalidraw .ttd-dialog-panel-button div { + display: contents; +} +.excalidraw .ttd-dialog-panel-button div.invisible { + visibility: hidden; +} +.excalidraw .ttd-dialog-panel-button div.Spinner { + display: flex !important; + position: absolute; + inset: 0; + --spinner-color: white; +} +.excalidraw.theme--dark.excalidraw .ttd-dialog-panel-button div.Spinner { + --spinner-color: var(--color-gray-100); +} +.excalidraw .ttd-dialog-panel-button div span { + padding-left: 0.5rem; + display: flex; +} +.excalidraw .ttd-dialog-submit-shortcut { + margin-inline-start: 0.5rem; + font-size: 0.625rem; + opacity: 0.6; + display: flex; + gap: 0.125rem; +} +.excalidraw .ttd-dialog-submit-shortcut__key { + border: 1px solid gray; + padding: 2px 3px; + border-radius: 4px; +} +.excalidraw .drag-input-container { + display: flex; + width: 100%; +} +.excalidraw .drag-input-container:focus-within { + box-shadow: 0 0 0 1px var(--color-primary-darkest); + border-radius: var(--border-radius-md); +} +.excalidraw .disabled { + opacity: 0.5; + pointer-events: none; +} +.excalidraw .drag-input-label { + flex-shrink: 0; + border: 1px solid var(--default-border-color); + border-right: 0; + padding: 0 0.5rem 0 0.75rem; + min-width: 1rem; + height: 2rem; + box-sizing: border-box; + color: var(--popup-text-color); + display: flex; + align-items: center; + justify-content: center; + position: relative; +} +:root[dir='ltr'] .excalidraw .drag-input-label { + border-radius: var(--border-radius-md) 0 0 var(--border-radius-md); +} +:root[dir='rtl'] .excalidraw .drag-input-label { + border-radius: 0 var(--border-radius-md) var(--border-radius-md) 0; + border-right: 1px solid var(--default-border-color); + border-left: 0; +} +.excalidraw .drag-input { + box-sizing: border-box; + width: 100%; + margin: 0; + font-size: 0.875rem; + font-family: inherit; + background-color: transparent; + color: var(--text-primary-color); + border: 0; + outline: none; + height: 2rem; + border: 1px solid var(--default-border-color); + border-left: 0; + letter-spacing: 0.4px; + padding: 0.5rem 0.5rem 0.5rem 0.25rem; + appearance: none; +} +:root[dir='ltr'] .excalidraw .drag-input { + border-radius: 0 var(--border-radius-md) var(--border-radius-md) 0; +} +:root[dir='rtl'] .excalidraw .drag-input { + border-radius: var(--border-radius-md) 0 0 var(--border-radius-md); + border-left: 1px solid var(--default-border-color); + border-right: 0; +} +.excalidraw .drag-input:focus-visible { + box-shadow: none; +} +.exc-stats { + width: 204px; + position: absolute; + top: 60px; + font-size: 12px; + z-index: var(--zIndex-layerUI); + pointer-events: var(--ui-pointerEvents); +} +:root[dir='rtl'] .exc-stats { + left: 12px; + right: initial; +} +.exc-stats h2 { + font-size: 1.5em; + margin-block-start: 0.83em; + margin-block-end: 0.83em; + font-weight: 700; +} +.exc-stats h3 { + white-space: nowrap; + font-size: 1.17em; + margin: 0; + font-weight: 700; +} +.exc-stats__rows { + display: flex; + flex-direction: column; + gap: 0.3125rem; +} +.exc-stats__row { + display: flex; + justify-content: space-between; + align-items: center; + display: grid; + gap: 4px; +} +.exc-stats__row div + div { + text-align: right; +} +.exc-stats__row--heading { + text-align: center; + font-weight: 700; + margin: 0.25rem 0; +} +.exc-stats .title { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; +} +.exc-stats .title h2 { + margin: 0; +} +.exc-stats .close { + height: 16px; + width: 16px; + cursor: pointer; +} +.exc-stats .close svg { + width: 100%; + height: 100%; +} +.excalidraw .ElementLinkDialog { + position: absolute; + top: var(--editor-container-padding); + left: var(--editor-container-padding); + z-index: var(--zIndex-modal); + border-radius: 10px; + padding: 1.5rem; + display: flex; + flex-direction: column; + justify-content: space-between; + box-shadow: var(--shadow-island); + background-color: var(--island-bg-color); +} +.excalidraw--mobile.excalidraw .ElementLinkDialog { + left: 0; + margin-left: 0.5rem; + margin-right: 0.5rem; + width: calc(100% - 1rem); + box-sizing: border-box; + z-index: 5; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__header { + margin-bottom: 1.5rem; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__header h2 { + margin-top: 0; + margin-bottom: 0.5rem; +} +.excalidraw--mobile.excalidraw .ElementLinkDialog .ElementLinkDialog__header h2 { + font-size: 1.25rem; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__header p { + margin: 0; +} +.excalidraw--mobile.excalidraw .ElementLinkDialog .ElementLinkDialog__header p { + font-size: 0.875rem; +} +.excalidraw--mobile.excalidraw .ElementLinkDialog .ElementLinkDialog__header { + margin-bottom: 1rem; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__input { + display: flex; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__input .ElementLinkDialog__input-field { + flex: 1; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__input .ElementLinkDialog__remove { + color: #c92a2a; + margin-left: 1rem; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__input .ElementLinkDialog__remove .ToolIcon__icon { + width: 2rem; + height: 2rem; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__input .ElementLinkDialog__remove .ToolIcon__icon svg { + color: #fa5252; +} +.excalidraw .ElementLinkDialog .ElementLinkDialog__actions { + display: flex; + justify-content: flex-end; + margin-top: 1.5rem; +} +.excalidraw--mobile.excalidraw .ElementLinkDialog .ElementLinkDialog__actions { + font-size: 0.875rem; + margin-top: 1rem; +} +.excalidraw .layer-ui__wrapper.animate { + transition: width 0.1s ease-in-out; +} +.excalidraw .layer-ui__wrapper { + position: absolute; + width: 100%; + height: 100%; + pointer-events: none; + z-index: var(--zIndex-layerUI); +} +.excalidraw .layer-ui__wrapper__top-right { + display: flex; + width: 100%; + justify-content: flex-end; + gap: 0.75rem; + pointer-events: none !important; +} +.excalidraw .layer-ui__wrapper__top-right > * { + pointer-events: var(--ui-pointerEvents); +} +.excalidraw .layer-ui__wrapper__footer { + width: 100%; +} +.excalidraw .layer-ui__wrapper__footer-right { + z-index: 100; + display: flex; +} +.excalidraw .layer-ui__wrapper .zen-mode-transition { + transition: transform 0.5s ease-in-out; +} +:root[dir='ltr'] .excalidraw .layer-ui__wrapper .zen-mode-transition.transition-left { + transform: translate(-999px); +} +:root[dir='ltr'] .excalidraw .layer-ui__wrapper .zen-mode-transition.transition-right { + transform: translate(999px); +} +:root[dir='rtl'] .excalidraw .layer-ui__wrapper .zen-mode-transition.transition-left { + transform: translate(999px); +} +:root[dir='rtl'] .excalidraw .layer-ui__wrapper .zen-mode-transition.transition-right { + transform: translate(-999px); +} +.excalidraw .layer-ui__wrapper .zen-mode-transition.layer-ui__wrapper__footer-left--transition-bottom { + transform: translateY(92px); +} +.excalidraw .layer-ui__wrapper .disable-zen-mode { + padding: 10px; + position: absolute; + bottom: 0; + opacity: 0; + visibility: hidden; + transition: visibility 0s linear 0s, opacity 0.5s; + font-family: var(--ui-font); + font-size: 0.75rem; + font-weight: 500; + line-height: 1; + border-radius: var(--border-radius-lg); + border: 1px solid var(--default-border-color); + background-color: var(--island-bg-color); + color: var(--text-primary-color); +} +[dir='ltr'] .excalidraw .layer-ui__wrapper .disable-zen-mode { + right: 1rem; +} +[dir='rtl'] .excalidraw .layer-ui__wrapper .disable-zen-mode { + left: 1rem; +} +.excalidraw .layer-ui__wrapper .disable-zen-mode:hover { + background-color: var(--button-hover-bg); +} +.excalidraw .layer-ui__wrapper .disable-zen-mode:active { + border-color: var(--color-primary); +} +.excalidraw .layer-ui__wrapper .disable-zen-mode--visible { + opacity: 1; + visibility: visible; + transition: visibility 0s linear 0.3s, opacity 0.5s; + transition-delay: 0.8s; + pointer-events: var(--ui-pointerEvents); +} +.excalidraw .layer-ui__wrapper .layer-ui__wrapper__footer-left > *, +.excalidraw .layer-ui__wrapper .footer-center > *, +.excalidraw .layer-ui__wrapper .layer-ui__wrapper__footer-right > * { + pointer-events: var(--ui-pointerEvents); +} +.excalidraw .layer-ui__wrapper .layer-ui__wrapper__footer-right { + margin-top: auto; + margin-bottom: auto; +} +.excalidraw .App-toolbar.zen-mode .ToolIcon__keybinding, +.excalidraw .App-toolbar.zen-mode .HintViewer { + display: none; +} +.excalidraw .App-toolbar__divider { + width: 1px; + height: 1.5rem; + align-self: center; + background-color: var(--default-border-color); + margin: 0 0.25rem; +} +.excalidraw--mobile.excalidraw .App-toolbar__divider { + margin: 0; +} +.excalidraw .App-toolbar__extra-tools-trigger { + box-shadow: none; + border: 0; + background-color: transparent; +} +.excalidraw .App-toolbar__extra-tools-trigger:active { + background-color: var(--button-hover-bg); + box-shadow: 0 0 0 1px var(--button-active-border, var(--color-primary-darkest)) inset; +} +.excalidraw .App-toolbar__extra-tools-trigger--selected, +.excalidraw .App-toolbar__extra-tools-trigger--selected:hover { + background: var(--color-primary-light); + color: var(--color-primary); +} +.excalidraw .App-toolbar__extra-tools-dropdown { + margin-top: 0.375rem; + right: 0; + min-width: 11.875rem; + z-index: 1; +} +.excalidraw .Toast { + animation: fade-in 0.5s; + background-color: var(--button-gray-1); + border-radius: 4px; + bottom: 10px; + box-sizing: border-box; + cursor: default; + left: 50%; + margin-left: -150px; + padding: 4px 0; + position: absolute; + text-align: center; + width: 300px; + z-index: 999999; +} +.excalidraw .Toast .Toast__message { + padding: 0 1.6rem; + color: var(--popup-text-color); + white-space: pre-wrap; +} +.excalidraw .Toast .close { + position: absolute; + top: 0; + right: 0; + padding: 0.4rem; +} +.excalidraw .Toast .close .ToolIcon__icon { + width: 1.2rem; + height: 1.2rem; +} +@keyframes fade-in { + 0% { + opacity: 0; + } + to { + opacity: 1; + } +} +.excalidraw .SVGLayer { + pointer-events: none; + width: 100vw; + height: 100vh; + position: fixed; + top: 0; + left: 0; + z-index: var(--zIndex-svgLayer); +} +.excalidraw .SVGLayer svg { + image-rendering: auto; + overflow: visible; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +.excalidraw .excalidraw-canvas-buttons { + position: absolute; + box-shadow: 0 2px 4px #0000004d; + z-index: var(--zIndex-canvasButtons); + background: var(--island-bg-color); + border-radius: var(--border-radius-lg); + display: flex; + flex-direction: column; + gap: 0.375rem; +} +.excalidraw .follow-mode { + position: absolute; + box-sizing: border-box; + pointer-events: none; + border: 2px solid var(--color-primary-hover); + z-index: 9999; + display: flex; + align-items: flex-end; + justify-content: center; +} +.excalidraw .follow-mode__badge { + background-color: var(--color-primary-hover); + color: var(--color-primary-light); + padding: 0.25rem 0.5rem; + margin-bottom: 0.5rem; + border-radius: 0.5rem; + pointer-events: all; + font-size: 0.75rem; + display: flex; + gap: 0.5rem; + align-items: center; +} +.excalidraw .follow-mode__badge__label { + display: flex; + white-space: pre-wrap; + line-height: 1; +} +.excalidraw .follow-mode__badge__username { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100px; +} +.excalidraw .follow-mode__disconnect-btn { + all: unset; + cursor: pointer; + border-radius: 0.25rem; +} +.excalidraw .follow-mode__disconnect-btn:hover { + background-color: var(--color-primary-darker); +} +.excalidraw .follow-mode__disconnect-btn:active { + background-color: var(--color-primary-darkest); +} +.excalidraw .follow-mode__disconnect-btn svg { + display: block; + width: 1rem; + height: 1rem; +} +.visually-hidden { + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); + white-space: nowrap; + user-select: none; +} +.LoadingMessage { + position: absolute; + inset: 0; + z-index: 999; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + pointer-events: none; +} +.LoadingMessage .Spinner { + font-size: 2.8em; +} +.LoadingMessage .LoadingMessage-text { + margin-top: 1em; + font-size: 0.8em; +} +.LoadingMessage--dark { + background-color: #121212; + color: #ced4da; +} +.excalidraw { + --theme-filter: none; + --button-destructive-bg-color: #ffe3e3; + --button-destructive-color: #c92a2a; + --button-gray-1: #e9ecef; + --button-gray-2: #ced4da; + --button-gray-3: #adb5bd; + --button-special-active-bg-color: #ebfbee; + --dialog-border-color: var(--color-gray-20); + --dropdown-icon: url('data:image/svg+xml,'); + --focus-highlight-color: #a5d8ff; + --icon-fill-color: var(--color-on-surface); + --icon-green-fill-color: #2b8a3e; + --default-bg-color: #ffffff; + --input-bg-color: #ffffff; + --input-border-color: #ced4da; + --input-hover-bg-color: #f1f3f5; + --input-label-color: #495057; + --island-bg-color: #ffffff; + --keybinding-color: var(--color-gray-40); + --link-color: #1c7ed6; + --overlay-bg-color: rgba(255, 255, 255, 0.88); + --popup-bg-color: var(--island-bg-color); + --popup-secondary-bg-color: #f1f3f5; + --popup-text-color: #000000; + --popup-text-inverted-color: #ffffff; + --select-highlight-color: #339af0; + --shadow-island: 0px 0px 0.9310142993927002px 0px rgba(0, 0, 0, 0.17), 0px 0px 3.1270833015441895px 0px rgba(0, 0, 0, 0.08), + 0px 7px 14px 0px rgba(0, 0, 0, 0.05); + --button-hover-bg: var(--color-surface-high); + --button-active-bg: var(--color-surface-high); + --button-active-border: var(--color-brand-active); + --default-border-color: var(--color-surface-high); + --default-button-size: 2rem; + --default-icon-size: 1rem; + --lg-button-size: 2.25rem; + --lg-icon-size: 1rem; + --editor-container-padding: 1rem; + --scrollbar-thumb: var(--button-gray-2); + --scrollbar-thumb-hover: var(--button-gray-3); + --color-slider-track: hsl(240, 100%, 90%); + --color-slider-thumb: var(--color-gray-80); + --modal-shadow: 0px 100px 80px rgba(0, 0, 0, 0.07), 0px 41.7776px 33.4221px rgba(0, 0, 0, 0.0503198), 0px 22.3363px 17.869px rgba(0, 0, 0, 0.0417275), + 0px 12.5216px 10.0172px rgba(0, 0, 0, 0.035), 0px 6.6501px 5.32008px rgba(0, 0, 0, 0.0282725), 0px 2.76726px 2.21381px rgba(0, 0, 0, 0.0196802); + --avatar-border-color: var(--color-gray-20); + --sidebar-shadow: 0px 100px 80px rgba(0, 0, 0, 0.07), 0px 41.7776px 33.4221px rgba(0, 0, 0, 0.0503198), 0px 22.3363px 17.869px rgba(0, 0, 0, 0.0417275), + 0px 12.5216px 10.0172px rgba(0, 0, 0, 0.035), 0px 6.6501px 5.32008px rgba(0, 0, 0, 0.0282725), 0px 2.76726px 2.21381px rgba(0, 0, 0, 0.0196802); + --sidebar-border-color: var(--color-surface-high); + --sidebar-bg-color: var(--island-bg-color); + --library-dropdown-shadow: 0px 15px 6px rgba(0, 0, 0, 0.01), 0px 8px 5px rgba(0, 0, 0, 0.05), 0px 4px 4px rgba(0, 0, 0, 0.09), 0px 1px 2px rgba(0, 0, 0, 0.1), + 0px 0px 0px rgba(0, 0, 0, 0.1); + --space-factor: 0.25rem; + --text-primary-color: var(--color-on-surface); + --color-selection: #6965db; + --color-icon-white: #ffffff; + --color-primary: #6965db; + --color-primary-darker: #5b57d1; + --color-primary-darkest: #4a47b1; + --color-primary-light: #e3e2fe; + --color-primary-light-darker: #d7d5ff; + --color-primary-hover: #5753d0; + --color-gray-10: #f5f5f5; + --color-gray-20: #ebebeb; + --color-gray-30: #d6d6d6; + --color-gray-40: #b8b8b8; + --color-gray-50: #999999; + --color-gray-60: #7a7a7a; + --color-gray-70: #5c5c5c; + --color-gray-80: #3d3d3d; + --color-gray-85: #242424; + --color-gray-90: #1e1e1e; + --color-gray-100: #121212; + --color-disabled: var(--color-gray-40); + --color-warning: #fceeca; + --color-warning-dark: #f5c354; + --color-warning-darker: #f3ab2c; + --color-warning-darkest: #ec8b14; + --color-text-warning: var(--text-primary-color); + --color-danger: #db6965; + --color-danger-dark: #db6965; + --color-danger-darker: #d65550; + --color-danger-darkest: #d1413c; + --color-danger-text: black; + --color-danger-background: #fff0f0; + --color-danger-icon-background: #ffdad6; + --color-danger-color: #700000; + --color-danger-icon-color: #700000; + --color-warning-background: var(--color-warning); + --color-warning-icon-background: var(--color-warning-dark); + --color-warning-color: var(--text-primary-color); + --color-warning-icon-color: var(--text-primary-color); + --color-muted: var(--color-gray-30); + --color-muted-darker: var(--color-gray-60); + --color-muted-darkest: var(--color-gray-100); + --color-muted-background: var(--color-gray-80); + --color-muted-background-darker: var(--color-gray-100); + --color-promo: var(--color-primary); + --color-success: #cafccc; + --color-success-darker: #bafabc; + --color-success-darkest: #a5eba8; + --color-success-text: #268029; + --color-success-contrast: #65bb6a; + --color-success-contrast-hover: #6bcf70; + --color-success-contrast-active: #6edf74; + --color-logo-icon: var(--color-primary); + --color-logo-text: #190064; + --border-radius-md: 0.375rem; + --border-radius-lg: 0.5rem; + --color-surface-high: #f1f0ff; + --color-surface-mid: #f2f2f7; + --color-surface-low: #ececf4; + --color-surface-lowest: #ffffff; + --color-on-surface: #1b1b1f; + --color-brand-hover: #5753d0; + --color-on-primary-container: #030064; + --color-brand-active: #4440bf; + --color-border-outline: #767680; + --color-border-outline-variant: #c5c5d0; + --color-surface-primary-container: #e0dfff; + --color-badge: #0b6513; + --background-color-badge: #d3ffd2; +} +@media screen and (min-device-width: 1921px) { + .excalidraw { + --lg-button-size: 2.5rem; + --lg-icon-size: 1.25rem; + --default-button-size: 2.25rem; + --default-icon-size: 1.25rem; + } +} +.excalidraw.theme--dark.theme--dark-background-none { + background: none; +} +.excalidraw.theme--dark { + --theme-filter: invert(93%) hue-rotate(180deg); + --button-destructive-bg-color: #5a0000; + --button-destructive-color: #ffa8a8; + --button-gray-1: #363636; + --button-gray-2: #272727; + --button-gray-3: #222; + --button-special-active-bg-color: #204624; + --dialog-border-color: var(--color-gray-80); + --dropdown-icon: url('data:image/svg+xml,'); + --focus-highlight-color: #228be6; + --icon-green-fill-color: #69db7c; + --default-bg-color: #121212; + --input-bg-color: #121212; + --input-border-color: #2e2e2e; + --input-hover-bg-color: #181818; + --input-label-color: #e9ecef; + --island-bg-color: #232329; + --keybinding-color: var(--color-gray-60); + --link-color: #4dabf7; + --overlay-bg-color: rgba(52, 58, 64, 0.12); + --popup-secondary-bg-color: #222; + --popup-text-color: #ced4da; + --popup-text-inverted-color: #2c2c2c; + --select-highlight-color: #4dabf7; + --shadow-island: 0px 0px 0.9310142993927002px 0px rgba(0, 0, 0, 0.17), 0px 0px 3.1270833015441895px 0px rgba(0, 0, 0, 0.08), + 0px 7px 14px 0px rgba(0, 0, 0, 0.05); + --modal-shadow: 0px 100px 80px rgba(0, 0, 0, 0.07), 0px 41.7776px 33.4221px rgba(0, 0, 0, 0.0503198), 0px 22.3363px 17.869px rgba(0, 0, 0, 0.0417275), + 0px 12.5216px 10.0172px rgba(0, 0, 0, 0.035), 0px 6.6501px 5.32008px rgba(0, 0, 0, 0.0282725), 0px 2.76726px 2.21381px rgba(0, 0, 0, 0.0196802); + --avatar-border-color: var(--color-gray-85); + --scrollbar-thumb: #343a40; + --scrollbar-thumb-hover: #495057; + --color-slider-track: hsl(244, 23%, 39%); + --color-selection: #3530c4; + --color-icon-white: var(--color-gray-90); + --color-primary: #a8a5ff; + --color-primary-darker: #b2aeff; + --color-primary-darkest: #beb9ff; + --color-primary-light: #4f4d6f; + --color-primary-light-darker: #43415e; + --color-primary-hover: #bbb8ff; + --color-disabled: var(--color-gray-70); + --color-text-warning: var(--color-gray-80); + --color-danger: #ffa8a5; + --color-danger-dark: #672120; + --color-danger-darker: #8f2625; + --color-danger-darkest: #ac2b29; + --color-danger-text: #fbcbcc; + --color-danger-background: #fbcbcc; + --color-danger-icon-background: #672120; + --color-danger-color: #261919; + --color-danger-icon-color: #fbcbcc; + --color-warning-background: var(--color-warning); + --color-warning-icon-background: var(--color-warning-dark); + --color-warning-color: var(--color-gray-80); + --color-warning-icon-color: var(--color-gray-80); + --color-muted: var(--color-gray-80); + --color-muted-darker: var(--color-gray-60); + --color-muted-darkest: var(--color-gray-20); + --color-muted-background: var(--color-gray-40); + --color-muted-background-darker: var(--color-gray-20); + --color-logo-text: #e2dfff; + --color-surface-high: hsl(245, 10%, 21%); + --color-surface-low: hsl(240, 8%, 15%); + --color-surface-mid: hsl(240 6% 10%); + --color-surface-lowest: hsl(0, 0%, 7%); + --color-on-surface: #e3e3e8; + --color-brand-hover: #bbb8ff; + --color-on-primary-container: #e0dfff; + --color-brand-active: #d0ccff; + --color-border-outline: #8e8d9c; + --color-border-outline-variant: #46464f; + --color-surface-primary-container: #403e6a; +} +:root { + --zIndex-canvas: 1; + --zIndex-interactiveCanvas: 2; + --zIndex-svgLayer: 3; + --zIndex-wysiwyg: 3; + --zIndex-canvasButtons: 3; + --zIndex-layerUI: 4; + --zIndex-eyeDropperBackdrop: 5; + --zIndex-eyeDropperPreview: 6; + --zIndex-hyperlinkContainer: 7; + --zIndex-modal: 1000; + --zIndex-popup: 1001; + --zIndex-toast: 999999; + --sab: env(safe-area-inset-bottom); + --sal: env(safe-area-inset-left); + --sar: env(safe-area-inset-right); + --sat: env(safe-area-inset-top); +} +body.excalidraw-cursor-resize, +body.excalidraw-cursor-resize a:hover, +body.excalidraw-cursor-resize * { + cursor: ew-resize; +} +.excalidraw { + --ui-font: Assistant, system-ui, BlinkMacSystemFont, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif; + font-family: var(--ui-font); + position: relative; + overflow: hidden; + color: var(--text-primary-color); + display: flex; + inset: 0; + height: 100%; + width: 100%; + user-select: none; +} +.excalidraw button { + cursor: pointer; + user-select: none; +} +.excalidraw:focus { + outline: none; +} +.excalidraw .excalidraw-link, +.excalidraw a { + font-weight: 500; + text-decoration: none; + color: var(--link-color); + user-select: none; + cursor: pointer; +} +.excalidraw .excalidraw-link:hover, +.excalidraw a:hover { + text-decoration: underline; +} +.excalidraw .excalidraw-link:active, +.excalidraw a:active { + text-decoration: none; +} +.excalidraw canvas { + touch-action: none; + image-rendering: pixelated; + image-rendering: -moz-crisp-edges; + z-index: var(--zIndex-canvas); +} +.excalidraw canvas.interactive { + z-index: var(--zIndex-interactiveCanvas); +} +.excalidraw__canvas-wrapper, +.excalidraw__canvas.static { + pointer-events: none; +} +.excalidraw__canvas { + position: absolute; +} +.excalidraw__embeddable { + width: 100%; + height: 100%; + border: 0; +} +.excalidraw__embeddable-container { + position: absolute; + z-index: 2; + transform-origin: top left; + pointer-events: none; +} +.excalidraw.theme--dark canvas { + filter: var(--theme-filter); +} +.excalidraw .FixedSideContainer { + padding-top: var(--sat, 0); + padding-right: var(--sar, 0); + padding-bottom: var(--sab, 0); + padding-left: var(--sal, 0); +} +.excalidraw .panelRow { + display: flex; + justify-content: space-between; +} +.excalidraw .panelColumn { + display: flex; + flex-direction: column; + row-gap: 0.75rem; +} +.excalidraw .panelColumn h3, +.excalidraw .panelColumn legend, +.excalidraw .panelColumn .control-label { + margin: 0; + margin-bottom: 0.25rem; + font-size: 0.75rem; + color: var(--text-primary-color); + font-weight: 400; + display: block; +} +.excalidraw .panelColumn .control-label input { + display: block; + width: 100%; +} +.excalidraw .panelColumn legend { + padding: 0; +} +.excalidraw .panelColumn .iconSelectList { + flex-wrap: wrap; + position: relative; +} +.excalidraw .panelColumn .buttonList { + flex-wrap: wrap; + display: flex; + column-gap: 0.5rem; + row-gap: 0.5rem; +} +.excalidraw .panelColumn .buttonList label { + font-size: 0.75rem; +} +.excalidraw .panelColumn .buttonList input[type='radio'], +.excalidraw .panelColumn .buttonList input[type='button'] { + opacity: 0; + position: absolute; + pointer-events: none; +} +.excalidraw .panelColumn .buttonList .iconRow { + margin-top: 8px; +} +.excalidraw .panelColumn fieldset { + margin: 0; + padding: 0; + border: none; +} +.excalidraw .divider { + width: 1px; + background-color: #e9ecef; + margin: 1px; +} +.excalidraw .welcome-screen-menu-item:focus-visible, +.excalidraw .dropdown-menu-item:focus-visible, +.excalidraw button:focus-visible, +.excalidraw .buttonList label:focus-within, +.excalidraw input:focus-visible { + outline: transparent; + box-shadow: 0 0 0 1px var(--color-brand-hover); +} +.excalidraw .buttonList .ToolIcon__icon { + all: unset !important; + display: flex !important; +} +.excalidraw .buttonList button { + background-color: transparent; +} +.excalidraw .buttonList label, +.excalidraw .buttonList button, +.excalidraw .buttonList .zIndexButton { + display: flex; + justify-content: center; + align-items: center; + padding: 0.625rem; + width: var(--button-width, var(--default-button-size)); + height: var(--button-height, var(--default-button-size)); + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: var(--button-border, var(--default-border-color)); + border-radius: var(--border-radius-lg); + cursor: pointer; + background-color: var(--button-bg, var(--island-bg-color)); + color: var(--button-color, var(--color-on-surface)); + font-family: var(--ui-font); + padding: 0; +} +.excalidraw .buttonList label svg, +.excalidraw .buttonList button svg, +.excalidraw .buttonList .zIndexButton svg { + width: var(--button-width, var(--lg-icon-size)); + height: var(--button-height, var(--lg-icon-size)); +} +.excalidraw .buttonList label:hover, +.excalidraw .buttonList button:hover, +.excalidraw .buttonList .zIndexButton:hover { + background-color: var(--button-hover-bg, var(--island-bg-color)); + border-color: var(--button-hover-border, var(--button-border, var(--default-border-color))); + color: var(--button-hover-color, var(--button-color, var(--text-primary-color, inherit))); +} +.excalidraw .buttonList label:active, +.excalidraw .buttonList button:active, +.excalidraw .buttonList .zIndexButton:active { + background-color: var(--button-active-bg, var(--island-bg-color)); + border-color: var(--button-active-border, var(--color-primary-darkest)); +} +.excalidraw .buttonList label.active, +.excalidraw .buttonList button.active, +.excalidraw .buttonList .zIndexButton.active { + background-color: var(--button-selected-bg, var(--color-surface-primary-container)); + border-color: var(--button-selected-border, var(--color-surface-primary-container)); +} +.excalidraw .buttonList label.active:hover, +.excalidraw .buttonList button.active:hover, +.excalidraw .buttonList .zIndexButton.active:hover { + background-color: var(--button-selected-hover-bg, var(--color-surface-primary-container)); +} +.excalidraw .buttonList label.active svg, +.excalidraw .buttonList button.active svg, +.excalidraw .buttonList .zIndexButton.active svg { + color: var(--button-color, var(--color-on-primary-container)); +} +.excalidraw .buttonList label svg, +.excalidraw .buttonList button svg, +.excalidraw .buttonList .zIndexButton svg { + width: var(--default-icon-size); + height: var(--default-icon-size); +} +.excalidraw .App-top-bar { + z-index: var(--zIndex-layerUI); + display: flex; + flex-direction: column; + align-items: center; +} +.excalidraw .App-bottom-bar { + position: absolute; + inset: 0; + --bar-padding: calc(4 * var(--space-factor)); + padding-top: max(var(--bar-padding), var(--sat, 0)); + padding-right: var(--sar, 0); + padding-bottom: var(--sab, 0); + padding-left: var(--sal, 0); + z-index: 4; + display: flex; + align-items: flex-end; + pointer-events: none; +} +.excalidraw .App-bottom-bar > .Island { + width: 100%; + max-width: 100%; + min-width: 100%; + box-sizing: border-box; + max-height: 100%; + display: flex; + flex-direction: column; + pointer-events: var(--ui-pointerEvents); +} +.excalidraw .App-bottom-bar > .Island .panelColumn { + padding: 8px 8px 0; +} +.excalidraw .App-toolbar { + width: 100%; +} +.excalidraw .App-toolbar .eraser.ToolIcon:hover { + --icon-fill-color: #fff; + --keybinding-color: #fff; +} +.excalidraw .App-toolbar .eraser.active { + background-color: var(--color-primary); +} +.excalidraw .App-toolbar-content { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px; +} +.excalidraw .App-toolbar-content .dropdown-menu--mobile { + bottom: 55px; + top: auto; +} +.excalidraw .App-mobile-menu { + width: 100%; + overflow-x: visible; + overflow-y: auto; + box-sizing: border-box; + margin-bottom: var(--bar-padding); +} +.excalidraw .App-menu { + display: grid; + color: var(--icon-fill-color); +} +.excalidraw .shapes-section { + display: flex; + justify-content: center; + pointer-events: none !important; +} +.excalidraw .shapes-section > * { + pointer-events: var(--ui-pointerEvents); +} +.excalidraw .App-menu_top { + grid-template-columns: 1fr 2fr 1fr; + grid-gap: 2rem; + align-items: flex-start; + cursor: default; + pointer-events: none !important; +} +.excalidraw .App-menu_top > * { + pointer-events: var(--ui-pointerEvents); +} +@media (min-width: 1536px) { + .excalidraw .App-menu_top { + grid-template-columns: 1fr 1fr 1fr; + grid-gap: 3rem; + } +} +.excalidraw .App-menu_top > *:first-child { + justify-self: flex-start; +} +.excalidraw .App-menu_top > *:last-child { + justify-self: flex-end; +} +.excalidraw .App-menu_bottom { + position: absolute; + bottom: 1rem; + display: flex; + justify-content: space-between; + align-items: flex-start; + cursor: default; + pointer-events: none !important; + box-sizing: border-box; + padding: 0 1rem; +} +.excalidraw .App-menu_bottom--transition-left section { + width: 185px; +} +.excalidraw .App-menu_bottom section { + display: flex; +} +.excalidraw .App-menu_bottom > *:first-child { + justify-self: flex-start; +} +.excalidraw .App-menu_bottom > *:last-child { + justify-self: flex-end; +} +.excalidraw .App-menu_left { + grid-template-rows: 1fr auto 1fr; + height: 100%; +} +.excalidraw .App-menu_right { + grid-template-rows: 1fr; + height: 100%; +} +.excalidraw .App-menu__left { + overflow-y: auto; + padding: 0.75rem; + width: 12.5rem; + box-sizing: border-box; + position: absolute; +} +.excalidraw .dropdown-select { + height: 1.5rem; + padding: 0; + padding-inline-start: 0.5rem; + padding-inline-end: 1.5rem; + color: var(--icon-fill-color); + background-color: var(--button-gray-1); + border-radius: var(--space-factor); + border: 1px solid var(--button-gray-2); + font-size: 0.8rem; + font-family: inherit; + outline: none; + appearance: none; + background-image: var(--dropdown-icon); + background-repeat: no-repeat; + background-position: right 0.7rem top 50%, 0 0; + background-size: 0.65em auto, 100%; +} +:root[dir='rtl'] .excalidraw .dropdown-select { + background-position: left 0.7rem top 50%, 0 0; +} +.excalidraw .dropdown-select:focus { + box-shadow: 0 0 0 2px var(--focus-highlight-color); +} +.excalidraw .dropdown-select:hover, +.excalidraw .dropdown-select:active { + background-color: var(--button-gray-2); +} +.excalidraw .dropdown-select__language { + height: 2rem; + background-color: var(--island-bg-color); + border-color: var(--default-border-color) !important; + cursor: pointer; +} +.excalidraw .dropdown-select__language:hover { + background-color: var(--island-bg-color); +} +.excalidraw .scroll-back-to-content { + border-radius: var(--border-radius-lg); + background-color: var(--island-bg-color); + color: var(--icon-fill-color); + border: 1px solid var(--default-border-color); + padding: 10px 20px; + position: absolute; + left: 50%; + bottom: 30px; + transform: translate(-50%); + pointer-events: var(--ui-pointerEvents); + font-family: inherit; +} +.excalidraw .scroll-back-to-content:hover { + background-color: var(--button-hover-bg); +} +.excalidraw .scroll-back-to-content:active { + border: 1px solid var(--button-active-border); +} +.excalidraw .help-icon { + display: flex; + justify-content: center; + align-items: center; + padding: 0.625rem; + width: var(--button-width, var(--default-button-size)); + height: var(--button-height, var(--default-button-size)); + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: var(--button-border, var(--default-border-color)); + border-radius: var(--border-radius-lg); + cursor: pointer; + background-color: var(--button-bg, var(--island-bg-color)); + color: var(--button-color, var(--color-on-surface)); + font-family: var(--ui-font); + border: none; + box-shadow: 0 0 0 1px var(--color-surface-lowest); + background-color: var(--color-surface-low); + width: var(--lg-button-size); + height: var(--lg-button-size); +} +.excalidraw .help-icon svg { + width: var(--button-width, var(--lg-icon-size)); + height: var(--button-height, var(--lg-icon-size)); +} +.excalidraw .help-icon:hover { + background-color: var(--button-hover-bg, var(--island-bg-color)); + border-color: var(--button-hover-border, var(--button-border, var(--default-border-color))); + color: var(--button-hover-color, var(--button-color, var(--text-primary-color, inherit))); +} +.excalidraw .help-icon:active { + background-color: var(--button-active-bg, var(--island-bg-color)); + border-color: var(--button-active-border, var(--color-primary-darkest)); +} +.excalidraw .help-icon.active { + background-color: var(--button-selected-bg, var(--color-surface-primary-container)); + border-color: var(--button-selected-border, var(--color-surface-primary-container)); +} +.excalidraw .help-icon.active:hover { + background-color: var(--button-selected-hover-bg, var(--color-surface-primary-container)); +} +.excalidraw .help-icon.active svg { + color: var(--button-color, var(--color-on-primary-container)); +} +.excalidraw .help-icon:active { + box-shadow: 0 0 0 1px var(--color-brand-active); +} +.excalidraw .help-icon svg { + width: var(--lg-icon-size); + height: var(--lg-icon-size); +} +.excalidraw .reset-zoom-button { + font-family: var(--ui-font); +} +.excalidraw .finalize-button { + display: grid; + grid-auto-flow: column; + gap: 0.4em; + margin-top: auto; + margin-bottom: auto; + margin-inline-start: 0.6em; +} +.excalidraw .undo-redo-buttons, +.excalidraw .eraser-buttons { + display: grid; + grid-auto-flow: column; + margin-top: auto; + margin-bottom: auto; + margin-inline-start: 0.6em; +} +.excalidraw--mobile.excalidraw aside { + display: none; +} +.excalidraw--mobile.excalidraw .scroll-back-to-content { + bottom: calc(80px + var(--sab, 0)); + z-index: -1; +} +:root[dir='rtl'] .excalidraw .rtl-mirror { + transform: scaleX(-1); +} +.excalidraw .zen-mode-visibility { + visibility: visible; + opacity: 1; + height: auto; + width: auto; + transition: opacity 0.5s; +} +.excalidraw .zen-mode-visibility.zen-mode-visibility--hidden { + visibility: hidden; + opacity: 0; + height: 0; + width: 0; + transition: opacity 0.5s; +} +.excalidraw .disable-pointerEvents { + pointer-events: none !important; +} +.excalidraw.excalidraw--view-mode .App-menu { + display: flex; + justify-content: space-between; +} +.excalidraw input.is-redacted { + -webkit-text-security: disc; +} +.excalidraw input[type='text'], +.excalidraw textarea:not(.excalidraw-wysiwyg) { + color: var(--text-primary-color); + border: 1.5px solid var(--input-border-color); + padding: 0.75rem; + white-space: nowrap; + border-radius: var(--space-factor); + background-color: var(--input-bg-color); +} +.excalidraw input[type='text']:not(:focus):hover, +.excalidraw textarea:not(.excalidraw-wysiwyg):not(:focus):hover { + border-color: var(--color-brand-hover); +} +.excalidraw input[type='text']:focus, +.excalidraw textarea:not(.excalidraw-wysiwyg):focus { + outline: none; + border-color: var(--color-brand-hover); +} +@media print { + .excalidraw .App-bottom-bar, + .excalidraw .FixedSideContainer, + .excalidraw .layer-ui__wrapper { + display: none; + } +} +.excalidraw ::-webkit-scrollbar { + width: 4px; + height: 3px; +} +.excalidraw select::-webkit-scrollbar { + width: 10px; +} +.excalidraw ::-webkit-scrollbar-thumb { + background: var(--scrollbar-thumb); + border-radius: 10px; +} +.excalidraw ::-webkit-scrollbar-thumb:hover { + background: var(--scrollbar-thumb-hover); +} +.excalidraw ::-webkit-scrollbar-thumb:active { + background: var(--scrollbar-thumb); +} +.excalidraw .mobile-misc-tools-container { + position: absolute; + top: calc(5rem - var(--editor-container-padding)); + right: calc(var(--editor-container-padding) * -1); + display: flex; + flex-direction: column; + border: 1px solid var(--sidebar-border-color); + border-top-left-radius: var(--border-radius-lg); + border-bottom-left-radius: var(--border-radius-lg); + border-right: 0; + overflow: hidden; + background-color: var(--island-bg-color); +} +.excalidraw .mobile-misc-tools-container .ToolIcon__icon { + width: 2rem; + height: 2rem; + border-radius: 0; +} +.excalidraw .mobile-misc-tools-container .default-sidebar-trigger { + border: 0; +} +.excalidraw .App-toolbar--mobile { + overflow: visible; + max-width: 98vw; +} +.excalidraw .App-toolbar--mobile .ToolIcon__keybinding { + display: none; +} +.excalidraw .UserList-Wrapper { + margin: 0; + padding: 0; + border: none; + text-align: left; +} +.excalidraw .UserList-Wrapper legend { + display: block; + font-size: 0.75rem; + font-weight: 400; + margin: 0 0 0.25rem; + padding: 0; +} +.excalidraw .main-menu-trigger { + border: none; + box-shadow: 0 0 0 1px var(--color-surface-lowest); + background-color: var(--color-surface-low); +} +.excalidraw .main-menu-trigger:active { + box-shadow: 0 0 0 1px var(--color-brand-active); +} +.excalidraw .App-mobile-menu, +.excalidraw .App-menu__left { + --button-border: transparent; + --button-bg: var(--color-surface-mid); +} +.excalidraw.theme--dark.excalidraw .App-mobile-menu, +.excalidraw.theme--dark.excalidraw .App-menu__left { + --button-hover-bg: #363541; + --button-bg: var(--color-surface-high); +} +.excalidraw .App-menu__left .buttonList { + padding: 0.25rem 0; +} +.excalidraw .excalidraw__paragraph { + margin: 1rem 0; +} +.excalidraw .Modal__content .excalidraw__paragraph:first-child { + margin-top: 0; +} +.excalidraw .Modal__content .excalidraw__paragraph + .excalidraw__paragraph { + margin-top: 0rem; +} +.ErrorSplash.excalidraw { + min-height: 100vh; + padding: 20px 0; + overflow: auto; + display: flex; + align-items: center; + justify-content: center; + user-select: text; +} +.ErrorSplash.excalidraw .ErrorSplash-messageContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 40px; + background-color: #ffe3e3; + border: 3px solid #c92a2a; +} +.ErrorSplash.excalidraw .ErrorSplash-paragraph { + margin: 15px 0; + max-width: 600px; +} +.ErrorSplash.excalidraw .ErrorSplash-paragraph.align-center { + text-align: center; +} +.ErrorSplash.excalidraw .bigger, +.ErrorSplash.excalidraw .bigger button { + font-size: 1.1em; +} +.ErrorSplash.excalidraw .smaller, +.ErrorSplash.excalidraw .smaller button { + font-size: 0.9em; +} +.ErrorSplash.excalidraw .ErrorSplash-details { + display: flex; + flex-direction: column; + align-items: flex-start; +} +.ErrorSplash.excalidraw .ErrorSplash-details textarea { + width: 100%; + margin: 10px 0; + font-family: Cascadia; + font-size: 0.8em; +} +.excalidraw__embeddable-container .excalidraw__embeddable-container__inner { + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; + border-radius: var(--embeddable-radius); +} +.excalidraw__embeddable-container .excalidraw__embeddable__outer { + width: 100%; + height: 100%; +} +.excalidraw__embeddable-container .excalidraw__embeddable__outer > * { + border-radius: var(--embeddable-radius); +} +.excalidraw__embeddable-container .excalidraw__embeddable-hint { + position: absolute; + z-index: 1; + background: #00000080; + padding: 1rem 1.6rem; + border-radius: 12px; + color: #fff; + font-weight: 700; + letter-spacing: 0.6px; + font-family: Assistant; +} +@font-face { + font-family: Assistant; + src: url('./fonts/Assistant/Assistant-Regular.woff2') format('woff2'); + font-weight: 400; + style: normal; + display: swap; +} +@font-face { + font-family: Assistant; + src: url('./fonts/Assistant/Assistant-Medium.woff2') format('woff2'); + font-weight: 500; + style: normal; + display: swap; +} +@font-face { + font-family: Assistant; + src: url('./fonts/Assistant/Assistant-SemiBold.woff2') format('woff2'); + font-weight: 600; + style: normal; + display: swap; +} +@font-face { + font-family: Assistant; + src: url('./fonts/Assistant/Assistant-Bold.woff2') format('woff2'); + font-weight: 700; + style: normal; + display: swap; +} +.footer-center { + pointer-events: none; + display: flex; + width: 100%; + justify-content: flex-start; + margin-inline-end: 0.6rem; +} +.footer-center > * { + pointer-events: var(--ui-pointerEvents); +} +.excalidraw .ExcalidrawLogo { + --logo-icon--xs: 2rem; + --logo-text--xs: 1.5rem; + --logo-icon--small: 2.5rem; + --logo-text--small: 1.75rem; + --logo-icon--normal: 3rem; + --logo-text--normal: 2.2rem; + --logo-icon--large: 90px; + --logo-text--large: 65px; + display: flex; + align-items: center; +} +.excalidraw .ExcalidrawLogo svg { + flex: 0 0 auto; +} +.excalidraw .ExcalidrawLogo .ExcalidrawLogo-icon { + width: auto; + color: var(--color-logo-icon); +} +.excalidraw .ExcalidrawLogo .ExcalidrawLogo-text { + margin-left: 0.75rem; + width: auto; + color: var(--color-logo-text); +} +.excalidraw .ExcalidrawLogo.is-xs .ExcalidrawLogo-icon { + height: var(--logo-icon--xs); +} +.excalidraw .ExcalidrawLogo.is-xs .ExcalidrawLogo-text { + height: var(--logo-text--xs); +} +.excalidraw .ExcalidrawLogo.is-small .ExcalidrawLogo-icon { + height: var(--logo-icon--small); +} +.excalidraw .ExcalidrawLogo.is-small .ExcalidrawLogo-text { + height: var(--logo-text--small); +} +.excalidraw .ExcalidrawLogo.is-normal .ExcalidrawLogo-icon { + height: var(--logo-icon--normal); +} +.excalidraw .ExcalidrawLogo.is-normal .ExcalidrawLogo-text { + height: var(--logo-text--normal); +} +.excalidraw .ExcalidrawLogo.is-large .ExcalidrawLogo-icon { + height: var(--logo-icon--large); +} +.excalidraw .ExcalidrawLogo.is-large .ExcalidrawLogo-text { + height: var(--logo-text--large); +} +.excalidraw .excalifont { + font-family: Excalifont, Xiaolai; +} +.excalidraw .welcome-screen-decor { + pointer-events: none; + color: var(--color-gray-40); +} +.excalidraw .welcome-screen-decor a { + --color: var(--color-primary); + color: var(--color); + text-decoration: none; + margin-bottom: -6px; +} +.excalidraw.theme--dark .welcome-screen-decor { + color: var(--color-gray-60); +} +@media (max-height: 599px) { + .excalidraw .welcome-screen-decor-hint { + display: none !important; + } +} +@media (max-width: 1024px), (max-width: 800px) { + .excalidraw .welcome-screen-decor-hint .welcome-screen-decor--help, + .excalidraw .welcome-screen-decor-hint .welcome-screen-decor--menu { + display: none; + } +} +.excalidraw .welcome-screen-decor-hint--help { + display: flex; + position: absolute; + right: 0; + bottom: 100%; +} +:root[dir='rtl'] .excalidraw .welcome-screen-decor-hint--help { + left: 0; + right: auto; +} +.excalidraw .welcome-screen-decor-hint--help svg { + margin-top: 0.5rem; + width: 85px; + height: 71px; + transform: scaleX(-1) rotate(80deg); +} +:root[dir='rtl'] .excalidraw .welcome-screen-decor-hint--help svg { + transform: rotate(80deg); +} +.excalidraw .welcome-screen-decor-hint--toolbar { + position: absolute; + top: 100%; + left: 50%; + transform: translate(-50%); + margin-top: 2.5rem; + display: flex; + align-items: baseline; +} +.excalidraw .welcome-screen-decor-hint--toolbar .welcome-screen-decor-hint__label { + width: 120px; + position: relative; + top: -0.5rem; +} +.excalidraw .welcome-screen-decor-hint--toolbar svg { + width: 38px; + height: 78px; +} +:root[dir='rtl'] .excalidraw .welcome-screen-decor-hint--toolbar svg { + transform: scaleX(-1); +} +.excalidraw .welcome-screen-decor-hint--menu { + position: absolute; + width: 320px; + font-size: 1rem; + top: 100%; + margin-top: 0.25rem; + margin-inline-start: 0.6rem; + display: flex; + align-items: flex-end; + gap: 0.5rem; +} +.excalidraw .welcome-screen-decor-hint--menu svg { + width: 41px; + height: 94px; +} +:root[dir='rtl'] .excalidraw .welcome-screen-decor-hint--menu svg { + transform: scaleX(-1); +} +@media (max-width: 860px) { + .excalidraw .welcome-screen-decor-hint--menu .welcome-screen-decor-hint__label { + max-width: 160px; + } +} +.excalidraw .welcome-screen-center { + display: flex; + flex-direction: column; + gap: 2rem; + justify-content: center; + align-items: center; + position: absolute; + pointer-events: none; + inset: 1rem; +} +.excalidraw .welcome-screen-center__logo { + display: flex; + align-items: center; + column-gap: 0.75rem; + font-size: 2.25rem; +} +.excalidraw .welcome-screen-center__heading { + font-size: 1.125rem; + text-align: center; +} +.excalidraw .welcome-screen-menu { + display: flex; + flex-direction: column; + gap: 2px; + justify-content: center; + align-items: center; +} +.excalidraw .welcome-screen-menu-item { + box-sizing: border-box; + pointer-events: var(--ui-pointerEvents); + color: var(--color-gray-50); + font-size: 0.875rem; + width: 100%; + min-width: 300px; + max-width: 400px; + display: grid; + align-items: center; + justify-content: space-between; + background: none; + border: 1px solid transparent; + padding: 0.75rem; + border-radius: var(--border-radius-md); + grid-template-columns: calc(var(--default-icon-size) + 0.5rem) 1fr 3rem; +} +.excalidraw .welcome-screen-menu-item__text { + display: flex; + align-items: center; + margin-right: auto; + text-align: left; + column-gap: 0.5rem; +} +.excalidraw .welcome-screen-menu-item__icon { + width: var(--default-icon-size); + height: var(--default-icon-size); +} +.excalidraw .welcome-screen-menu-item__shortcut { + margin-left: auto; + color: var(--color-gray-40); + font-size: 0.75rem; +} +.excalidraw .welcome-screen-menu-item:hover { + text-decoration: none; + background: var(--button-hover-bg); +} +.excalidraw .welcome-screen-menu-item:hover .welcome-screen-menu-item__shortcut, +.excalidraw .welcome-screen-menu-item:hover .welcome-screen-menu-item__icon, +.excalidraw .welcome-screen-menu-item:hover .welcome-screen-menu-item__text { + color: var(--color-gray-100); +} +.excalidraw .welcome-screen-menu-item:active { + background: var(--button-hover-bg); + border-color: var(--color-brand-active); +} +.excalidraw .welcome-screen-menu-item:active .welcome-screen-menu-item__shortcut, +.excalidraw .welcome-screen-menu-item:active .welcome-screen-menu-item__icon, +.excalidraw .welcome-screen-menu-item:active .welcome-screen-menu-item__text { + color: var(--color-gray-100); +} +.excalidraw.theme--dark .welcome-screen-menu-item, +.excalidraw.theme--dark .welcome-screen-menu-item__shortcut { + color: var(--color-gray-60); +} +.excalidraw.theme--dark .welcome-screen-menu-item:hover { + background-color: var(--color-surface-low); +} +.excalidraw.theme--dark .welcome-screen-menu-item:hover .welcome-screen-menu-item__icon, +.excalidraw.theme--dark .welcome-screen-menu-item:hover .welcome-screen-menu-item__shortcut, +.excalidraw.theme--dark .welcome-screen-menu-item:hover .welcome-screen-menu-item__text, +.excalidraw.theme--dark .welcome-screen-menu-item:active .welcome-screen-menu-item__icon, +.excalidraw.theme--dark .welcome-screen-menu-item:active .welcome-screen-menu-item__shortcut, +.excalidraw.theme--dark .welcome-screen-menu-item:active .welcome-screen-menu-item__text { + color: var(--color-gray-10); +} +@media (max-height: 599px) { + .excalidraw .welcome-screen-center { + margin-top: 4rem; + } +} +@media (min-height: 600px) and (max-height: 900px) { + .excalidraw .welcome-screen-center { + margin-top: 8rem; + } +} +@media (max-height: 500px), (max-width: 320px) { + .excalidraw .welcome-screen-center { + display: none; + } +} +.excalidraw .collab-button { + --button-bg: var(--color-primary); + --button-color: var(--color-surface-lowest); + --button-border: var(--color-primary); + --button-width: var(--lg-button-size); + --button-height: var(--lg-button-size); + --button-hover-bg: var(--color-primary-darker); + --button-hover-border: var(--color-primary-darker); + --button-active-bg: var(--color-primary-darker); + box-shadow: 0 0 0 1px var(--color-surface-lowest); + flex-shrink: 0; +} +.excalidraw .collab-button.active.active { + background-color: #0fb884; + border-color: #0fb884; +} +.excalidraw .collab-button.active.active svg { + color: #fff; +} +.excalidraw .collab-button.active.active:hover, +.excalidraw .collab-button.active.active:active { + background-color: #0fb884; + border-color: #0fb884; +} +.excalidraw .CollabButton.is-collaborating { + background-color: var(--button-special-active-bg-color); +} +.excalidraw .CollabButton.is-collaborating .ToolIcon__icon svg, +.excalidraw .CollabButton.is-collaborating .ToolIcon__label { + color: var(--icon-green-fill-color); +} +.excalidraw .CollabButton-collaborators { + min-width: 1em; + min-height: 1em; + line-height: 1; + position: absolute; + bottom: -5px; + padding: 3px; + border-radius: 50%; + background-color: #b2f2bb; + color: #2b8a3e; + font-size: 0.6rem; + font-family: Cascadia; +} +:root[dir='ltr'] .excalidraw .CollabButton-collaborators { + right: -5px; +} +:root[dir='rtl'] .excalidraw .CollabButton-collaborators { + left: -5px; +} diff --git a/src/apps/draw/index.css b/src/apps/draw/index.css new file mode 100644 index 0000000..7d5ff65 --- /dev/null +++ b/src/apps/draw/index.css @@ -0,0 +1,4 @@ +@import 'tailwindcss'; +/* @import '@excalidraw/excalidraw/index.css'; */ +/* @import './assets/excalidraw.css'; */ + diff --git a/src/apps/draw/libs.ts b/src/apps/draw/libs.ts new file mode 100644 index 0000000..c1af2db --- /dev/null +++ b/src/apps/draw/libs.ts @@ -0,0 +1,8 @@ +import { Bootstrap } from './Bootstrap'; + +type RenderProps = { + renderRoot: HTMLElement; +}; +export const render = ({ renderRoot }: RenderProps) => { + Bootstrap(renderRoot); +}; diff --git a/src/apps/draw/main.tsx b/src/apps/draw/main.tsx new file mode 100644 index 0000000..4b00bb6 --- /dev/null +++ b/src/apps/draw/main.tsx @@ -0,0 +1,4 @@ +import { render } from './Bootstrap'; +import './index.css'; +// import '@excalidraw/excalidraw/index.css'; +render({ renderRoot: document.getElementById('root')! }); diff --git a/src/apps/draw/modules/hash-file.ts b/src/apps/draw/modules/hash-file.ts new file mode 100644 index 0000000..4e9d327 --- /dev/null +++ b/src/apps/draw/modules/hash-file.ts @@ -0,0 +1,32 @@ +import MD5 from 'crypto-js/md5'; +export const hashFile = (file: File): Promise => { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + + reader.onload = async (event) => { + try { + const content = event.target?.result; + if (content instanceof ArrayBuffer) { + const contentString = new TextDecoder().decode(content); + const hashHex = MD5(contentString).toString(); + resolve(hashHex); + } else if (typeof content === 'string') { + const hashHex = MD5(content).toString(); + resolve(hashHex); + } else { + throw new Error('Invalid content type'); + } + } catch (error) { + console.error('hashFile error', error); + reject(error); + } + }; + + reader.onerror = (error) => { + reject(error); + }; + + // 读取文件为 ArrayBuffer + reader.readAsArrayBuffer(file); + }); +}; diff --git a/src/apps/draw/modules/query.ts b/src/apps/draw/modules/query.ts new file mode 100644 index 0000000..f3f1330 --- /dev/null +++ b/src/apps/draw/modules/query.ts @@ -0,0 +1,7 @@ +import { query } from '@/modules/query'; +import { QueryMark } from '@/query/query-mark/query-mark'; + +export const queryMark = new QueryMark({ + query: query, + markType: 'excalidraw', +}); diff --git a/src/apps/draw/modules/to-file.ts b/src/apps/draw/modules/to-file.ts new file mode 100644 index 0000000..019540d --- /dev/null +++ b/src/apps/draw/modules/to-file.ts @@ -0,0 +1,112 @@ +const getFileExtension = (filename: string) => { + return filename.split('.').pop(); +}; +const getFileType = (extension: string) => { + switch (extension) { + case 'js': + return 'text/javascript'; + case 'css': + return 'text/css'; + case 'html': + return 'text/html'; + case 'json': + return 'application/json'; + case 'png': + return 'image/png'; + case 'jpg': + return 'image/jpeg'; + case 'jpeg': + return 'image/jpeg'; + case 'gif': + return 'image/gif'; + case 'svg': + return 'image/svg+xml'; + case 'webp': + return 'image/webp'; + case 'ico': + return 'image/x-icon'; + default: + return 'text/plain'; + } +}; +const checkIsBase64 = (content: string) => { + return content.startsWith('data:'); +}; +/** + * 获取文件的目录和文件名 + * @param filename 文件名 + * @returns 目录和文件名 + */ +export const getDirectoryAndName = (filename: string) => { + if (!filename) { + return null; + } + if (filename.startsWith('.')) { + return null; + } else { + filename = filename.replace(/^\/+/, ''); // Remove all leading slashes + } + const hasDirectory = filename.includes('/'); + if (!hasDirectory) { + return { directory: '', name: filename }; + } + const parts = filename.split('/'); + const name = parts.pop()!; // Get the last part as the file name + const directory = parts.join('/'); // Join the remaining parts as the directory + return { directory, name }; +}; +/** + * 把字符串转为文件流,并返回文件流,根据filename的扩展名,自动设置文件类型. + * 当不是文本类型,自动需要把base64的字符串转为blob + * @param content 字符串 + * @param filename 文件名 + * @returns 文件流 + */ +export const toFile = (content: string, filename: string) => { + // 如果文件名是 a/d/a.js 格式的,则需要把d作为目录,a.js作为文件名 + const directoryAndName = getDirectoryAndName(filename); + if (!directoryAndName) { + throw new Error('Invalid filename'); + } + const { name } = directoryAndName; + const extension = getFileExtension(name); + if (!extension) { + throw new Error('Invalid filename'); + } + const isBase64 = checkIsBase64(content); + const type = getFileType(extension); + + if (isBase64) { + // Decode base64 string + let base64Data = content.split(',')[1]; // Remove the data URL prefix + const byteCharacters = atob(base64Data); + const byteNumbers = new Array(byteCharacters.length); + for (let i = 0; i < byteCharacters.length; i++) { + byteNumbers[i] = byteCharacters.charCodeAt(i); + } + const byteArray = new Uint8Array(byteNumbers); + const blob = new Blob([byteArray], { type }); + return new File([blob], filename, { type }); + } else { + const blob = new Blob([content], { type }); + return new File([blob], filename, { type }); + } +}; + +/** + * 把字符串转为文本文件 + * @param content 字符串 + * @param filename 文件名 + * @returns 文件流 + */ +export const toTextFile = (content: string = 'keep directory exist', filename: string = 'keep.txt') => { + const file = toFile(content, filename); + return file; +}; + +export const downloadFile = (file: File) => { + const a = document.createElement('a'); + a.href = URL.createObjectURL(file); + a.download = file.name; + a.click(); +}; diff --git a/src/apps/draw/modules/upload.ts b/src/apps/draw/modules/upload.ts new file mode 100644 index 0000000..7ca82d9 --- /dev/null +++ b/src/apps/draw/modules/upload.ts @@ -0,0 +1,57 @@ +// import NProgress from 'nprogress'; +import { Id, toast } from 'react-toastify'; +import { toastLogin } from '@/modules/toast/ToastLogin'; +import { uploadFileChunked, UploadProgress } from '@/query/query-upload/query-upload'; + +export type ConvertOpts = { + appKey?: string; + version?: string; + username?: string; + directory?: string; + isPublic?: boolean; + filename?: string; + /** + * 是否不检查应用文件, 默认 true,默认不检测 + */ + noCheckAppFiles?: boolean; +}; + +export const uploadChunkV2 = async (file: File, opts: ConvertOpts) => { + const filename = opts.filename || file.name; + const token = localStorage.getItem('token'); + if (!token) { + console.log('uploadChunk token', token); + toastLogin(); + return; + } + let loaded: Id; + const uploadProgress = new UploadProgress({ + onStart: function () { + // NProgress.start(); + loaded = toast.loading(`${filename} 上传中...`); + }, + onDone: () => { + // NProgress.done(); + toast.dismiss(loaded); + }, + onProgress: (progress, data) => { + // NProgress.set(progress); + // console.log('uploadChunk progress', progress, data); + toast.update(loaded, { + render: `${filename} 上传中... ${progress.toFixed(2)}%`, + isLoading: true, + autoClose: false, + }); + }, + }); + + const result = await uploadFileChunked(file, opts, { + uploadProgress, + token, + createEventSource: (url: string, searchParams: URLSearchParams) => { + return new EventSource(url + '?' + searchParams.toString()); + }, + FormDataFn: FormData, + }); + return result; +}; diff --git a/src/apps/draw/pages/Draw.tsx b/src/apps/draw/pages/Draw.tsx new file mode 100644 index 0000000..25c1dab --- /dev/null +++ b/src/apps/draw/pages/Draw.tsx @@ -0,0 +1,41 @@ +import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; +import { createMarkStore, store, useMarkStore } from '../store'; +console.log('store', store); +import { StoreContextProvider } from '@kevisual/store/react'; +import { LineChart } from 'lucide-react'; +import { useShallow } from 'zustand/shallow'; +import { Core } from './core/Excalidraw'; + +export const Draw = ({ id, onClose }: { id: string; onClose: () => void }) => { + useLayoutEffect(() => { + // @ts-ignore + window.EXCALIDRAW_ASSET_PATH = 'https://esm.sh/@excalidraw/excalidraw@0.18.0/dist/prod/'; + // window.EXCALIDRAW_ASSET_PATH = '/'; + }, []); + return ( + + + + ); +}; + +type ExcaliDrawComponentProps = { + /** 修改的id */ + id: string; + /** 关闭 */ + onClose: () => void; +}; +export const ExcaliDrawComponent = ({ id, onClose }: ExcaliDrawComponentProps) => { + const store = useMarkStore( + useShallow((state) => { + return { + id: state.id, + setId: state.setId, + getMark: state.getMark, + }; + }), + ); + + const memo = useMemo(() => , [id, onClose]); + return <>{memo}; +}; diff --git a/src/apps/draw/pages/core/Excalidraw.tsx b/src/apps/draw/pages/core/Excalidraw.tsx new file mode 100644 index 0000000..4522afd --- /dev/null +++ b/src/apps/draw/pages/core/Excalidraw.tsx @@ -0,0 +1,284 @@ +import { Excalidraw } from '@excalidraw/excalidraw'; + +import { useEffect, useRef, useState } from 'react'; +import { BinaryFileData, ExcalidrawImperativeAPI } from '@excalidraw/excalidraw/types'; +import { Languages, LogOut, Save } from 'lucide-react'; +import { MainMenu, Sidebar, Footer } from '@excalidraw/excalidraw'; +import { throttle } from 'lodash-es'; +import { useMarkStore, store as StoreManager } from '../../store'; +import { useShallow } from 'zustand/shallow'; +import { useListenLang } from './hooks/listen-lang'; +import { toast } from 'react-toastify'; +import { hashFile } from '../../modules/hash-file'; +import { uploadChunkV2 } from '../../modules/upload'; +import { downloadFile, toFile } from '../../modules/to-file'; + +type ImageResource = {}; +export const ImagesResources = (props: ImageResource) => { + const [images, setImages] = useState([]); + useEffect(() => { + initImages(); + }, []); + const refFiles = useRef({}); + const { api } = useMarkStore( + useShallow((state) => { + return { + api: state.api, + }; + }), + ); + const initImages = async () => { + if (!api) return; + const res = api.getFiles(); + console.log('res from ImageResource', res); + setImages(Object.keys(res)); + refFiles.current = res; + }; + return ( +
+ {images.map((image) => { + const isUrl = refFiles.current[image]?.dataURL?.startsWith?.('http'); + const dataURL = refFiles.current[image]?.dataURL; + return ( +
+ image +
+ {isUrl &&
{dataURL}
} +
{refFiles.current[image]?.name}
+
{refFiles.current[image]?.type}
+
{refFiles.current[image]?.id}
+
+
+ ); + })} +
+ ); +}; + +export const ExcalidrawExpand = (props: { onClose: () => void }) => { + const { onClose } = props; + const [docked, setDocked] = useState(false); + const store = useMarkStore( + useShallow((state) => { + return { + loading: state.loading, + updateMark: state.updateMark, + api: state.api, + }; + }), + ); + const { lang, setLang, isZh } = useListenLang(); + return ( + <> + {store.loading && ( +
+
+
+ )} + + { + store.updateMark(); + }}> +
+ + {isZh ? '保存' : 'Save'} +
+
+ + + + + {/* {}} isCollaborating={false} /> */} + {/* */} + + + + + + + + + + { + const newLang = lang === 'zh-CN' ? 'en' : 'zh-CN'; + setLang(newLang); + }}> +
+ + {isZh ? 'English' : '中文'} +
+
+ {onClose && ( + <> + + +
+ + {isZh ? '退出当前画布' : 'Exit current canvas'} +
+
+ + )} +
+ + + + {} + Tab two! + + Image Resources + Two + + + + +
+ + {isZh ? '图片资源' : 'Image Resources'} + +
+ + ); +}; +type CoreProps = { + onClose: () => void; + id: string; +}; +export const Core = ({ onClose, id }: CoreProps) => { + const ref = useRef(null); + const { lang } = useListenLang(); + const uploadLoadingRef = useRef(false); + const store = useMarkStore( + useShallow((state) => { + return { + id: state.id, + loading: state.loading, + getMark: state.getMark, + api: state.api, + setApi: state.setApi, + getCache: state.getCache, + updateMark: state.updateMark, + }; + }), + ); + const cacheDataRef = useRef<{ + elements: { [key: string]: number }; + filesObject: Record; + }>({ + elements: {}, + filesObject: {}, + }); + useEffect(() => { + id && store.getMark(id); + }, [id]); + const onSave = throttle(async (elements, appState, filesObject) => { + const { elements: cacheElements, filesObject: cacheFiles } = cacheDataRef.current; + const _store = StoreManager.getStore(id); + if (!_store) { + console.error('Store not found for id:', id); + return; + } + const { setCache, loading } = _store.getState(); + if (loading) { + return; + } + if (uploadLoadingRef.current) return; + let isChange = false; + const elementsObj = elements.reduce((acc, e) => { + acc[e.id] = e.version; + return acc; + }, {}); + if (JSON.stringify(elementsObj) !== JSON.stringify(cacheElements)) { + isChange = true; + } + if (JSON.stringify(cacheFiles) !== JSON.stringify(filesObject)) { + isChange = true; + const files = Object.values(filesObject) as any as BinaryFileData[]; + uploadLoadingRef.current = true; + for (const file of files) { + if (file.dataURL.startsWith('data')) { + const _file = toFile(file.dataURL, file.id); + const res = (await uploadChunkV2(_file, { + filename: file.id, + directory: id, + })) as any; + if (res.code === 200) { + toast.success('上传图片成功'); + } else { + toast.error('上传图片失败'); + } + + const [upload] = res.data?.upload || []; + if (upload) { + filesObject[file.id] = { + ...filesObject[file.id], + dataURL: upload.path, + }; + } else { + toast.error('上传图片失败'); + } + } else { + continue; + } + } + uploadLoadingRef.current = false; + } + console.log('onSave', elements, appState, filesObject, 'isChange', isChange); + if (!isChange) { + return; + } + cacheDataRef.current = { elements: elementsObj, filesObject }; + setCache({ + data: { + elements, + filesObject, + }, + }); + }, 2000); + return ( + { + if (store.loading) return; + onSave(elements, appState, filesObject); + }} + langCode={lang || 'zh-CN'} + renderTopRightUI={() => { + return
; + }} + excalidrawAPI={async (api) => { + ref.current = api; + store.setApi(api); + const cache = await store.getCache(id, true); + if (!cache) return; + const elementsObj = cache.elements.reduce((acc, e) => { + acc[e.id] = e.version; + return acc; + }, {}); + cacheDataRef.current = { + elements: elementsObj, + filesObject: cache.filesObject, + }; + }} + generateIdForFile={async (file) => { + // return dayjs().format('YYYY-MM-DD-HH-mm-ss') + '.' + file.type.split('/')[1]; + const hash = await hashFile(file); + console.log('hash', hash, 'filetype', file.type); + const fileId = hash + '.' + file.type.split('/')[1]; + console.log('fileId', fileId); + + return fileId; + }}> + +
+ ); +}; diff --git a/src/apps/draw/pages/core/hooks/listen-lang.ts b/src/apps/draw/pages/core/hooks/listen-lang.ts new file mode 100644 index 0000000..b182a72 --- /dev/null +++ b/src/apps/draw/pages/core/hooks/listen-lang.ts @@ -0,0 +1,29 @@ +import { useEffect, useState } from 'react'; + +export const useListenLang = () => { + const [lang, setLang] = useState('zh-CN'); + useEffect(() => { + const lang = localStorage.getItem('excalidrawLang'); + if (lang) { + setLang(lang); + } + // 监听 localStorage中excalidrawLang的变化 + const onStorage = (e: StorageEvent) => { + if (e.key === 'excalidrawLang') { + e.newValue && setLang(e.newValue); + } + }; + window.addEventListener('storage', onStorage); + return () => { + window.removeEventListener('storage', onStorage); + }; + }, []); + return { + lang, + setLang: (lang: string) => { + // setLang(lang); + localStorage.setItem('excalidrawLang', lang); + }, + isZh: lang === 'zh-CN', + }; +}; diff --git a/src/apps/draw/pages/core/hooks/listen-library.ts b/src/apps/draw/pages/core/hooks/listen-library.ts new file mode 100644 index 0000000..46ca735 --- /dev/null +++ b/src/apps/draw/pages/core/hooks/listen-library.ts @@ -0,0 +1,30 @@ +import { useEffect } from 'react'; + +export const useListenLibrary = () => { + useEffect(() => { + addLibraryItem(); + }, []); + + const addLibraryItem = async () => { + const hash = window.location.hash; // 获取哈希值 + const addLibrary = hash.split('addLibrary=')[1]; + if (!addLibrary || addLibrary === 'undefined') { + return; + } + const token = hash.split('token=')[1]; + console.log('addLibrary', addLibrary, token); + const _fetchURL = decodeURIComponent(addLibrary); + const fetchURL = _fetchURL.split('&')[0]; + + console.log('fetchURL', fetchURL); + const res = await fetch(fetchURL, { + method: 'GET', + mode: 'cors', + }); + const data = await res.json(); + console.log('data', data); + }; + return { + addLibraryItem, + }; +}; diff --git a/src/apps/draw/store/index.ts b/src/apps/draw/store/index.ts new file mode 100644 index 0000000..dd83bf3 --- /dev/null +++ b/src/apps/draw/store/index.ts @@ -0,0 +1,215 @@ +import { StoreManager } from '@kevisual/store'; +import { useContextKey } from '@kevisual/store/context'; +import { StateCreator, StoreApi, UseBoundStore } from 'zustand'; +import { queryMark } from '../modules/query'; +import { useStore, BoundStore } from '@kevisual/store/react'; +import { createStore, set as setCache, get as getCache } from 'idb-keyval'; +import { OrderedExcalidrawElement } from '@excalidraw/excalidraw/element/types'; +import { toast } from 'react-toastify'; +import { BinaryFileData, ExcalidrawImperativeAPI } from '@excalidraw/excalidraw/types'; +export const cacheStore = createStore('excalidraw-store', 'excalidraw'); + +export const store = useContextKey('store', () => { + return new StoreManager(); +}); + +type MarkStore = { + id: string; + setId: (id: string) => void; + mark: any; + setMark: (mark: any) => void; + info: any; + setInfo: (info: any) => void; + getList: () => Promise; + list: any[]; + setList: (list: any[]) => void; + getMark: (markId: string) => Promise; + updateMark: () => Promise; + getCache: ( + id: string, + updateApiData?: boolean, + ) => Promise< + | { + elements: OrderedExcalidrawElement[]; + filesObject: Record; + } + | undefined + >; + setCache: (cache: any, version?: number) => Promise; + loading: boolean; + setLoading: (loading: boolean) => void; + // excalidraw + + api: ExcalidrawImperativeAPI | null; + setApi: (api: ExcalidrawImperativeAPI) => void; +}; +export const createMarkStore: StateCreator = (set, get, store) => { + return { + id: '', + setId: (id: string) => set(() => ({ id })), + mark: null, + setMark: (mark: any) => set(() => ({ mark })), + loading: true, + setLoading: (loading: boolean) => set(() => ({ loading })), + info: null, + setCache: async (cache: any, version?: number) => { + const { id, mark } = get(); + console.log('cacheData setCache ,id', cache, id); + if (!id) { + return; + } + const cacheData = (await getCache(`${id}`, cacheStore)) || {}; + await setCache( + `${id}`, + { + ...cacheData, + ...cache, + data: { + ...cacheData?.data, + ...cache?.data, + }, + version: version || mark?.version || 0, + }, + cacheStore, + ); + }, + updateMark: async () => { + const { id } = get(); + if (!id) { + return; + } + + const cacheData = await getCache(id, cacheStore); + let mark = cacheData || {}; + if (!mark) { + return; + } + const { data } = mark; + const { elements, filesObject } = data; + console.log('updateMark', elements, filesObject); + const res = await queryMark.updateMark({ id, data }); + if (res.code === 200) { + set(() => ({ mark: res.data })); + toast.success('更新成功'); + get().setCache({}, res.data!.version); + } + }, + getCache: async (id: string, updateApiData?: boolean) => { + if (!id) { + return; + } + // 获取缓存 + let cacheData = (await getCache(`${id}`, cacheStore)) || { data: { elements: [], filesObject: {} } }; + console.log('getCache', id, cacheData); + if (cacheData) { + if (updateApiData) { + const api = get().api; + if (api) { + const files = Object.values(cacheData.data.filesObject || {}) as BinaryFileData[]; + api.addFiles(files || []); + api.updateScene({ + elements: [...(cacheData.data?.elements || [])], + appState: {}, + }); + } + } + } + + return { + elements: cacheData.data.elements || [], + filesObject: cacheData.data.filesObject || {}, + }; + }, + setInfo: (info: any) => set(() => ({ info })), + getList: async () => { + const res = await queryMark.getMarkList({ page: 1, pageSize: 10 }); + console.log(res); + }, + list: [], + setList: (list: any[]) => set(() => ({ list })), + getMark: async (markId: string) => { + set(() => ({ loading: true, id: markId })); + const toastId = toast.loading(`获取数据中...`); + const now = new Date().getTime(); + const cacheData = await getCache(markId, cacheStore); + const checkVersion = await queryMark.checkVersion(markId, cacheData?.version); + if (checkVersion) { + const res = await queryMark.getMark(markId); + if (res.code === 200) { + set(() => ({ + mark: res.data, + id: markId, + })); + const mark = res.data!; + const excalidrawData = mark.data || {}; + await get().setCache({ + data: { + elements: excalidrawData.elements, + filesObject: excalidrawData.filesObject, + }, + version: mark.version, + }); + get().getCache(markId, true); + } else { + toast.error(res.message || '获取数据失败'); + } + } + + const end = new Date().getTime(); + const getTime = end - now; + if (getTime < 2 * 1000) { + await new Promise((resolve) => setTimeout(resolve, 2 * 1000 - getTime)); + } + toast.dismiss(toastId); + set(() => ({ loading: false })); + }, + api: null, + setApi: (api: ExcalidrawImperativeAPI) => set(() => ({ api })), + }; +}; + +export const useMarkStore = useStore as BoundStore; + +export const fileDemo = { + abc: { + dataURL: 'https://kevisual.xiongxiao.me/root/center/panda.png' as any, + // @ts-ignore + id: 'abc', + name: 'test2.png', + type: 'image/png', + }, +}; +export const demoElements: OrderedExcalidrawElement[] = [ + { + id: '1', + type: 'image', + x: 100, + y: 100, + width: 100, + height: 100, + fileId: 'abc' as any, + version: 2, + versionNonce: 28180243, + index: 'a0' as any, + isDeleted: false, + fillStyle: 'solid', + strokeWidth: 2, + strokeStyle: 'solid', + roughness: 1, + opacity: 100, + angle: 0, + strokeColor: '#1e1e1e', + backgroundColor: 'transparent', + seed: 1, + groupIds: [], + frameId: null, + roundness: null, + boundElements: [], + updated: 1743219351869, + link: null, + locked: false, + status: 'pending', + scale: [1, 1], + crop: null, + }, +]; diff --git a/src/apps/draw/vite-env.d.ts b/src/apps/draw/vite-env.d.ts new file mode 100644 index 0000000..d68a84f --- /dev/null +++ b/src/apps/draw/vite-env.d.ts @@ -0,0 +1,6 @@ +/// +type SimpleObject = { + [key: string | number]: any; +}; + +declare let BASE_NAME: string; \ No newline at end of file diff --git a/src/apps/mark/manager/Manager.tsx b/src/apps/mark/manager/Manager.tsx new file mode 100644 index 0000000..ba29499 --- /dev/null +++ b/src/apps/mark/manager/Manager.tsx @@ -0,0 +1,331 @@ +import { useManagerStore } from './store'; +import { useEffect, useMemo, useState } from 'react'; +import { useShallow } from 'zustand/shallow'; +import { ManagerProvider } from './Provider'; +import { ChevronDown, X, Edit, Plus, Search, Trash, Menu as MenuIcon, MenuSquare } from 'lucide-react'; +import dayjs from 'dayjs'; +import { EditMark as EditMarkComponent } from './edit/Edit'; +import { toast } from 'react-toastify'; +import clsx from 'clsx'; +import { Controller, useForm } from 'react-hook-form'; +import { IconButton } from '@/components/a/button'; +import { MarkType } from '@/query/query-mark/query-mark'; +import { Menu } from '@/components/a/menu'; +import { MarkTypes } from './constant'; +type ManagerProps = { + showSearch?: boolean; + showAdd?: boolean; + onClick?: (data?: any, e?: Event) => void; + markType?: MarkType; + showSelect?: boolean; +}; +export { useManagerStore }; +export const Manager = (props: ManagerProps) => { + const { showSearch = true, showAdd = false, onClick, showSelect = true } = props; + + const { control } = useForm({ defaultValues: { search: '' } }); + const { list, init, setCurrentMarkId, currentMarkId, markData, deleteMark, getMark, setMarkData, pagination, setPagination, getList, search, setSearch } = + useManagerStore( + useShallow((state) => { + return { + list: state.list, + init: state.init, + markData: state.markData, + currentMarkId: state.currentMarkId, + setCurrentMarkId: state.setCurrentMarkId, + deleteMark: state.deleteMark, + getMark: state.getMark, + setMarkData: state.setMarkData, + pagination: state.pagination, + setPagination: state.setPagination, + search: state.search, + setSearch: state.setSearch, + getList: state.getList, + }; + }), + ); + + const handleMenuItemClick = (option: string) => { + console.log('option', option); + init(option as any); + }; + + useEffect(() => { + const url = new URL(window.location.href); + let markType = url.searchParams.get('markType') || ''; + if (!markType && props.markType) { + markType = props.markType; + } + init((markType as any) || 'md'); + }, []); + useEffect(() => { + if (search) { + getList(); + } else if (pagination.current > 1) { + getList(); + } + }, [pagination.current, search]); + const onEditMark = async (markId: string) => { + setCurrentMarkId(markId); + const res = await getMark(markId); + console.log('mark', res); + if (res.code === 200) { + setMarkData(res.data!); + } + }; + const onDeleteMark = async (markId: string) => { + const res = await deleteMark(markId); + if (res.code === 200) { + toast.success('删除成功'); + } + }; + + return ( +
+
+
+ ( +
+ { + if (event.key === 'Enter') { + setSearch(field.value); + if (!field.value) { + getList(); + } + } + }} + /> +
+ setSearch(field.value)} /> +
+
+ )} + /> +
+
+ {showSelect && ( + <> + { + return { label: item, value: item }; + })} + onSelect={handleMenuItemClick}> + + + + )} + + {markData && ( + + )} +
+
+
+ {list.map((item, index) => { + const isCurrent = item.id === currentMarkId; + return ( +
{ + onClick?.(item, e as any); + e.stopPropagation(); + e.preventDefault(); + }}> +
+
{item.title}
+
+ + +
+
+
类型: {item.markType}
+
概要: {item.summary}
+
标签: {item.tags?.join?.(', ')}
+ {/*
描述: {item.description}
*/} +
{ + window.open(item.link, '_blank'); + }}> + 链接: {item.link} +
+
创建时间: {dayjs(item.createdAt).format('YYYY-MM-DD HH:mm:ss')}
+
更新时间: {dayjs(item.updatedAt).format('YYYY-MM-DD HH:mm:ss')}
+
+ ); + })} +
+ {list.length < pagination.total && ( + + )} +
+
+
+ ); +}; + +export const EditMark = () => { + const { markData } = useManagerStore( + useShallow((state) => { + return { + markData: state.markData, + }; + }), + ); + const mark = markData; + if (!mark) { + return null; + } + if (mark) { + return ; + } + return
; +}; +export const LayoutMain = (props: { children?: React.ReactNode; expandChildren?: React.ReactNode; open?: boolean }) => { + const getDocumentHeight = () => { + return document.documentElement.scrollHeight; + }; + const mStore = useManagerStore( + useShallow((state) => { + return { + open: state.open, + setOpen: state.setOpen, + markData: state.markData, + }; + }), + ); + const markData = mStore.markData; + const openMenu = mStore.open; + const setOpenMenu = mStore.setOpen; + useEffect(() => { + if (props.open !== undefined) { + setOpenMenu!(props.open); + } + }, []); + const isEdit = !!markData; + const hasExpandChildren = !!props.expandChildren; + const style = useMemo(() => { + if (!hasExpandChildren || openMenu) { + return {}; + } + return { + top: getDocumentHeight() / 2 + 10, + }; + }, [getDocumentHeight, hasExpandChildren, openMenu]); + return ( +
+
+ { + setOpenMenu(!openMenu); + }}> + + +
+
{props.children}
+ {(!props.expandChildren || isEdit) && ( + + )} + {props.expandChildren &&
{props.expandChildren}
} +
+ ); +}; +export type AppProps = { + /** + * 标记类型, wallnote md excalidraw + */ + markType?: MarkType; + /** + * 是否显示搜索框 + */ + showSearch?: boolean; + /** + * 是否显示添加按钮 + */ + showAdd?: boolean; + /** + * 点击事件 + */ + onClick?: (data?: any) => void; + /** + * 管理器id, 存储到store的id + */ + managerId?: string; + children?: React.ReactNode; + showSelect?: boolean; + openMenu?: boolean; +}; +export const ProviderManagerName = 'mark-manager'; +export const App = (props: AppProps) => { + return ( + + + + + + ); +}; diff --git a/src/apps/mark/manager/Provider.tsx b/src/apps/mark/manager/Provider.tsx new file mode 100644 index 0000000..a5a074e --- /dev/null +++ b/src/apps/mark/manager/Provider.tsx @@ -0,0 +1,9 @@ +import { StoreContextProvider } from '@kevisual/store/react'; +import { createManagerStore } from './store/index'; +export const ManagerProvider = ({ children, id }: { children: React.ReactNode; id?: string }) => { + return ( + + {children} + + ); +}; diff --git a/src/apps/mark/manager/components/index.tsx b/src/apps/mark/manager/components/index.tsx new file mode 100644 index 0000000..c211b56 --- /dev/null +++ b/src/apps/mark/manager/components/index.tsx @@ -0,0 +1,27 @@ +import { Button as aButton } from '@/components/a/button'; +import { Input } from '@/components/a/input'; +export const Button = aButton; + +export const TextField = Input; + +export const IconButton = aButton; + +export const Menu = () => { + return <>dev; +}; + +export const InputAdornment = () => { + return <>dev; +}; +export const MenuItem = () => { + return <>dev; +}; +export const Autocomplete = () => { + return <>dev; +}; + +export const Box = () => { + return <>dev; +}; + + diff --git a/src/apps/mark/manager/constant.ts b/src/apps/mark/manager/constant.ts new file mode 100644 index 0000000..1910d7d --- /dev/null +++ b/src/apps/mark/manager/constant.ts @@ -0,0 +1 @@ +export const MarkTypes = ['md', 'wallnote', 'excalidraw', 'chat']; diff --git a/src/apps/mark/manager/edit/Edit.tsx b/src/apps/mark/manager/edit/Edit.tsx new file mode 100644 index 0000000..38abf07 --- /dev/null +++ b/src/apps/mark/manager/edit/Edit.tsx @@ -0,0 +1,156 @@ +import { useForm, Controller } from 'react-hook-form'; +import { TextField } from '../components'; +import { Button } from '@/components/a/button'; +import { AutoComplate } from '@/components/a/auto-complate'; +import { TagsInput } from '@/components/a/input'; +import { useManagerStore } from '../store'; +import { useShallow } from 'zustand/shallow'; +import { useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; +import { pick } from 'lodash-es'; +import { toast } from 'react-toastify'; +import { Select } from '@/components/a/select'; +import { MarkTypes } from '../constant'; + +export const EditMark = () => { + const { control, handleSubmit, reset } = useForm(); + const { updateMark, markData, setCurrentMarkId, setMarkData } = useManagerStore( + useShallow((state) => { + return { + updateMark: state.updateMark, + markData: state.markData, + setCurrentMarkId: state.setCurrentMarkId, + currentMarkId: state.currentMarkId, + setMarkData: state.setMarkData, + }; + }), + ); + // const [mark, setMark] = useState(markData); + const mark = pick(markData, ['id', 'title', 'description', 'markType', 'summary', 'tags', 'link', 'thumbnail']); + useEffect(() => { + reset(mark); + console.log('markData', markData); + }, [markData?.id]); + const onSubmit = async (data: any) => { + const res = await updateMark({ ...mark, ...data }); + if (res.code === 200) { + toast.success('编辑成功'); + } + + // setCurrentMarkId(''); + // setMarkData(undefined); + }; + return ( +
+ ( +
+ + +
+ )} + /> + ( +
+ +