diff --git a/packages/catlog-wasm/Cargo.toml b/packages/catlog-wasm/Cargo.toml index 98059b59d..403fb3946 100644 --- a/packages/catlog-wasm/Cargo.toml +++ b/packages/catlog-wasm/Cargo.toml @@ -10,6 +10,9 @@ crate-type = ["cdylib", "rlib"] [features] default = ["console_error_panic_hook"] +[package.metadata.wasm-pack.profile.release] +wasm-opt = false + [dependencies] all-the-same = "1.1.0" catlog = { path = "../catlog", features = ["ode", "serde-wasm"] } diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 6f5d2b922..85399a932 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -20,9 +20,9 @@ "@atlaskit/pragmatic-drag-and-drop": "^1.3.0", "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3", "@automerge/automerge": "^2.2.8", - "@automerge/automerge-repo": "^1.2.1", - "@automerge/automerge-repo-network-websocket": "^1.2.1", - "@automerge/automerge-repo-storage-indexeddb": "^1.2.1", + "@automerge/automerge-repo": "^2.0.7", + "@automerge/automerge-repo-network-websocket": "^2.0.7", + "@automerge/automerge-repo-storage-indexeddb": "^2.0.7", "@automerge/prosemirror": "^0.0.13", "@corvu/dialog": "^0.2.4", "@corvu/disclosure": "^0.2.1", @@ -57,7 +57,8 @@ "solid-js": "^1.9.2", "tiny-invariant": "^1.3.3", "ts-pattern": "^5.2.0", - "uuid": "^11.0.3" + "uuid": "^11.0.3", + "@patchwork/sdk": "file:../../../patchwork/sdk" }, "devDependencies": { "@biomejs/biome": "^1.9.3", diff --git a/packages/frontend/pnpm-lock.yaml b/packages/frontend/pnpm-lock.yaml index a2493a128..65ade6eaf 100644 --- a/packages/frontend/pnpm-lock.yaml +++ b/packages/frontend/pnpm-lock.yaml @@ -18,14 +18,14 @@ importers: specifier: ^2.2.8 version: 2.2.8 '@automerge/automerge-repo': - specifier: ^1.2.1 - version: 1.2.1(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2) + specifier: ^2.0.7 + version: 2.0.8 '@automerge/automerge-repo-network-websocket': - specifier: ^1.2.1 - version: 1.2.1(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2) + specifier: ^2.0.7 + version: 2.0.8 '@automerge/automerge-repo-storage-indexeddb': - specifier: ^1.2.1 - version: 1.2.1(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2) + specifier: ^2.0.7 + version: 2.0.8 '@automerge/prosemirror': specifier: ^0.0.13 version: 0.0.13 @@ -50,6 +50,9 @@ importers: '@modular-forms/solid': specifier: ^0.24.1 version: 0.24.1(solid-js@1.9.2)(typescript@5.6.2) + '@patchwork/sdk': + specifier: file:../../../patchwork/sdk + version: file:../../../patchwork/sdk '@qubit-rs/client': specifier: ^0.4.5 version: 0.4.5 @@ -191,18 +194,33 @@ packages: '@atlaskit/pragmatic-drag-and-drop@1.3.1': resolution: {integrity: sha512-MptcLppK78B2eplL5fHk93kfCbZ6uCpt33YauBPrOwI5zcHYJhZGeaGEaAXoVAHnSJOdQUhy6kGVVC9qggz2Fg==} - '@automerge/automerge-repo-network-websocket@1.2.1': - resolution: {integrity: sha512-n4sI6l51iBf0edWtX+vhk+sc8wJL72IVZl682SvzRHakA5CzyNZiC8sVzc142zRT3RDN12jCWGpwA2Voq6EXsQ==} + '@automerge/automerge-codemirror@0.1.0': + resolution: {integrity: sha512-9mQ7aecSlwYOGndAjLbgNk0uOJeKZdxmVNAgllf0SvsBXfeKcbf+NnvhJmRdNYY7CR4AtAw7W++Ew7t1PYs9RQ==} - '@automerge/automerge-repo-storage-indexeddb@1.2.1': - resolution: {integrity: sha512-u+9eZZJK7DAr541buF4ut1ipkuiKRoaAtoFYo/ilq7zOLO7JX+GQOFx/8eKKRDlGt/AHTcDaFktkcaX0vKahQQ==} + '@automerge/automerge-repo-network-websocket@2.0.8': + resolution: {integrity: sha512-Q42Oo4TDvCK8V9c8U020lGw8QR/j9iKB9dWENptxzcmVB3jAtLz5wGzT41kpBsJU0ArDTC3xM6SWGBwTahMIog==} - '@automerge/automerge-repo@1.2.1': - resolution: {integrity: sha512-uEBr4bM01aSWkEt2tDKQxfW0Pahz2zbTTn4sRJfeKJlAg2SLr4QepFJ+3Tp4CNEkkU485olfnKYf6gt7uilMZQ==} + '@automerge/automerge-repo-react-hooks@2.2.0': + resolution: {integrity: sha512-zHP44jXSCmV1DyyKdTKgv8nz7yrdCT7VFXs/QrF3YRhE/3czhhvbXo2zahGvOoM+jryH0eJxHTrJ7jMEtt/Ung==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@automerge/automerge-repo-storage-indexeddb@2.0.8': + resolution: {integrity: sha512-35YPDes5GMtV4fmw9+JcfXflT21tBXoUSMcFIbw1yUzwAzajpdRnVhf4JmOv+w7An+9bT84L3Bj5JueN5feffA==} + + '@automerge/automerge-repo@2.0.8': + resolution: {integrity: sha512-DP+irpMjbymPWuKVsR6eopLiSEvq/1JlL8IRIBhTsI8RPTKNco3j4+rjTPtKF3UG/EsZydXi541QmRMYEe/A7w==} + + '@automerge/automerge-repo@2.2.0': + resolution: {integrity: sha512-/4cAxnUDPykqdSMJJiJvPlR2VY0JHJnvEoM7fO8qVXwQors34S0VkJEScXRJZExcVhWGhFTwCTWvUbb6hhWQIQ==} '@automerge/automerge@2.2.8': resolution: {integrity: sha512-kP6Z9lIkNeIGe/jhF8SUQAgUMwVjtXCBL0eZEgQGCoWvPNTPcg8fnQco28XkYBrfkkuqiEUAbdHhJmSp0y79ug==} + '@automerge/automerge@3.0.0': + resolution: {integrity: sha512-vp/LrAzOyS4J+YmEKRjnCjCUqN6itzz9nKvPEcSLJuapZXfPmY72TYg0F05DVnLCvGe+sLuVAoVntJT6K0qutQ==} + '@automerge/prosemirror@0.0.13': resolution: {integrity: sha512-TmRw9M1AfONjwHpWlGLnr8BRTXbXVRJtDHsOEhDsQWoflsKoBJO/rf/SP4wjgi2jYrlgUwTRaOny1p0AF9o27Q==} @@ -378,6 +396,93 @@ packages: cpu: [x64] os: [win32] + '@codemirror/autocomplete@6.18.6': + resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} + + '@codemirror/commands@6.8.1': + resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==} + + '@codemirror/lang-angular@0.1.4': + resolution: {integrity: sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==} + + '@codemirror/lang-cpp@6.0.3': + resolution: {integrity: sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==} + + '@codemirror/lang-css@6.3.1': + resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} + + '@codemirror/lang-go@6.0.1': + resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==} + + '@codemirror/lang-html@6.4.9': + resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==} + + '@codemirror/lang-java@6.0.2': + resolution: {integrity: sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==} + + '@codemirror/lang-javascript@6.2.4': + resolution: {integrity: sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==} + + '@codemirror/lang-json@6.0.2': + resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==} + + '@codemirror/lang-less@6.0.2': + resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==} + + '@codemirror/lang-liquid@6.2.3': + resolution: {integrity: sha512-yeN+nMSrf/lNii3FJxVVEGQwFG0/2eDyH6gNOj+TGCa0hlNO4bhQnoO5ISnd7JOG+7zTEcI/GOoyraisFVY7jQ==} + + '@codemirror/lang-markdown@6.3.3': + resolution: {integrity: sha512-1fn1hQAPWlSSMCvnF810AkhWpNLkJpl66CRfIy3vVl20Sl4NwChkorCHqpMtNbXr1EuMJsrDnhEpjZxKZ2UX3A==} + + '@codemirror/lang-php@6.0.2': + resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==} + + '@codemirror/lang-python@6.2.1': + resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==} + + '@codemirror/lang-rust@6.0.2': + resolution: {integrity: sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==} + + '@codemirror/lang-sass@6.0.2': + resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} + + '@codemirror/lang-sql@6.9.0': + resolution: {integrity: sha512-xmtpWqKSgum1B1J3Ro6rf7nuPqf2+kJQg5SjrofCAcyCThOe0ihSktSoXfXuhQBnwx1QbmreBbLJM5Jru6zitg==} + + '@codemirror/lang-vue@0.1.3': + resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==} + + '@codemirror/lang-wast@6.0.2': + resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} + + '@codemirror/lang-xml@6.1.0': + resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} + + '@codemirror/lang-yaml@6.1.2': + resolution: {integrity: sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw==} + + '@codemirror/language-data@6.5.1': + resolution: {integrity: sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==} + + '@codemirror/language@6.11.2': + resolution: {integrity: sha512-p44TsNArL4IVXDTbapUmEkAlvWs2CFQbcfc0ymDsis1kH2wh0gcY96AS29c/vp2d0y2Tquk1EDSaawpzilUiAw==} + + '@codemirror/legacy-modes@6.5.1': + resolution: {integrity: sha512-DJYQQ00N1/KdESpZV7jg9hafof/iBNp9h7TYo1SLMk86TWl9uDsVdho2dzd81K+v4retmK6mdC7WpuOQDytQqw==} + + '@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.38.1': + resolution: {integrity: sha512-RmTOkE7hRU3OVREqFVITWHz6ocgBjv08GoePscAakgVQfciA3SGCEk7mb9IzwW61cKKmlTpHXG6DUE5Ubx+MGQ==} + '@corvu/dialog@0.2.4': resolution: {integrity: sha512-n54vJq+fOy8GVrnYBdJpD6JXNuyx7LOeMrRxwzAvZnYGpW8+AA12tnb/P/2emJj/HjOO5otheGKb0breshdFlA==} peerDependencies: @@ -408,10 +513,6 @@ packages: peerDependencies: solid-js: ^1.8 - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -882,12 +983,27 @@ packages: '@floating-ui/core@1.6.9': resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + '@floating-ui/core@1.7.2': + resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==} + '@floating-ui/dom@1.6.11': resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} '@floating-ui/dom@1.6.13': resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + '@floating-ui/dom@1.7.2': + resolution: {integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==} + + '@floating-ui/react-dom@2.1.4': + resolution: {integrity: sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} @@ -935,9 +1051,6 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@jupyter/ydoc@3.0.1': resolution: {integrity: sha512-zO6PEe/kNpb9oRPhxytLdnL4zclVDJVCIEavprIlIs/qCxGbgC/BvIoK6N/Ny525Ljrev8Ku9B+y6P2qFn3zqg==} @@ -968,6 +1081,57 @@ packages: peerDependencies: solid-js: ^1.8.8 + '@lezer/common@1.2.3': + resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} + + '@lezer/cpp@1.1.3': + resolution: {integrity: sha512-ykYvuFQKGsRi6IcE+/hCSGUhb/I4WPjd3ELhEblm2wS2cOznDFzO+ubK2c+ioysOnlZ3EduV+MVQFCPzAIoY3w==} + + '@lezer/css@1.3.0': + resolution: {integrity: sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==} + + '@lezer/go@1.0.1': + resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==} + + '@lezer/highlight@1.2.1': + resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} + + '@lezer/html@1.3.10': + resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==} + + '@lezer/java@1.1.3': + resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==} + + '@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==} + + '@lezer/php@1.0.3': + resolution: {integrity: sha512-NDwgktd5qh/EfEn7Dogf2N6eNnC5WPJ5NslB8nKhgXSuH2uSJamCEom1g4VGo+ibfoADK8D69NMCMhuuYbVskg==} + + '@lezer/python@1.1.18': + resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==} + + '@lezer/rust@1.0.2': + resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==} + + '@lezer/sass@1.1.0': + resolution: {integrity: sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==} + + '@lezer/xml@1.0.6': + resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==} + + '@lezer/yaml@1.0.3': + resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==} + '@lumino/algorithm@2.0.2': resolution: {integrity: sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==} @@ -998,6 +1162,9 @@ packages: '@lumino/virtualdom@2.0.2': resolution: {integrity: sha512-HYZThOtZSoknjdXA102xpy5CiXtTFCVz45EXdWeYLx3NhuEwuAIX93QBBIhupalmtFlRg1yhdDNV40HxJ4kcXg==} + '@marijn/find-cluster-break@1.0.2': + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -1010,6 +1177,9 @@ packages: resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} engines: {node: ^14.21.3 || >=16} + '@patchwork/sdk@file:../../../patchwork/sdk': + resolution: {directory: ../../../patchwork/sdk, type: directory} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1047,289 +1217,755 @@ packages: '@qubit-rs/client@0.4.5': resolution: {integrity: sha512-L7pBAUs1sPWCkuoRq7rdwqXy1+iLOmOVhADxj+QoNY24yu4J1aiTUSlJJllK9rXRxfvkjRNEPSeUE5H+U3ncug==} - '@rjsf/utils@5.22.4': - resolution: {integrity: sha512-yQTdz5ryiYy258xCVthVPQ3DeaMzrRNrFcO8xvGHorp0/bLUxdTZ0iidXop49m3y8SaxxTZd398ZKWg2cqxiIA==} - engines: {node: '>=14'} - peerDependencies: - react: ^16.14.0 || >=17 - - '@rollup/rollup-android-arm-eabi@4.22.5': - resolution: {integrity: sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.22.5': - resolution: {integrity: sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.22.5': - resolution: {integrity: sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==} - cpu: [arm64] - os: [darwin] + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - '@rollup/rollup-darwin-x64@4.22.5': - resolution: {integrity: sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==} - cpu: [x64] - os: [darwin] + '@radix-ui/primitive@1.0.0': + resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} - '@rollup/rollup-linux-arm-gnueabihf@4.22.5': - resolution: {integrity: sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==} - cpu: [arm] - os: [linux] + '@radix-ui/primitive@1.1.2': + resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} - '@rollup/rollup-linux-arm-musleabihf@4.22.5': - resolution: {integrity: sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==} - cpu: [arm] - os: [linux] + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + 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 - '@rollup/rollup-linux-arm64-gnu@4.22.5': - resolution: {integrity: sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==} - cpu: [arm64] - os: [linux] + '@radix-ui/react-avatar@1.1.10': + resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} + 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 - '@rollup/rollup-linux-arm64-musl@4.22.5': - resolution: {integrity: sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==} - cpu: [arm64] - os: [linux] + '@radix-ui/react-checkbox@1.3.2': + resolution: {integrity: sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==} + 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 - '@rollup/rollup-linux-powerpc64le-gnu@4.22.5': - resolution: {integrity: sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==} - cpu: [ppc64] - os: [linux] + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + 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 - '@rollup/rollup-linux-riscv64-gnu@4.22.5': - resolution: {integrity: sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==} - cpu: [riscv64] - os: [linux] + '@radix-ui/react-compose-refs@1.0.0': + resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 - '@rollup/rollup-linux-s390x-gnu@4.22.5': - resolution: {integrity: sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==} - cpu: [s390x] - os: [linux] + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@rollup/rollup-linux-x64-gnu@4.22.5': - resolution: {integrity: sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==} - cpu: [x64] - os: [linux] + '@radix-ui/react-context-menu@2.2.15': + resolution: {integrity: sha512-UsQUMjcYTsBjTSXw0P3GO0werEQvUY2plgRQuKoCTtkNr45q1DiL51j4m7gxhABzZ0BadoXNsIbg7F3KwiUBbw==} + 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 - '@rollup/rollup-linux-x64-musl@4.22.5': - resolution: {integrity: sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==} - cpu: [x64] - os: [linux] + '@radix-ui/react-context@1.0.0': + resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 - '@rollup/rollup-win32-arm64-msvc@4.22.5': - resolution: {integrity: sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==} - cpu: [arm64] - os: [win32] + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@rollup/rollup-win32-ia32-msvc@4.22.5': - resolution: {integrity: sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==} - cpu: [ia32] - os: [win32] + '@radix-ui/react-dialog@1.0.0': + resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 - '@rollup/rollup-win32-x64-msvc@4.22.5': - resolution: {integrity: sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==} - cpu: [x64] - os: [win32] + '@radix-ui/react-dialog@1.1.14': + resolution: {integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==} + 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 - '@shikijs/core@1.21.0': - resolution: {integrity: sha512-zAPMJdiGuqXpZQ+pWNezQAk5xhzRXBNiECFPcJLtUdsFM3f//G95Z15EHTnHchYycU8kIIysqGgxp8OVSj1SPQ==} + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@shikijs/engine-javascript@1.21.0': - resolution: {integrity: sha512-jxQHNtVP17edFW4/0vICqAVLDAxmyV31MQJL4U/Kg+heQALeKYVOWo0sMmEZ18FqBt+9UCdyqGKYE7bLRtk9mg==} + '@radix-ui/react-dismissable-layer@1.0.0': + resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 - '@shikijs/engine-oniguruma@1.21.0': - resolution: {integrity: sha512-AIZ76XocENCrtYzVU7S4GY/HL+tgHGbVU+qhiDyNw1qgCA5OSi4B4+HY4BtAoJSMGuD/L5hfTzoRVbzEm2WTvg==} + '@radix-ui/react-dismissable-layer@1.1.10': + resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} + 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 - '@shikijs/types@1.21.0': - resolution: {integrity: sha512-tzndANDhi5DUndBtpojEq/42+dpUF2wS7wdCDQaFtIXm3Rd1QkrcVgSSRLOvEwexekihOXfbYJINW37g96tJRw==} + '@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 - '@shikijs/vscode-textmate@9.2.2': - resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} + '@radix-ui/react-focus-guards@1.0.0': + resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@radix-ui/react-focus-guards@1.1.2': + resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@solid-primitives/active-element@2.0.20': - resolution: {integrity: sha512-5EEJZ7F9DwzHMqXVTsgfE9egzeN9PhUgEkb3+RCC3FPEiLqLUc6HN+OlEjPqBxWEzsB1H/q7CfYDAJUab4N1EA==} + '@radix-ui/react-focus-scope@1.0.0': + resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} peerDependencies: - solid-js: ^1.6.12 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 - '@solid-primitives/autofocus@0.0.111': - resolution: {integrity: sha512-WQUCcBzUmLdmHeyN0Z1lH75IN1IGIbvOMTcBEmuCY5DXeahRJm3riTGqVj+XOA4G+NHCMt7wPOJoYOAuwUov/Q==} + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/context@0.2.3': - resolution: {integrity: sha512-6/e8qu9qJf48FJ+sxc/B782NdgFw5TvI8+r6U0gHizumfZcWZg8FAJqvRZAiwlygkUNiTQOGTeO10LVbMm0kvg==} + '@radix-ui/react-id@1.0.0': + resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} peerDependencies: - solid-js: ^1.6.12 + react: ^16.8 || ^17.0 || ^18.0 - '@solid-primitives/destructure@0.1.17': - resolution: {integrity: sha512-MTjEIIeiw36Png0tze70XnhQ79IbkreX8v0qpjJ77+CLT5MkVQtFoiNHGkZPyw7UtkZQE08qvV6KAJw8s9dCwg==} + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: - solid-js: ^1.6.12 + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@solid-primitives/event-listener@2.3.3': - resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} + '@radix-ui/react-label@2.1.7': + resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/keyboard@1.2.8': - resolution: {integrity: sha512-pJtcbkjozS6L1xvTht9rPpyPpX55nAkfBzbFWdf3y0Suwh6qClTibvvObzKOf7uzQ+8aZRDH4LsoGmbTKXtJjQ==} + '@radix-ui/react-menu@2.1.15': + resolution: {integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/keyed@1.2.2': - resolution: {integrity: sha512-oBziY40JK4XmJ57XGkFl8j0GtEarSu0hhjdkUQgqL/U0QQE3TZrRo9uhgH7I6VGJKBKG7SAraTPE6S5lVLM1ow==} + '@radix-ui/react-popover@1.1.14': + resolution: {integrity: sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/map@0.4.13': - resolution: {integrity: sha512-B1zyFbsiTQvqPr+cuPCXO72sRuczG9Swncqk5P74NCGw1VE8qa/Ry9GlfI1e/VdeQYHjan+XkbE3rO2GW/qKew==} + '@radix-ui/react-popper@1.2.7': + resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/media@2.2.9': - resolution: {integrity: sha512-QUmU62D4/d9YWx/4Dvr/UZasIkIpqNXz7wosA5GLmesRW9XlPa3G5M6uOmTw73SByHNTCw0D6x8bSdtvvLgzvQ==} + '@radix-ui/react-portal@1.0.0': + resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} peerDependencies: - solid-js: ^1.6.12 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 - '@solid-primitives/props@3.1.11': - resolution: {integrity: sha512-jZAKWwvDRHjiydIumDgMj68qviIbowQ1ci7nkEAgzgvanNkhKSQV8iPgR2jMk1uv7S2ZqXYHslVQTgJel/TEyg==} + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/refs@1.0.8': - resolution: {integrity: sha512-+jIsWG8/nYvhaCoG2Vg6CJOLgTmPKFbaCrNQKWfChalgUf9WrVxWw0CdJb3yX15n5lUcQ0jBo6qYtuVVmBLpBw==} + '@radix-ui/react-presence@1.0.0': + resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} peerDependencies: - solid-js: ^1.6.12 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 - '@solid-primitives/resize-observer@2.0.26': - resolution: {integrity: sha512-KbPhwal6ML9OHeUTZszBbt6PYSMj89d4wVCLxlvDYL4U0+p+xlCEaqz6v9dkCwm/0Lb+Wed7W5T1dQZCP3JUUw==} + '@radix-ui/react-presence@1.1.4': + resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/rootless@1.4.5': - resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} + '@radix-ui/react-primitive@1.0.0': + resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==} peerDependencies: - solid-js: ^1.6.12 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 - '@solid-primitives/static-store@0.0.8': - resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/timer@1.3.10': - resolution: {integrity: sha512-mCWUKjkw2oPlcT9SDjziDcz2qO4y6JXcSsmtAePKlfz6vUMIuL+Q+FK1NKUkpH+anMoVBGZLsSxI5P2+Y1RHNw==} + '@radix-ui/react-progress@1.1.7': + resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/trigger@1.1.0': - resolution: {integrity: sha512-00BbAiXV66WwjHuKZc3wr0+GLb9C24mMUmi3JdTpNFgHBbrQGrIHubmZDg36c5/7wH+E0GQtOOanwQS063PO+A==} + '@radix-ui/react-roving-focus@1.1.10': + resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solid-primitives/utils@6.2.3': - resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} + '@radix-ui/react-select@2.2.5': + resolution: {integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==} peerDependencies: - solid-js: ^1.6.12 + '@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 - '@solidjs/router@0.14.7': - resolution: {integrity: sha512-agLf8AUz5XnW6+F64a4Iq+QQQobI5zGHQ/gUYd/WHSwcbnFpavbsiwRLob3YhWMXVX3sQyn4ekUN+uchMCRupw==} + '@radix-ui/react-slider@1.3.5': + resolution: {integrity: sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==} peerDependencies: - solid-js: ^1.8.6 + '@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 - '@swc/core-darwin-arm64@1.11.21': - resolution: {integrity: sha512-v6gjw9YFWvKulCw3ZA1dY+LGMafYzJksm1mD4UZFZ9b36CyHFowYVYug1ajYRIRqEvvfIhHUNV660zTLoVFR8g==} - engines: {node: '>=10'} + '@radix-ui/react-slot@1.0.0': + resolution: {integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.2.5': + resolution: {integrity: sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==} + 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-tabs@1.1.12': + resolution: {integrity: sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==} + 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-toast@1.2.14': + resolution: {integrity: sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==} + 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-tooltip@1.2.7': + resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} + 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-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.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + 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.0.0': + resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + 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-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + 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.0.0': + resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + 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-is-hydrated@0.1.0': + resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} + 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.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.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + 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-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + 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: + '@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: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + 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/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@rjsf/utils@5.22.4': + resolution: {integrity: sha512-yQTdz5ryiYy258xCVthVPQ3DeaMzrRNrFcO8xvGHorp0/bLUxdTZ0iidXop49m3y8SaxxTZd398ZKWg2cqxiIA==} + engines: {node: '>=14'} + peerDependencies: + react: ^16.14.0 || >=17 + + '@rollup/rollup-android-arm-eabi@4.22.5': + resolution: {integrity: sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.22.5': + resolution: {integrity: sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.22.5': + resolution: {integrity: sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.11.21': - resolution: {integrity: sha512-CUiTiqKlzskwswrx9Ve5NhNoab30L1/ScOfQwr1duvNlFvarC8fvQSgdtpw2Zh3MfnfNPpyLZnYg7ah4kbT9JQ==} - engines: {node: '>=10'} + '@rollup/rollup-darwin-x64@4.22.5': + resolution: {integrity: sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.11.21': - resolution: {integrity: sha512-YyBTAFM/QPqt1PscD8hDmCLnqPGKmUZpqeE25HXY8OLjl2MUs8+O4KjwPZZ+OGxpdTbwuWFyMoxjcLy80JODvg==} - engines: {node: '>=10'} + '@rollup/rollup-linux-arm-gnueabihf@4.22.5': + resolution: {integrity: sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.11.21': - resolution: {integrity: sha512-DQD+ooJmwpNsh4acrftdkuwl5LNxxg8U4+C/RJNDd7m5FP9Wo4c0URi5U0a9Vk/6sQNh9aSGcYChDpqCDWEcBw==} - engines: {node: '>=10'} + '@rollup/rollup-linux-arm-musleabihf@4.22.5': + resolution: {integrity: sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.22.5': + resolution: {integrity: sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.11.21': - resolution: {integrity: sha512-y1L49+snt1a1gLTYPY641slqy55QotPdtRK9Y6jMi4JBQyZwxC8swWYlQWb+MyILwxA614fi62SCNZNznB3XSA==} - engines: {node: '>=10'} + '@rollup/rollup-linux-arm64-musl@4.22.5': + resolution: {integrity: sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.11.21': - resolution: {integrity: sha512-NesdBXv4CvVEaFUlqKj+GA4jJMNUzK2NtKOrUNEtTbXaVyNiXjFCSaDajMTedEB0jTAd9ybB0aBvwhgkJUWkWA==} - engines: {node: '>=10'} + '@rollup/rollup-linux-powerpc64le-gnu@4.22.5': + resolution: {integrity: sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.22.5': + resolution: {integrity: sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.22.5': + resolution: {integrity: sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.22.5': + resolution: {integrity: sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.11.21': - resolution: {integrity: sha512-qFV60pwpKVOdmX67wqQzgtSrUGWX9Cibnp1CXyqZ9Mmt8UyYGvmGu7p6PMbTyX7vdpVUvWVRf8DzrW2//wmVHg==} - engines: {node: '>=10'} + '@rollup/rollup-linux-x64-musl@4.22.5': + resolution: {integrity: sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.11.21': - resolution: {integrity: sha512-DJJe9k6gXR/15ZZVLv1SKhXkFst8lYCeZRNHH99SlBodvu4slhh/MKQ6YCixINRhCwliHrpXPym8/5fOq8b7Ig==} - engines: {node: '>=10'} + '@rollup/rollup-win32-arm64-msvc@4.22.5': + resolution: {integrity: sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.11.21': - resolution: {integrity: sha512-TqEXuy6wedId7bMwLIr9byds+mKsaXVHctTN88R1UIBPwJA92Pdk0uxDgip0pEFzHB/ugU27g6d8cwUH3h2eIw==} - engines: {node: '>=10'} + '@rollup/rollup-win32-ia32-msvc@4.22.5': + resolution: {integrity: sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.11.21': - resolution: {integrity: sha512-BT9BNNbMxdpUM1PPAkYtviaV0A8QcXttjs2MDtOeSqqvSJaPtyM+Fof2/+xSwQDmDEFzbGCcn75M5+xy3lGqpA==} - engines: {node: '>=10'} + '@rollup/rollup-win32-x64-msvc@4.22.5': + resolution: {integrity: sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==} cpu: [x64] os: [win32] - '@swc/core@1.11.21': - resolution: {integrity: sha512-/Y3BJLcwd40pExmdar8MH2UGGvCBrqNN7hauOMckrEX2Ivcbv3IMhrbGX4od1dnF880Ed8y/E9aStZCIQi0EGw==} - engines: {node: '>=10'} + '@shikijs/core@1.21.0': + resolution: {integrity: sha512-zAPMJdiGuqXpZQ+pWNezQAk5xhzRXBNiECFPcJLtUdsFM3f//G95Z15EHTnHchYycU8kIIysqGgxp8OVSj1SPQ==} + + '@shikijs/engine-javascript@1.21.0': + resolution: {integrity: sha512-jxQHNtVP17edFW4/0vICqAVLDAxmyV31MQJL4U/Kg+heQALeKYVOWo0sMmEZ18FqBt+9UCdyqGKYE7bLRtk9mg==} + + '@shikijs/engine-oniguruma@1.21.0': + resolution: {integrity: sha512-AIZ76XocENCrtYzVU7S4GY/HL+tgHGbVU+qhiDyNw1qgCA5OSi4B4+HY4BtAoJSMGuD/L5hfTzoRVbzEm2WTvg==} + + '@shikijs/types@1.21.0': + resolution: {integrity: sha512-tzndANDhi5DUndBtpojEq/42+dpUF2wS7wdCDQaFtIXm3Rd1QkrcVgSSRLOvEwexekihOXfbYJINW37g96tJRw==} + + '@shikijs/vscode-textmate@9.2.2': + resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@solid-primitives/active-element@2.0.20': + resolution: {integrity: sha512-5EEJZ7F9DwzHMqXVTsgfE9egzeN9PhUgEkb3+RCC3FPEiLqLUc6HN+OlEjPqBxWEzsB1H/q7CfYDAJUab4N1EA==} peerDependencies: - '@swc/helpers': '>=0.5.17' - peerDependenciesMeta: - '@swc/helpers': - optional: true + solid-js: ^1.6.12 - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@solid-primitives/autofocus@0.0.111': + resolution: {integrity: sha512-WQUCcBzUmLdmHeyN0Z1lH75IN1IGIbvOMTcBEmuCY5DXeahRJm3riTGqVj+XOA4G+NHCMt7wPOJoYOAuwUov/Q==} + peerDependencies: + solid-js: ^1.6.12 - '@swc/helpers@0.5.13': - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@solid-primitives/context@0.2.3': + resolution: {integrity: sha512-6/e8qu9qJf48FJ+sxc/B782NdgFw5TvI8+r6U0gHizumfZcWZg8FAJqvRZAiwlygkUNiTQOGTeO10LVbMm0kvg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/destructure@0.1.17': + resolution: {integrity: sha512-MTjEIIeiw36Png0tze70XnhQ79IbkreX8v0qpjJ77+CLT5MkVQtFoiNHGkZPyw7UtkZQE08qvV6KAJw8s9dCwg==} + peerDependencies: + solid-js: ^1.6.12 - '@swc/types@0.1.21': - resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==} + '@solid-primitives/event-listener@2.3.3': + resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} + peerDependencies: + solid-js: ^1.6.12 - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@solid-primitives/keyboard@1.2.8': + resolution: {integrity: sha512-pJtcbkjozS6L1xvTht9rPpyPpX55nAkfBzbFWdf3y0Suwh6qClTibvvObzKOf7uzQ+8aZRDH4LsoGmbTKXtJjQ==} + peerDependencies: + solid-js: ^1.6.12 - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + '@solid-primitives/keyed@1.2.2': + resolution: {integrity: sha512-oBziY40JK4XmJ57XGkFl8j0GtEarSu0hhjdkUQgqL/U0QQE3TZrRo9uhgH7I6VGJKBKG7SAraTPE6S5lVLM1ow==} + peerDependencies: + solid-js: ^1.6.12 - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + '@solid-primitives/map@0.4.13': + resolution: {integrity: sha512-B1zyFbsiTQvqPr+cuPCXO72sRuczG9Swncqk5P74NCGw1VE8qa/Ry9GlfI1e/VdeQYHjan+XkbE3rO2GW/qKew==} + peerDependencies: + solid-js: ^1.6.12 - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@solid-primitives/media@2.2.9': + resolution: {integrity: sha512-QUmU62D4/d9YWx/4Dvr/UZasIkIpqNXz7wosA5GLmesRW9XlPa3G5M6uOmTw73SByHNTCw0D6x8bSdtvvLgzvQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/props@3.1.11': + resolution: {integrity: sha512-jZAKWwvDRHjiydIumDgMj68qviIbowQ1ci7nkEAgzgvanNkhKSQV8iPgR2jMk1uv7S2ZqXYHslVQTgJel/TEyg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/refs@1.0.8': + resolution: {integrity: sha512-+jIsWG8/nYvhaCoG2Vg6CJOLgTmPKFbaCrNQKWfChalgUf9WrVxWw0CdJb3yX15n5lUcQ0jBo6qYtuVVmBLpBw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/resize-observer@2.0.26': + resolution: {integrity: sha512-KbPhwal6ML9OHeUTZszBbt6PYSMj89d4wVCLxlvDYL4U0+p+xlCEaqz6v9dkCwm/0Lb+Wed7W5T1dQZCP3JUUw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/rootless@1.4.5': + resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/static-store@0.0.8': + resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/timer@1.3.10': + resolution: {integrity: sha512-mCWUKjkw2oPlcT9SDjziDcz2qO4y6JXcSsmtAePKlfz6vUMIuL+Q+FK1NKUkpH+anMoVBGZLsSxI5P2+Y1RHNw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/trigger@1.1.0': + resolution: {integrity: sha512-00BbAiXV66WwjHuKZc3wr0+GLb9C24mMUmi3JdTpNFgHBbrQGrIHubmZDg36c5/7wH+E0GQtOOanwQS063PO+A==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/utils@6.2.3': + resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solidjs/router@0.14.7': + resolution: {integrity: sha512-agLf8AUz5XnW6+F64a4Iq+QQQobI5zGHQ/gUYd/WHSwcbnFpavbsiwRLob3YhWMXVX3sQyn4ekUN+uchMCRupw==} + peerDependencies: + solid-js: ^1.8.6 + + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -1427,10 +2063,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - acorn@8.12.1: resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} @@ -1467,12 +2099,13 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -1595,10 +2228,26 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + cmdk@0.2.1: + resolution: {integrity: sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + codemirror@6.0.2: + resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1627,8 +2276,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -1663,6 +2312,10 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-uri-component@0.4.1: + resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==} + engines: {node: '>=14.16'} + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -1675,6 +2328,9 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -1682,10 +2338,6 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} @@ -1782,6 +2434,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + filter-obj@5.1.0: + resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} + engines: {node: '>=14.16'} + firebase@10.14.0: resolution: {integrity: sha512-/yB/OE4bfBbmtfku0DCdW6nWMHYVayN6xWKw68ztedxqGevfYDoPoygBXiLmvBHdWdBa+IlhJDkdUUiEEpcAUw==} @@ -1821,6 +2477,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2057,20 +2717,25 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lucide-react@0.456.0: + resolution: {integrity: sha512-DIIGJqTT5X05sbAsQ+OhA8OtJYyD4NsEMCA/HQW/Y6ToPQ7gwbtujIoeAaup4HpHzV35SQOarKAWH8LYglB6eA==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + lucide-solid@0.471.0: resolution: {integrity: sha512-QkoM5j49z6O6Ek7k6XtMfQtIwCFbBJeyUw98bF1F3fWC9+oIVKfGZRNdweBnW6IaLPKvSE2cyTU4gkGaKZ+iNA==} peerDependencies: solid-js: ^1.4.7 + lucide@0.433.0: + resolution: {integrity: sha512-RoyCuCYA0H1Fs0ImTjdpWCcpzvEGnKg5wLqlmAGLYLMJ0/YvjkbLSxbsFRJcZMDoWTBz1IiZ+6sHjJwuoIXURw==} + lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} @@ -2413,15 +3078,72 @@ packages: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} + query-string@8.2.0: + resolution: {integrity: sha512-tUZIw8J0CawM5wyGBiDOAp7ObdRQh4uBor/fUR9ZjmbZVvw95OD9If4w3MQxr99rg0DJZ/9CIORcpEqU5hQG7g==} + engines: {node: '>=14.16'} + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} raf-schd@4.0.3: resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-merge-refs@2.1.1: + resolution: {integrity: sha512-jLQXJ/URln51zskhgppGJ2ub7b2WFKGq3cl3NYKtlHoTG+dN2q7EzWrn3hN3EgPsTMvpR9tpq5ijdp7YwFZkag==} + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.5.4: + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.1: + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-usestateref@1.0.9: + resolution: {integrity: sha512-t8KLsI7oje0HzfzGhxFXzuwbf1z9vhBM1ptHLUIHhYqZDKFuI5tzdhEVxSNzUkYxwF8XdpOErzHlKxvP7sTERw==} + peerDependencies: + react: '>16.0.0' + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -2459,6 +3181,10 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -2483,6 +3209,9 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2515,6 +3244,14 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + signia-react@0.1.5: + resolution: {integrity: sha512-DhHOEJNHIFq0sd4mFpMQx6U0vSb6MGrCS+iVdl1jM2Ts9iNyPc6zaWG/ko+ARS4L2cdHFpNH2l5YqoBNLwMyCw==} + peerDependencies: + react: ^18 + + signia@0.1.5: + resolution: {integrity: sha512-ViJpywl7H1W6zRfqbu+86xpSCcuq6tpOen7I+gR8axaiyZP8txRNAoeCsL20UkuqzG/Ybtk0u4C2lawkiwPlnw==} + solid-dismissible@0.1.1: resolution: {integrity: sha512-9kcKBJIMdS+586cA1g63HYWxKh3h89leeNHbPZ1csYjuni+NvPBtNr11l0iEX2AKKEt6FHk6qNhc/gjoYAW1pA==} peerDependencies: @@ -2571,6 +3308,10 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + split-on-first@3.0.0: + resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==} + engines: {node: '>=12'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2596,6 +3337,9 @@ 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-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -2611,6 +3355,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + tailwind-merge@1.14.0: + resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} @@ -2618,9 +3365,6 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tiny-typed-emitter@2.1.0: - resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -2656,20 +3400,6 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - ts-pattern@5.4.0: resolution: {integrity: sha512-hgfOMfjlrARCnYtGD/xEAkFHDXuSyuqjzFSltyQCbN689uNvoQL20TVN2XFcLMjfNuwSsQGU+xtH6MrjIwhwUg==} @@ -2679,6 +3409,9 @@ packages: tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + typed-css-modules@0.9.1: resolution: {integrity: sha512-W2HWKncdKd+bLWsnuWB2EyuQBzZ7KJ9Byr/67KLiiyGegcN52rOveun9JR8yAvuL5IXunRMxt0eORMtAUj5bmA==} engines: {node: '>=18.0.0'} @@ -2763,6 +3496,31 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@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 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2779,9 +3537,6 @@ packages: engines: {node: '>=8'} hasBin: true - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - valibot@1.0.0-beta.0: resolution: {integrity: sha512-Q/oine+NPMXdIy3vwluw0vidHLk0mTPUQBRHc+EHZXnEWF3KzLx1YLsVHPVrgHaMGRfV58P9eGOgxJvi0a059w==} peerDependencies: @@ -3000,10 +3755,6 @@ packages: resolution: {integrity: sha512-Z2YZI+SYqK7XdWlloI3lhMiKnCdFCVC4PchpdO+mCYwtiTwncjUbnRK9R1JmkNfdmHyDXuWN3ibJAt0wsqTbLQ==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - zrender@5.6.0: resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} @@ -3030,56 +3781,75 @@ snapshots: bind-event-listener: 3.0.0 raf-schd: 4.0.3 - '@automerge/automerge-repo-network-websocket@1.2.1(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2)': + '@automerge/automerge-codemirror@0.1.0': dependencies: - '@automerge/automerge-repo': 1.2.1(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2) + '@automerge/automerge': 2.2.8 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + codemirror: 6.0.2 + + '@automerge/automerge-repo-network-websocket@2.0.8': + dependencies: + '@automerge/automerge-repo': 2.0.8 cbor-x: 1.6.0 - debug: 4.3.7 + debug: 4.4.0 eventemitter3: 5.0.1 isomorphic-ws: 5.0.0(ws@8.18.0) ws: 8.18.0 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - bufferutil - supports-color - - typescript - utf-8-validate - '@automerge/automerge-repo-storage-indexeddb@1.2.1(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2)': + '@automerge/automerge-repo-react-hooks@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@automerge/automerge-repo': 1.2.1(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2) + '@automerge/automerge': 2.2.8 + '@automerge/automerge-repo': 2.2.0 + eventemitter3: 5.0.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-usestateref: 1.0.9(react@18.3.1) transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - supports-color - - typescript - '@automerge/automerge-repo@1.2.1(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2)': + '@automerge/automerge-repo-storage-indexeddb@2.0.8': + dependencies: + '@automerge/automerge-repo': 2.0.8 + transitivePeerDependencies: + - supports-color + + '@automerge/automerge-repo@2.0.8': dependencies: '@automerge/automerge': 2.2.8 bs58check: 3.0.1 cbor-x: 1.6.0 - debug: 4.3.7 + debug: 4.4.0 + eventemitter3: 5.0.1 + fast-sha256: 1.3.0 + uuid: 9.0.1 + xstate: 5.18.2 + transitivePeerDependencies: + - supports-color + + '@automerge/automerge-repo@2.2.0': + dependencies: + '@automerge/automerge': 2.2.8 + bs58check: 3.0.1 + cbor-x: 1.6.0 + debug: 4.4.0 eventemitter3: 5.0.1 fast-sha256: 1.3.0 - tiny-typed-emitter: 2.1.0 - ts-node: 10.9.2(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2) uuid: 9.0.1 xstate: 5.18.2 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - supports-color - - typescript '@automerge/automerge@2.2.8': dependencies: uuid: 9.0.1 + '@automerge/automerge@3.0.0': {} + '@automerge/prosemirror@0.0.13': dependencies: '@automerge/automerge': 2.2.8 @@ -3264,14 +4034,253 @@ snapshots: '@cbor-extract/cbor-extract-linux-arm64@2.2.0': optional: true - '@cbor-extract/cbor-extract-linux-arm@2.2.0': - optional: true + '@cbor-extract/cbor-extract-linux-arm@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-linux-x64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-win32-x64@2.2.0': + optional: true + + '@codemirror/autocomplete@6.18.6': + dependencies: + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/common': 1.2.3 + + '@codemirror/commands@6.8.1': + dependencies: + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/common': 1.2.3 + + '@codemirror/lang-angular@0.1.4': + dependencies: + '@codemirror/lang-html': 6.4.9 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.11.2 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@codemirror/lang-cpp@6.0.3': + dependencies: + '@codemirror/language': 6.11.2 + '@lezer/cpp': 1.1.3 + + '@codemirror/lang-css@6.3.1': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/css': 1.3.0 + + '@codemirror/lang-go@6.0.1': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/go': 1.0.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.2 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/common': 1.2.3 + '@lezer/css': 1.3.0 + '@lezer/html': 1.3.10 + + '@codemirror/lang-java@6.0.2': + dependencies: + '@codemirror/language': 6.11.2 + '@lezer/java': 1.1.3 + + '@codemirror/lang-javascript@6.2.4': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.2 + '@codemirror/lint': 6.8.5 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/common': 1.2.3 + '@lezer/javascript': 1.5.1 - '@cbor-extract/cbor-extract-linux-x64@2.2.0': - optional: true + '@codemirror/lang-json@6.0.2': + dependencies: + '@codemirror/language': 6.11.2 + '@lezer/json': 1.0.3 - '@cbor-extract/cbor-extract-win32-x64@2.2.0': - optional: true + '@codemirror/lang-less@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.11.2 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@codemirror/lang-liquid@6.2.3': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/lang-html': 6.4.9 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@codemirror/lang-markdown@6.3.3': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/lang-html': 6.4.9 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/common': 1.2.3 + '@lezer/markdown': 1.4.3 + + '@codemirror/lang-php@6.0.2': + dependencies: + '@codemirror/lang-html': 6.4.9 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/php': 1.0.3 + + '@codemirror/lang-python@6.2.1': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/python': 1.1.18 + + '@codemirror/lang-rust@6.0.2': + dependencies: + '@codemirror/language': 6.11.2 + '@lezer/rust': 1.0.2 + + '@codemirror/lang-sass@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/sass': 1.1.0 + + '@codemirror/lang-sql@6.9.0': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@codemirror/lang-vue@0.1.3': + dependencies: + '@codemirror/lang-html': 6.4.9 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.11.2 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@codemirror/lang-wast@6.0.2': + dependencies: + '@codemirror/language': 6.11.2 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@codemirror/lang-xml@6.1.0': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/common': 1.2.3 + '@lezer/xml': 1.0.6 + + '@codemirror/lang-yaml@6.1.2': + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.2 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + '@lezer/yaml': 1.0.3 + + '@codemirror/language-data@6.5.1': + dependencies: + '@codemirror/lang-angular': 0.1.4 + '@codemirror/lang-cpp': 6.0.3 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-go': 6.0.1 + '@codemirror/lang-html': 6.4.9 + '@codemirror/lang-java': 6.0.2 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/lang-json': 6.0.2 + '@codemirror/lang-less': 6.0.2 + '@codemirror/lang-liquid': 6.2.3 + '@codemirror/lang-markdown': 6.3.3 + '@codemirror/lang-php': 6.0.2 + '@codemirror/lang-python': 6.2.1 + '@codemirror/lang-rust': 6.0.2 + '@codemirror/lang-sass': 6.0.2 + '@codemirror/lang-sql': 6.9.0 + '@codemirror/lang-vue': 0.1.3 + '@codemirror/lang-wast': 6.0.2 + '@codemirror/lang-xml': 6.1.0 + '@codemirror/lang-yaml': 6.1.2 + '@codemirror/language': 6.11.2 + '@codemirror/legacy-modes': 6.5.1 + + '@codemirror/language@6.11.2': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + style-mod: 4.1.2 + + '@codemirror/legacy-modes@6.5.1': + dependencies: + '@codemirror/language': 6.11.2 + + '@codemirror/lint@6.8.5': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + crelt: 1.0.6 + + '@codemirror/search@6.5.11': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + crelt: 1.0.6 + + '@codemirror/state@6.5.2': + dependencies: + '@marijn/find-cluster-break': 1.0.2 + + '@codemirror/view@6.38.1': + dependencies: + '@codemirror/state': 6.5.2 + crelt: 1.0.6 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 '@corvu/dialog@0.2.4(solid-js@1.9.2)': dependencies: @@ -3310,10 +4319,6 @@ snapshots: '@floating-ui/dom': 1.6.11 solid-js: 1.9.2 - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - '@esbuild/aix-ppc64@0.21.5': optional: true @@ -3779,6 +4784,10 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.9 + '@floating-ui/core@1.7.2': + dependencies: + '@floating-ui/utils': 0.2.10 + '@floating-ui/dom@1.6.11': dependencies: '@floating-ui/core': 1.6.8 @@ -3789,6 +4798,19 @@ snapshots: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 + '@floating-ui/dom@1.7.2': + dependencies: + '@floating-ui/core': 1.7.2 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.7.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.8': {} '@floating-ui/utils@0.2.9': {} @@ -3843,11 +4865,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jupyter/ydoc@3.0.1': dependencies: '@jupyterlab/nbformat': 4.3.1 @@ -3909,128 +4926,778 @@ snapshots: '@lumino/properties': 2.0.2 '@lumino/signaling': 2.1.3 - '@kobalte/core@0.13.7(solid-js@1.9.2)': + '@kobalte/core@0.13.7(solid-js@1.9.2)': + dependencies: + '@floating-ui/dom': 1.6.11 + '@internationalized/date': 3.5.5 + '@internationalized/number': 3.5.3 + '@kobalte/utils': 0.9.1(solid-js@1.9.2) + '@solid-primitives/props': 3.1.11(solid-js@1.9.2) + '@solid-primitives/resize-observer': 2.0.26(solid-js@1.9.2) + solid-js: 1.9.2 + solid-presence: 0.1.8(solid-js@1.9.2) + solid-prevent-scroll: 0.1.10(solid-js@1.9.2) + + '@kobalte/utils@0.9.1(solid-js@1.9.2)': + dependencies: + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.2) + '@solid-primitives/keyed': 1.2.2(solid-js@1.9.2) + '@solid-primitives/map': 0.4.13(solid-js@1.9.2) + '@solid-primitives/media': 2.2.9(solid-js@1.9.2) + '@solid-primitives/props': 3.1.11(solid-js@1.9.2) + '@solid-primitives/refs': 1.0.8(solid-js@1.9.2) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 + + '@lezer/common@1.2.3': {} + + '@lezer/cpp@1.1.3': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/css@1.3.0': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/go@1.0.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/java@1.1.3': + 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 + + '@lezer/php@1.0.3': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/python@1.1.18': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/rust@1.0.2': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/sass@1.1.0': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/xml@1.0.6': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/yaml@1.0.3': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lumino/algorithm@2.0.2': {} + + '@lumino/commands@2.3.1': + dependencies: + '@lumino/algorithm': 2.0.2 + '@lumino/coreutils': 2.2.0 + '@lumino/disposable': 2.1.3 + '@lumino/domutils': 2.0.2 + '@lumino/keyboard': 2.0.2 + '@lumino/signaling': 2.1.3 + '@lumino/virtualdom': 2.0.2 + + '@lumino/coreutils@2.2.0': + dependencies: + '@lumino/algorithm': 2.0.2 + + '@lumino/disposable@2.1.3': + dependencies: + '@lumino/signaling': 2.1.3 + + '@lumino/domutils@2.0.2': {} + + '@lumino/keyboard@2.0.2': {} + + '@lumino/polling@2.1.3': + dependencies: + '@lumino/coreutils': 2.2.0 + '@lumino/disposable': 2.1.3 + '@lumino/signaling': 2.1.3 + + '@lumino/properties@2.0.2': {} + + '@lumino/signaling@2.1.3': + dependencies: + '@lumino/algorithm': 2.0.2 + '@lumino/coreutils': 2.2.0 + + '@lumino/virtualdom@2.0.2': + dependencies: + '@lumino/algorithm': 2.0.2 + + '@marijn/find-cluster-break@1.0.2': {} + + '@mdx-js/mdx@2.3.0': + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/mdx': 2.0.13 + estree-util-build-jsx: 2.2.2 + estree-util-is-identifier-name: 2.1.0 + estree-util-to-js: 1.2.0 + estree-walker: 3.0.3 + hast-util-to-estree: 2.3.3 + markdown-extensions: 1.1.1 + periscopic: 3.1.0 + remark-mdx: 2.3.0 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.2 + unist-util-stringify-position: 3.0.3 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + + '@modular-forms/solid@0.24.1(solid-js@1.9.2)(typescript@5.6.2)': + dependencies: + solid-js: 1.9.2 + valibot: 1.0.0-beta.0(typescript@5.6.2) + transitivePeerDependencies: + - typescript + + '@noble/hashes@1.5.0': {} + + '@patchwork/sdk@file:../../../patchwork/sdk': + dependencies: + '@automerge/automerge': 3.0.0 + '@automerge/automerge-codemirror': 0.1.0 + '@automerge/automerge-repo': 2.2.0 + '@automerge/automerge-repo-react-hooks': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@codemirror/autocomplete': 6.18.6 + '@codemirror/commands': 6.8.1 + '@codemirror/lang-markdown': 6.3.3 + '@codemirror/language': 6.11.2 + '@codemirror/language-data': 6.5.1 + '@codemirror/search': 6.5.11 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + '@lezer/highlight': 1.2.1 + '@radix-ui/react-avatar': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-checkbox': 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-context-menu': 2.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.1.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dropdown-menu': 2.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-label': 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': 1.1.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-progress': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slider': 1.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(react@18.3.1) + '@radix-ui/react-switch': 1.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tabs': 1.1.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toast': 1.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tooltip': 1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + class-variance-authority: 0.7.1 + clsx: 2.1.1 + cmdk: 0.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + codemirror: 6.0.2 + diff: 5.2.0 + eventemitter3: 5.0.1 + lodash-es: 4.17.21 + lucide: 0.433.0 + lucide-react: 0.456.0(react@18.3.1) + query-string: 8.2.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-merge-refs: 2.1.1 + resolve.exports: 2.0.3 + signia: 0.1.5 + signia-react: 0.1.5(react@18.3.1) + tailwind-merge: 1.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - supports-color + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@qubit-rs/client@0.4.5': {} + + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.0.0': + dependencies: + '@babel/runtime': 7.25.6 + + '@radix-ui/primitive@1.1.2': {} + + '@radix-ui/react-arrow@1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-avatar@1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-checkbox@1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-collection@1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-compose-refs@1.0.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + react: 18.3.1 + + '@radix-ui/react-compose-refs@1.1.2(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@radix-ui/react-context-menu@2.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-menu': 2.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-context@1.0.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + react: 18.3.1 + + '@radix-ui/react-context@1.1.2(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@radix-ui/react-dialog@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) + '@radix-ui/react-context': 1.0.0(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.0(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.0(react@18.3.1) + '@radix-ui/react-portal': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.0(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.5.4(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + + '@radix-ui/react-dialog@1.1.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.2(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(react@18.3.1) + + '@radix-ui/react-direction@1.1.1(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-dismissable-layer@1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-dropdown-menu@2.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-id': 1.1.1(react@18.3.1) + '@radix-ui/react-menu': 2.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-focus-guards@1.0.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + react: 18.3.1 + + '@radix-ui/react-focus-guards@1.1.2(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@radix-ui/react-focus-scope@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-focus-scope@1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-id@1.0.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.3.1) + react: 18.3.1 + + '@radix-ui/react-id@1.1.1(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.11 - '@internationalized/date': 3.5.5 - '@internationalized/number': 3.5.3 - '@kobalte/utils': 0.9.1(solid-js@1.9.2) - '@solid-primitives/props': 3.1.11(solid-js@1.9.2) - '@solid-primitives/resize-observer': 2.0.26(solid-js@1.9.2) - solid-js: 1.9.2 - solid-presence: 0.1.8(solid-js@1.9.2) - solid-prevent-scroll: 0.1.10(solid-js@1.9.2) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + react: 18.3.1 - '@kobalte/utils@0.9.1(solid-js@1.9.2)': + '@radix-ui/react-label@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.2) - '@solid-primitives/keyed': 1.2.2(solid-js@1.9.2) - '@solid-primitives/map': 0.4.13(solid-js@1.9.2) - '@solid-primitives/media': 2.2.9(solid-js@1.9.2) - '@solid-primitives/props': 3.1.11(solid-js@1.9.2) - '@solid-primitives/refs': 1.0.8(solid-js@1.9.2) - '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) - solid-js: 1.9.2 + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-menu@2.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.2(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(react@18.3.1) + '@radix-ui/react-popper': 1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(react@18.3.1) + + '@radix-ui/react-popover@1.1.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.2(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(react@18.3.1) + '@radix-ui/react-popper': 1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(react@18.3.1) + + '@radix-ui/react-popper@1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.1(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(react@18.3.1) + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@lumino/algorithm@2.0.2': {} + '@radix-ui/react-portal@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-primitive': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@lumino/commands@2.3.1': + '@radix-ui/react-portal@1.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@lumino/algorithm': 2.0.2 - '@lumino/coreutils': 2.2.0 - '@lumino/disposable': 2.1.3 - '@lumino/domutils': 2.0.2 - '@lumino/keyboard': 2.0.2 - '@lumino/signaling': 2.1.3 - '@lumino/virtualdom': 2.0.2 + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@lumino/coreutils@2.2.0': + '@radix-ui/react-presence@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@lumino/algorithm': 2.0.2 + '@babel/runtime': 7.25.6 + '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@lumino/disposable@2.1.3': + '@radix-ui/react-presence@1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@lumino/signaling': 2.1.3 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@lumino/domutils@2.0.2': {} + '@radix-ui/react-primitive@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-slot': 1.0.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@lumino/keyboard@2.0.2': {} + '@radix-ui/react-primitive@2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.2.3(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@lumino/polling@2.1.3': + '@radix-ui/react-progress@1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@lumino/coreutils': 2.2.0 - '@lumino/disposable': 2.1.3 - '@lumino/signaling': 2.1.3 + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-roving-focus@1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(react@18.3.1) + '@radix-ui/react-id': 1.1.1(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-select@2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.2(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(react@18.3.1) + '@radix-ui/react-popper': 1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(react@18.3.1) + + '@radix-ui/react-slider@1.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@lumino/properties@2.0.2': {} + '@radix-ui/react-slot@1.0.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) + react: 18.3.1 - '@lumino/signaling@2.1.3': + '@radix-ui/react-slot@1.2.3(react@18.3.1)': dependencies: - '@lumino/algorithm': 2.0.2 - '@lumino/coreutils': 2.2.0 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + react: 18.3.1 - '@lumino/virtualdom@2.0.2': + '@radix-ui/react-switch@1.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@lumino/algorithm': 2.0.2 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-tabs@1.1.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(react@18.3.1) + '@radix-ui/react-id': 1.1.1(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-toast@1.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-tooltip@1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(react@18.3.1) + '@radix-ui/react-context': 1.1.2(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(react@18.3.1) + '@radix-ui/react-popper': 1.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@mdx-js/mdx@2.3.0': + '@radix-ui/react-use-callback-ref@1.0.0(react@18.3.1)': dependencies: - '@types/estree-jsx': 1.0.5 - '@types/mdx': 2.0.13 - estree-util-build-jsx: 2.2.2 - estree-util-is-identifier-name: 2.1.0 - estree-util-to-js: 1.2.0 - estree-walker: 3.0.3 - hast-util-to-estree: 2.3.3 - markdown-extensions: 1.1.1 - periscopic: 3.1.0 - remark-mdx: 2.3.0 - remark-parse: 10.0.2 - remark-rehype: 10.1.0 - unified: 10.1.2 - unist-util-position-from-estree: 1.1.2 - unist-util-stringify-position: 3.0.3 - unist-util-visit: 4.1.2 - vfile: 5.3.7 - transitivePeerDependencies: - - supports-color + '@babel/runtime': 7.25.6 + react: 18.3.1 - '@modular-forms/solid@0.24.1(solid-js@1.9.2)(typescript@5.6.2)': + '@radix-ui/react-use-callback-ref@1.1.1(react@18.3.1)': dependencies: - solid-js: 1.9.2 - valibot: 1.0.0-beta.0(typescript@5.6.2) - transitivePeerDependencies: - - typescript + react: 18.3.1 - '@noble/hashes@1.5.0': {} + '@radix-ui/react-use-controllable-state@1.0.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1) + react: 18.3.1 - '@pkgjs/parseargs@0.11.0': - optional: true + '@radix-ui/react-use-controllable-state@1.2.2(react@18.3.1)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + react: 18.3.1 - '@protobufjs/aspromise@1.1.2': {} + '@radix-ui/react-use-effect-event@0.0.2(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + react: 18.3.1 - '@protobufjs/base64@1.1.2': {} + '@radix-ui/react-use-escape-keydown@1.0.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1) + react: 18.3.1 - '@protobufjs/codegen@2.0.4': {} + '@radix-ui/react-use-escape-keydown@1.1.1(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(react@18.3.1) + react: 18.3.1 - '@protobufjs/eventemitter@1.1.0': {} + '@radix-ui/react-use-is-hydrated@0.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + use-sync-external-store: 1.5.0(react@18.3.1) - '@protobufjs/fetch@1.1.0': + '@radix-ui/react-use-layout-effect@1.0.0(react@18.3.1)': dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 + '@babel/runtime': 7.25.6 + react: 18.3.1 - '@protobufjs/float@1.0.2': {} + '@radix-ui/react-use-layout-effect@1.1.1(react@18.3.1)': + dependencies: + react: 18.3.1 - '@protobufjs/inquire@1.1.0': {} + '@radix-ui/react-use-previous@1.1.1(react@18.3.1)': + dependencies: + react: 18.3.1 - '@protobufjs/path@1.1.2': {} + '@radix-ui/react-use-rect@1.1.1(react@18.3.1)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 18.3.1 - '@protobufjs/pool@1.1.0': {} + '@radix-ui/react-use-size@1.1.1(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(react@18.3.1) + react: 18.3.1 - '@protobufjs/utf8@1.1.0': {} + '@radix-ui/react-visually-hidden@1.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@qubit-rs/client@0.4.5': {} + '@radix-ui/rect@1.1.1': {} '@rjsf/utils@5.22.4(react@18.3.1)': dependencies: @@ -4212,73 +5879,10 @@ snapshots: dependencies: solid-js: 1.9.2 - '@swc/core-darwin-arm64@1.11.21': - optional: true - - '@swc/core-darwin-x64@1.11.21': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.11.21': - optional: true - - '@swc/core-linux-arm64-gnu@1.11.21': - optional: true - - '@swc/core-linux-arm64-musl@1.11.21': - optional: true - - '@swc/core-linux-x64-gnu@1.11.21': - optional: true - - '@swc/core-linux-x64-musl@1.11.21': - optional: true - - '@swc/core-win32-arm64-msvc@1.11.21': - optional: true - - '@swc/core-win32-ia32-msvc@1.11.21': - optional: true - - '@swc/core-win32-x64-msvc@1.11.21': - optional: true - - '@swc/core@1.11.21': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.21 - optionalDependencies: - '@swc/core-darwin-arm64': 1.11.21 - '@swc/core-darwin-x64': 1.11.21 - '@swc/core-linux-arm-gnueabihf': 1.11.21 - '@swc/core-linux-arm64-gnu': 1.11.21 - '@swc/core-linux-arm64-musl': 1.11.21 - '@swc/core-linux-x64-gnu': 1.11.21 - '@swc/core-linux-x64-musl': 1.11.21 - '@swc/core-win32-arm64-msvc': 1.11.21 - '@swc/core-win32-ia32-msvc': 1.11.21 - '@swc/core-win32-x64-msvc': 1.11.21 - optional: true - - '@swc/counter@0.1.3': - optional: true - '@swc/helpers@0.5.13': dependencies: tslib: 2.7.0 - '@swc/types@0.1.21': - dependencies: - '@swc/counter': 0.1.3 - optional: true - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.6 @@ -4399,10 +6003,6 @@ snapshots: dependencies: acorn: 8.12.1 - acorn-walk@8.3.4: - dependencies: - acorn: 8.12.1 - acorn@8.12.1: {} ajv@8.17.1: @@ -4433,10 +6033,12 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - arg@4.1.3: {} - argparse@2.0.1: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + assertion-error@2.0.1: {} astring@1.9.0: {} @@ -4579,12 +6181,36 @@ snapshots: chownr@2.0.0: {} + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@2.1.1: {} + + cmdk@0.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@radix-ui/react-dialog': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + + codemirror@6.0.2: + dependencies: + '@codemirror/autocomplete': 6.18.6 + '@codemirror/commands': 6.8.1 + '@codemirror/language': 6.11.2 + '@codemirror/lint': 6.8.5 + '@codemirror/search': 6.5.11 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.1 + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -4616,7 +6242,7 @@ snapshots: convert-source-map@2.0.0: {} - create-require@1.1.1: {} + crelt@1.0.6: {} cross-spawn@7.0.3: dependencies: @@ -4640,6 +6266,8 @@ snapshots: dependencies: character-entities: 2.0.2 + decode-uri-component@0.4.1: {} + deep-eql@5.0.2: {} dequal@2.0.3: {} @@ -4647,14 +6275,14 @@ snapshots: detect-libc@2.0.3: optional: true + detect-node-es@1.1.0: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 diff-sequences@29.6.3: {} - diff@4.0.2: {} - diff@5.2.0: {} eastasianwidth@0.2.0: {} @@ -4783,6 +6411,8 @@ snapshots: dependencies: to-regex-range: 5.0.1 + filter-obj@5.1.0: {} + firebase@10.14.0: dependencies: '@firebase/analytics': 0.10.8(@firebase/app@0.10.12) @@ -4838,6 +6468,8 @@ snapshots: get-caller-file@2.0.5: {} + get-nonce@1.0.1: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -5102,18 +6734,22 @@ snapshots: dependencies: yallist: 3.1.1 + lucide-react@0.456.0(react@18.3.1): + dependencies: + react: 18.3.1 + lucide-solid@0.471.0(solid-js@1.9.2): dependencies: solid-js: 1.9.2 + lucide@0.433.0: {} + lunr@2.3.9: {} magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - make-error@1.3.6: {} - markdown-extensions@1.1.1: {} markdown-it@14.1.0: @@ -5676,12 +7312,60 @@ snapshots: punycode.js@2.3.1: {} + query-string@8.2.0: + dependencies: + decode-uri-component: 0.4.1 + filter-obj: 5.1.0 + split-on-first: 3.0.0 + querystringify@2.2.0: {} raf-schd@4.0.3: {} + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + react-is@18.3.1: {} + react-merge-refs@2.1.1: {} + + react-remove-scroll-bar@2.3.8(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.3(react@18.3.1) + tslib: 2.8.1 + + react-remove-scroll@2.5.4(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.8(react@18.3.1) + react-style-singleton: 2.2.3(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(react@18.3.1) + use-sidecar: 1.1.3(react@18.3.1) + + react-remove-scroll@2.7.1(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.8(react@18.3.1) + react-style-singleton: 2.2.3(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(react@18.3.1) + use-sidecar: 1.1.3(react@18.3.1) + + react-style-singleton@2.2.3(react@18.3.1): + dependencies: + get-nonce: 1.0.1 + react: 18.3.1 + tslib: 2.8.1 + + react-usestateref@1.0.9(react@18.3.1): + dependencies: + react: 18.3.1 + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -5728,6 +7412,8 @@ snapshots: requires-port@1.0.0: {} + resolve.exports@2.0.3: {} + resolve@1.22.8: dependencies: is-core-module: 2.15.1 @@ -5768,6 +7454,10 @@ snapshots: safe-buffer@5.2.1: {} + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + semver@6.3.1: {} seroval-plugins@1.1.1(seroval@1.1.1): @@ -5795,6 +7485,13 @@ snapshots: signal-exit@4.1.0: {} + signia-react@0.1.5(react@18.3.1): + dependencies: + react: 18.3.1 + signia: 0.1.5 + + signia@0.1.5: {} + solid-dismissible@0.1.1(solid-js@1.9.2): dependencies: '@corvu/utils': 0.4.2(solid-js@1.9.2) @@ -5851,6 +7548,8 @@ snapshots: space-separated-tokens@2.0.2: {} + split-on-first@3.0.0: {} + stackback@0.0.2: {} std-env@3.8.0: {} @@ -5880,6 +7579,8 @@ snapshots: dependencies: ansi-regex: 6.1.0 + style-mod@4.1.2: {} + style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 @@ -5894,6 +7595,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + tailwind-merge@1.14.0: {} + tar@6.2.1: dependencies: chownr: 2.0.0 @@ -5905,8 +7608,6 @@ snapshots: tiny-invariant@1.3.3: {} - tiny-typed-emitter@2.1.0: {} - tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -5929,32 +7630,14 @@ snapshots: trough@2.2.0: {} - ts-node@10.9.2(@swc/core@1.11.21)(@types/node@22.7.4)(typescript@5.6.2): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.7.4 - acorn: 8.12.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.6.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.11.21 - ts-pattern@5.4.0: {} tslib@2.3.0: {} tslib@2.7.0: {} + tslib@2.8.1: {} + typed-css-modules@0.9.1: dependencies: camelcase: 6.3.0 @@ -6080,6 +7763,21 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 + use-callback-ref@1.3.3(react@18.3.1): + dependencies: + react: 18.3.1 + tslib: 2.8.1 + + use-sidecar@1.1.3(react@18.3.1): + dependencies: + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.8.1 + + use-sync-external-store@1.5.0(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} uuid@11.0.3: {} @@ -6093,8 +7791,6 @@ snapshots: kleur: 4.1.5 sade: 1.8.1 - v8-compile-cache-lib@3.0.1: {} - valibot@1.0.0-beta.0(typescript@5.6.2): optionalDependencies: typescript: 5.6.2 @@ -6312,8 +8008,6 @@ snapshots: dependencies: lib0: 0.2.98 - yn@3.1.1: {} - zrender@5.6.0: dependencies: tslib: 2.3.0 diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 57ecced79..84af6e1f9 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -1,64 +1,32 @@ -import { Repo } from "@automerge/automerge-repo"; +import { isValidAutomergeUrl, Repo } from "@automerge/automerge-repo"; import { BrowserWebSocketClientAdapter } from "@automerge/automerge-repo-network-websocket"; import { IndexedDBStorageAdapter } from "@automerge/automerge-repo-storage-indexeddb"; -import { type FirebaseOptions, initializeApp } from "firebase/app"; import invariant from "tiny-invariant"; import * as uuid from "uuid"; import { MultiProvider } from "@solid-primitives/context"; import { Navigate, type RouteDefinition, type RouteSectionProps, Router } from "@solidjs/router"; -import { FirebaseProvider } from "solid-firebase"; -import { ErrorBoundary, Show, createResource, createSignal, lazy } from "solid-js"; -import Dialog, { Content, Portal } from "@corvu/dialog"; -import { getAuth, signOut } from "firebase/auth"; -import { type Api, ApiContext, createRpcClient, useApi } from "./api"; +import { ErrorBoundary, Show, createResource, lazy } from "solid-js"; + import { helpRoutes } from "./help/routes"; import { createModel } from "./model/document"; import { PageContainer } from "./page/page_container"; import { TheoryLibraryContext, stdTheories } from "./stdlib"; import { ErrorBoundaryDialog } from "./util/errors"; +import { Api, ApiContext, useApi } from "./api"; -const serverUrl = import.meta.env.VITE_SERVER_URL; const repoUrl = import.meta.env.VITE_AUTOMERGE_REPO_URL; -const firebaseOptions = JSON.parse(import.meta.env.VITE_FIREBASE_OPTIONS) as FirebaseOptions; const Root = (props: RouteSectionProps) => { - invariant(serverUrl, "Must set environment variable VITE_SERVER_URL"); invariant(repoUrl, "Must set environment variable VITE_AUTOMERGE_REPO_URL"); - const serverHost = new URL(serverUrl).host; - - const firebaseApp = initializeApp(firebaseOptions); - const rpc = createRpcClient(serverUrl, firebaseApp); const repo = new Repo({ storage: new IndexedDBStorageAdapter("catcolab"), network: [new BrowserWebSocketClientAdapter(repoUrl)], }); - const api: Api = { serverHost, rpc, repo }; - - const [isSessionInvalid] = createResource( - async () => { - const result = await rpc.validate_session.query(); - if (result.tag === "Err") { - await signOut(getAuth(firebaseApp)); - - // Why this needs to be a separate modal: - // We cannot automatically reload the page because a bug in validate_session might - // trigger an infinite reload loop, so the reload must be user-triggered. Although - // ErrorBoundary might seem like the natural place to handle this, it only catches the - // first error, and there's no guarantee that an error from validate_session will be the - // first one encountered. - return true; - } - - return false; - }, - { - initialValue: false, - }, - ); + const api: Api = { repo }; return ( ) => { [TheoryLibraryContext, stdTheories], ]} > - - }> - {props.children} - - - - - + }> + {props.children} + ); }; -export function SessionExpiredModal() { - const [reloading, setReloading] = createSignal(false); - - const handleReload = () => { - setReloading(true); - location.reload(); - }; - - return ( - - - -

Session Expired

-

Your session is no longer valid. Please reload the page to continue.

- -
-
-
- ); -} - function CreateModel() { const api = useApi(); @@ -112,7 +52,10 @@ function CreateModel() { } const refIsUUIDFilter = { - ref: (ref: string) => uuid.validate(ref), + ref: (ref: string) => { + console.log("ref", ref, isValidAutomergeUrl(ref)); + return isValidAutomergeUrl(ref); + }, }; const routes: RouteDefinition[] = [ @@ -140,14 +83,6 @@ const routes: RouteDefinition[] = [ component: lazy(() => import("./help/help_container")), children: helpRoutes, }, - { - path: "/dev/*", - component: (props) => { - const url = `https://next.catcolab.org${props.location.pathname}`; - window.location.replace(url); - return null; - }, - }, { path: "/profile", component: lazy(() => import("./user/profile")), diff --git a/packages/frontend/src/analysis/analysis_editor.tsx b/packages/frontend/src/analysis/analysis_editor.tsx index 070c2d18f..78065ab9d 100644 --- a/packages/frontend/src/analysis/analysis_editor.tsx +++ b/packages/frontend/src/analysis/analysis_editor.tsx @@ -149,9 +149,7 @@ export function AnalysisDocumentEditor(props: { ); } -const AnalysisMenu = (props: { - liveAnalysis: LiveAnalysisDocument; -}) => { +const AnalysisMenu = (props: { liveAnalysis: LiveAnalysisDocument }) => { const liveDocument = () => { switch (props.liveAnalysis.analysisType) { case "diagram": @@ -166,9 +164,7 @@ const AnalysisMenu = (props: { return ; }; -const AnalysisOfPane = (props: { - liveAnalysis: LiveAnalysisDocument; -}) => ( +const AnalysisOfPane = (props: { liveAnalysis: LiveAnalysisDocument }) => ( {(liveModel) => } @@ -213,7 +209,7 @@ export function AnalysisNotebookEditor(props: { ); } -function AnalysisCellEditor(props: FormalCellEditorProps>) { +export function AnalysisCellEditor(props: FormalCellEditorProps>) { const liveAnalysis = useContext(LiveAnalysisContext); invariant(liveAnalysis, "Live analysis should be provided as context for cell editor"); diff --git a/packages/frontend/src/analysis/document.ts b/packages/frontend/src/analysis/document.ts index e92accd46..a03a2a01e 100644 --- a/packages/frontend/src/analysis/document.ts +++ b/packages/frontend/src/analysis/document.ts @@ -74,6 +74,7 @@ export type LiveAnalysisDocument = LiveModelAnalysisDocument | LiveDiagramAnalys export async function createAnalysis(api: Api, analysisType: AnalysisType, analysisOf: StableRef) { const init = newAnalysisDocument(analysisType, analysisOf); + console.log("init", init); const result = await api.rpc.new_ref.mutate(init as InterfaceToType); invariant(result.tag === "Ok", "Failed to create a new analysis"); diff --git a/packages/frontend/src/api/document.ts b/packages/frontend/src/api/document.ts index 38e8fd0a0..ea1cf4491 100644 --- a/packages/frontend/src/api/document.ts +++ b/packages/frontend/src/api/document.ts @@ -1,8 +1,10 @@ import { + AutomergeUrl, type ChangeFn, type DocHandle, type DocHandleChangePayload, type DocumentId, + isValidAutomergeUrl, Repo, } from "@automerge/automerge-repo"; import { type Accessor, createEffect, createSignal } from "solid-js"; @@ -12,7 +14,6 @@ import * as uuid from "uuid"; import type { Permissions } from "catcolab-api"; import type { Document } from "catlog-wasm"; -import { PermissionsError } from "../util/errors"; import type { Api } from "./types"; /** An Automerge repo with no networking, used for read-only documents. */ @@ -54,30 +55,13 @@ and upgrade it to the latest version. */ export async function getLiveDoc( api: Api, - refId: string, + refId: AutomergeUrl, docType?: string, ): Promise> { - invariant(uuid.validate(refId), () => `Invalid document ref ${refId}`); - const { rpc, repo } = api; - - const result = await rpc.get_doc.query(refId); - if (result.tag !== "Ok") { - if (result.code === 403) { - throw new PermissionsError(result.message); - } else { - throw new Error(`Failed to retrieve document: ${result.message}`); - } - } - const refDoc = result.content; - - let docHandle: DocHandle; - if (refDoc.tag === "Live") { - const docId = refDoc.docId as DocumentId; - docHandle = repo.find(docId) as DocHandle; - } else { - const init = refDoc.content as unknown as Doc; - docHandle = localRepo.create(init); - } + invariant(isValidAutomergeUrl(refId), () => `Invalid document ref ${refId}`); + const { repo } = api; + + let docHandle = await repo.find(refId); const doc = await makeDocHandleReactive(docHandle); if (docType !== undefined) { @@ -89,21 +73,26 @@ export async function getLiveDoc( const changeDoc = (f: ChangeFn) => docHandle.change(f); - const permissions = refDoc.permissions; + const permissions: Permissions = { anyone: "Own", user: "Own", users: [] }; return { doc, changeDoc, docHandle, permissions }; } /** Create a Solid Store that tracks an Automerge document. */ export async function makeDocHandleReactive(handle: DocHandle): Promise { - const init = await handle.doc(); + const init = handle.doc(); const [store, setStore] = createStore(init as T); const onChange = (payload: DocHandleChangePayload) => { // Use [`reconcile`](https://www.solidjs.com/tutorial/stores_immutable) // function to diff the data and thus avoid re-rendering the whole DOM. + setStore(reconcile(payload.doc)); + + // todo: using reconcile leads to corrupt state when switching branches + // rerendering every time seems fine + // setStore(payload.doc); }; handle.on("change", onChange); diff --git a/packages/frontend/src/api/types.ts b/packages/frontend/src/api/types.ts index 4703c5c08..14713dc08 100644 --- a/packages/frontend/src/api/types.ts +++ b/packages/frontend/src/api/types.ts @@ -1,16 +1,8 @@ import type { Repo } from "@automerge/automerge-repo"; - import type { Uuid } from "catlog-wasm"; -import type { RpcClient } from "./rpc"; /** Bundle of everything needed to interact with the CatColab backend. */ export type Api = { - /** Host part of the URL for the CatColab backend server. */ - serverHost: string; - - /** RPC client for the CatColab backend API. */ - rpc: RpcClient; - /** Automerge repo connected to the Automerge document server. */ repo: Repo; }; diff --git a/packages/frontend/src/diagram/document.ts b/packages/frontend/src/diagram/document.ts index 0c95e8154..7b88e8a81 100644 --- a/packages/frontend/src/diagram/document.ts +++ b/packages/frontend/src/diagram/document.ts @@ -9,6 +9,7 @@ import type { Uuid, } from "catlog-wasm"; import { elaborateDiagram } from "catlog-wasm"; + import { type Api, type LiveDoc, type StableRef, getLiveDoc } from "../api"; import { type LiveModelDocument, getLiveModel } from "../model"; import { newNotebook } from "../notebook"; diff --git a/packages/frontend/src/help/routes.ts b/packages/frontend/src/help/routes.ts index 9faccf5a7..fe271ff85 100644 --- a/packages/frontend/src/help/routes.ts +++ b/packages/frontend/src/help/routes.ts @@ -1,12 +1,12 @@ import type { RouteDefinition } from "@solidjs/router"; import { lazy } from "solid-js"; -import { stdTheories } from "../stdlib"; +// import { stdTheories } from "../stdlib"; import { lazyMdx } from "../util/mdx"; -const theoryWithIdFilter = { +/* const theoryWithIdFilter = { id: (id: string) => stdTheories.has(id), -}; +};*/ export const helpRoutes: RouteDefinition[] = [ { @@ -21,11 +21,11 @@ export const helpRoutes: RouteDefinition[] = [ path: "/theories", component: lazy(() => import("./theories")), }, - { + /*{ path: "/theory/:id", matchFilters: theoryWithIdFilter, component: lazy(() => import("./theory")), - }, + },*/ { path: "/quick-intro", component: lazyMdx(() => import("./quick_intro.mdx")), diff --git a/packages/frontend/src/model/document.ts b/packages/frontend/src/model/document.ts index e9bf02046..ca3c6fc72 100644 --- a/packages/frontend/src/model/document.ts +++ b/packages/frontend/src/model/document.ts @@ -9,6 +9,7 @@ import { type Uuid, elaborateModel, } from "catlog-wasm"; + import { type Api, type LiveDoc, getLiveDoc } from "../api"; import { newNotebook } from "../notebook"; import type { TheoryLibrary } from "../stdlib"; @@ -139,10 +140,15 @@ export async function createModel( init = initOrTheoryId; } - const result = await api.rpc.new_ref.mutate(init as InterfaceToType); - invariant(result.tag === "Ok", "Failed to create model"); + console.log("init", init); + const handle = api.repo.create(init); + + /* const result = await api.rpc.new_ref.mutate( + init as InterfaceToType + );*/ + // invariant(result.tag === "Ok", "Failed to create model"); - return result.content; + return handle.documentId; } /** Retrieve a model from the backend and make it "live" for editing. */ diff --git a/packages/frontend/src/model/model_editor.tsx b/packages/frontend/src/model/model_editor.tsx index 406d6f524..f0c91f937 100644 --- a/packages/frontend/src/model/model_editor.tsx +++ b/packages/frontend/src/model/model_editor.tsx @@ -1,8 +1,8 @@ import { useParams } from "@solidjs/router"; -import { Match, Show, Switch, createResource, useContext } from "solid-js"; +import { Accessor, Match, Show, Switch, createResource, useContext } from "solid-js"; import invariant from "tiny-invariant"; -import type { ModelJudgment } from "catlog-wasm"; +import type { Cell, ModelJudgment, Uuid } from "catlog-wasm"; import { useApi } from "../api"; import { InlineInput } from "../components"; import { @@ -35,6 +35,7 @@ import { newObjectDecl, } from "./types"; +import { Annotation } from "@patchwork/sdk/versionControl"; import "./model_editor.css"; export default function ModelPage() { @@ -56,9 +57,7 @@ export default function ModelPage() { ); } -export function ModelDocumentEditor(props: { - liveModel: LiveModelDocument; -}) { +export function ModelDocumentEditor(props: { liveModel: LiveModelDocument }) { return (
@@ -78,9 +77,7 @@ export function ModelDocumentEditor(props: { /** Pane containing a model notebook plus a header with the title and theory. */ -export function ModelPane(props: { - liveModel: LiveModelDocument; -}) { +export function ModelPane(props: { liveModel: LiveModelDocument }) { const theories = useContext(TheoryLibraryContext); invariant(theories, "Library of theories should be provided as context"); @@ -120,6 +117,8 @@ export function ModelPane(props: { */ export function ModelNotebookEditor(props: { liveModel: LiveModelDocument; + annotations?: Accessor>[]>; + onAddComment?: (cellId: Uuid) => void; }) { const liveDoc = () => props.liveModel.liveDoc; @@ -146,7 +145,7 @@ export function ModelNotebookEditor(props: { /** Editor for a notebook cell in a model notebook. */ -function ModelCellEditor(props: FormalCellEditorProps) { +export function ModelCellEditor(props: FormalCellEditorProps) { return ( diff --git a/packages/frontend/src/notebook/notebook_cell.css b/packages/frontend/src/notebook/notebook_cell.css index 810210ea7..9e06717d5 100644 --- a/packages/frontend/src/notebook/notebook_cell.css +++ b/packages/frontend/src/notebook/notebook_cell.css @@ -7,6 +7,28 @@ justify-content: space-between; } +.cell.cell-added { + border-left: 3px solid #68c58a; + background-color: #d4ffe14f; + margin-left: 0px; + padding-left: 4px; +} + +.cell.cell-added.cell-highlighted { + background-color: #aaffc3; +} + +.cell.cell-changed { + border-left: 3px solid #f8b62e; + background-color: #ffefc078; + margin-left: 0px; + padding-left: 4px; +} + +.cell.cell-changed.cell-highlighted { + background-color: #ffd99b; +} + .cell-gutter { position: absolute; top: 50%; diff --git a/packages/frontend/src/notebook/notebook_cell.tsx b/packages/frontend/src/notebook/notebook_cell.tsx index 899a0821d..65569ee2a 100644 --- a/packages/frontend/src/notebook/notebook_cell.tsx +++ b/packages/frontend/src/notebook/notebook_cell.tsx @@ -8,7 +8,13 @@ import type { DocHandle, Prop } from "@automerge/automerge-repo"; import Popover from "@corvu/popover"; import { createAutofocus } from "@solid-primitives/autofocus"; import type { EditorView } from "prosemirror-view"; -import { type JSX, Show, createEffect, createSignal, onCleanup } from "solid-js"; +import { + type JSX, + Show, + createEffect, + createSignal, + onCleanup, +} from "solid-js"; import type { Uuid } from "catlog-wasm"; import { @@ -26,8 +32,10 @@ import Copy from "lucide-solid/icons/copy"; import GripVertical from "lucide-solid/icons/grip-vertical"; import Plus from "lucide-solid/icons/plus"; import Trash2 from "lucide-solid/icons/trash-2"; +import MessageCircle from "lucide-solid/icons/message-circle"; import "./notebook_cell.css"; +import { DiffAnnotationWithUIState } from "@patchwork/sdk/annotations"; /** Actions invokable *within* a cell but affecting the larger notebook state. @@ -64,6 +72,9 @@ export type CellActions = { // The cell has received focus. hasFocused: () => void; + + // Add a comment to the cell. + addComment: () => void; }; const cellDragDataKey = Symbol("notebook-cell"); @@ -84,7 +95,9 @@ const createCellDragData = (cellId: Uuid) => ({ }); /** Check whether the drag data is of notebook cell type. */ -export function isCellDragData(data: Record): data is CellDragData { +export function isCellDragData( + data: Record +): data is CellDragData { return Boolean(data[cellDragDataKey]); } @@ -98,6 +111,7 @@ export function NotebookCell(props: { actions: CellActions; children: JSX.Element; tag?: string; + diffAnnotation?: DiffAnnotationWithUIState; }) { let rootRef!: HTMLDivElement; let handleRef!: HTMLButtonElement; @@ -105,7 +119,8 @@ export function NotebookCell(props: { const [isGutterVisible, setGutterVisible] = createSignal(false); const showGutter = () => setGutterVisible(true); const hideGutter = () => setGutterVisible(false); - const visibility = (isVisible: boolean) => (isVisible ? "visible" : "hidden"); + const visibility = (isVisible: boolean) => + isVisible ? "visible" : "hidden"; const [isMenuOpen, setMenuOpen] = createSignal(false); const openMenu = () => setMenuOpen(true); @@ -132,6 +147,11 @@ export function NotebookCell(props: { icon: , onComplete: props.actions.moveDown, }, + { + name: "Add Comment", + icon: , + onComplete: props.actions.addComment, + }, ]; createEffect(() => { @@ -154,13 +174,23 @@ export function NotebookCell(props: { allowedEdges: ["top", "bottom"], }); }, - }), + }) ); onCleanup(cleanup); }); return ( -
+
@@ -189,7 +223,10 @@ export function NotebookCell(props: { - + diff --git a/packages/frontend/src/notebook/notebook_editor.tsx b/packages/frontend/src/notebook/notebook_editor.tsx index 8c99a02e3..63ed402a7 100644 --- a/packages/frontend/src/notebook/notebook_editor.tsx +++ b/packages/frontend/src/notebook/notebook_editor.tsx @@ -28,6 +28,11 @@ import { } from "./notebook_cell"; import { type FormalCell, newFormalCell, newRichTextCell, newStemCell } from "./types"; +import { getDiffAnnotationAtPointer } from "@patchwork/sdk/annotations"; +import type { AnalysisDoc } from "../../../patchwork/src/analysis_datatype"; +import { CellPointer } from "../../../patchwork/src/annotations"; +import { useAnnotationsOfDoc } from "../../../patchwork/src/annotations_solid"; +import type { ModelDoc } from "../../../patchwork/src/model_datatype"; import "./notebook_editor.css"; /** Constructor for a cell in a notebook. @@ -209,6 +214,8 @@ export function NotebookEditor(props: { onCleanup(cleanup); }); + const { annotations, addComment } = useAnnotationsOfDoc(props.handle.url); + return (
@@ -222,6 +229,13 @@ export function NotebookEditor(props: {
    {(cell, i) => { + const cellPointer = new CellPointer( + props.handle.doc() as ModelDoc | AnalysisDoc, + cell.id, + ); + + const diffAnnotation = () => + getDiffAnnotationAtPointer(cellPointer, annotations()); const isActive = () => activeCell() === i(); const cellActions: CellActions = { activateAbove() { @@ -280,6 +294,9 @@ export function NotebookEditor(props: { hasFocused() { setActiveCell(i()); }, + addComment() { + addComment([cellPointer]); + }, }; return ( @@ -292,6 +309,7 @@ export function NotebookEditor(props: { ? props.cellLabel?.(cell.content) : undefined } + diffAnnotation={diffAnnotation()} > diff --git a/packages/frontend/src/page/menubar.tsx b/packages/frontend/src/page/menubar.tsx index 90d7e8279..1b65ea751 100644 --- a/packages/frontend/src/page/menubar.tsx +++ b/packages/frontend/src/page/menubar.tsx @@ -1,7 +1,5 @@ import { DropdownMenu } from "@kobalte/core/dropdown-menu"; import { useNavigate } from "@solidjs/router"; -import { getAuth, signOut } from "firebase/auth"; -import { useAuth, useFirebaseApp } from "solid-firebase"; import { type JSX, Show, useContext } from "solid-js"; import invariant from "tiny-invariant"; @@ -51,13 +49,7 @@ export const MenuSeparator = DropdownMenu.Separator; Contains menu items common to all pages, plus space for page-specific items. */ -export function AppMenu(props: { - children?: JSX.Element; - disabled?: boolean; -}) { - const firebaseApp = useFirebaseApp(); - const auth = useAuth(getAuth(firebaseApp)); - +export function AppMenu(props: { children?: JSX.Element; disabled?: boolean }) { // Root the dialog here so that it is not destroyed when the menu closes. return ( <> @@ -66,11 +58,6 @@ export function AppMenu(props: { - }> - - - - @@ -145,10 +132,8 @@ function LogInMenuItem() { } function LogOutMenuItem() { - const firebaseApp = useFirebaseApp(); - return ( - signOut(getAuth(firebaseApp))}> + "nah"}> {"Log out"} diff --git a/packages/frontend/src/user/documents.tsx b/packages/frontend/src/user/documents.tsx index 624877dd6..9d044dc26 100644 --- a/packages/frontend/src/user/documents.tsx +++ b/packages/frontend/src/user/documents.tsx @@ -119,13 +119,11 @@ function DocumentsSearch() { } export function RefStubRow(props: { stub: RefStub }) { - const firebaseApp = useFirebaseApp(); - const auth = getAuth(firebaseApp); const navigate = useNavigate(); const owner = props.stub.owner; const hasOwner = owner !== null; - const isOwner = hasOwner && auth.currentUser?.uid === owner?.id; + const isOwner = hasOwner && false; // biome-ignore lint/style/noNonNullAssertion: type narrowing doesn't work for ternary statements const ownerName = hasOwner ? (isOwner ? "me" : owner!.username) : "public"; diff --git a/packages/frontend/src/user/permissions.tsx b/packages/frontend/src/user/permissions.tsx index 54322ca29..c99d8e698 100644 --- a/packages/frontend/src/user/permissions.tsx +++ b/packages/frontend/src/user/permissions.tsx @@ -103,7 +103,9 @@ export function PermissionsForm(props: { value={state.anyone ?? ""} onInput={(evt) => { const value = evt.currentTarget.value; - setState({ anyone: value ? (value as PermissionLevel) : null }); + setState({ + anyone: value ? (value as PermissionLevel) : null, + }); }} > @@ -202,13 +204,14 @@ export function PermissionsButton(props: { } function AnonPermissionsButton() { - const firebaseApp = useFirebaseApp(); - const user = useAuth(getAuth(firebaseApp)); - const [open, setOpen] = createSignal(false); + const user = { + data: null, + loading: false, + }; + const logOut = async () => { - await signOut(getAuth(firebaseApp)); setOpen(false); }; @@ -271,9 +274,7 @@ const ReadonlyPermissionsButton = () => { ); }; -const EditorPermissionsButton = (props: { - permissions: Permissions; -}) => { +const EditorPermissionsButton = (props: { permissions: Permissions }) => { const tooltip = (permissions: Permissions) => ( <> {"This document "} @@ -290,9 +291,7 @@ const EditorPermissionsButton = (props: { ); }; -function OwnerPermissionsButton(props: { - refId?: string; -}) { +function OwnerPermissionsButton(props: { refId?: string }) { const [open, setOpen] = createSignal(false); return ( diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json index a8d934bca..5163778a1 100644 --- a/packages/frontend/tsconfig.json +++ b/packages/frontend/tsconfig.json @@ -23,5 +23,5 @@ "noUncheckedIndexedAccess": true, "noFallthroughCasesInSwitch": true }, - "include": ["src", "vite.config.ts"] + "include": ["src", "vite.config.ts", "../patchwork/src"] } diff --git a/packages/patchwork/.gitignore b/packages/patchwork/.gitignore new file mode 100644 index 000000000..f9097f9ac --- /dev/null +++ b/packages/patchwork/.gitignore @@ -0,0 +1,6 @@ +dist +node_modules +.DS_Store +.vscode +.env + diff --git a/packages/patchwork/package.json b/packages/patchwork/package.json new file mode 100644 index 000000000..ed562375b --- /dev/null +++ b/packages/patchwork/package.json @@ -0,0 +1,46 @@ +{ + "name": "@patchwork/solidjs-demo", + "version": "0.0.1", + "description": "A demo showing how to use SolidJS inside a React app", + "type": "module", + "main": "src/index.ts", + "exports": { + ".": "./dist/index.js" + }, + "scripts": { + "build": "vite build", + "push": "pnpm build && patchwork push", + "format": "biome format --write", + "watch": "nodemon --watch src -e js,tsx,ts,tsx,css,json --exec 'pnpm build && pnpm push'" + }, + "keywords": [], + "author": "Ink & Switch", + "dependencies": { + "@automerge/automerge": "^2.2.9", + "@automerge/automerge-repo": "^2.0.7", + "@automerge/automerge-repo-react-hooks": "^2.0.7", + "@corvu/dialog": "^0.2.4", + "@patchwork/sdk": "link:../../../patchwork/sdk", + "catlog-wasm": "link:../catlog-wasm/pkg", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "solid-element": "^1.8.0", + "solid-js": "link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js", + "tailwindcss": "^4.0.9", + "uuid": "^11.0.3" + }, + "devDependencies": { + "@biomejs/biome": "^1.9.3", + "@tailwindcss/vite": "^4.0.9", + "@types/react": "^18.3.3", + "@types/uuid": "^10.0.0", + "@vitejs/plugin-react": "^4.3.1", + "autoprefixer": "^10.4.20", + "nodemon": "^3.1.9", + "vite": "^5.3.4", + "vite-plugin-css-injected-by-js": "^3.5.2", + "vite-plugin-solid": "^2.10.2", + "vite-plugin-top-level-await": "^1.4.2", + "vite-plugin-wasm": "^3.3.0" + } +} diff --git a/packages/patchwork/patchwork.json b/packages/patchwork/patchwork.json new file mode 100644 index 000000000..bb55b3853 --- /dev/null +++ b/packages/patchwork/patchwork.json @@ -0,0 +1 @@ +{"projectFolderUrl":"automerge:23cyDxqpV718KrmK9xduxP4zEsuf"} \ No newline at end of file diff --git a/packages/patchwork/pnpm-lock.yaml b/packages/patchwork/pnpm-lock.yaml new file mode 100644 index 000000000..774406271 --- /dev/null +++ b/packages/patchwork/pnpm-lock.yaml @@ -0,0 +1,2282 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@automerge/automerge': + specifier: ^2.2.9 + version: 2.2.9 + '@automerge/automerge-repo': + specifier: ^2.0.7 + version: 2.0.7 + '@automerge/automerge-repo-react-hooks': + specifier: ^2.0.7 + version: 2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@corvu/dialog': + specifier: ^0.2.4 + version: 0.2.4(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + '@patchwork/sdk': + specifier: link:../../../patchwork/sdk + version: link:../../../patchwork/sdk + catlog-wasm: + specifier: link:../catlog-wasm/pkg + version: link:../catlog-wasm/pkg + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + solid-element: + specifier: ^1.8.0 + version: 1.9.1(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-js: + specifier: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + version: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + tailwindcss: + specifier: ^4.0.9 + version: 4.0.9 + uuid: + specifier: ^11.0.3 + version: 11.1.0 + devDependencies: + '@biomejs/biome': + specifier: ^1.9.3 + version: 1.9.4 + '@tailwindcss/vite': + specifier: ^4.0.9 + version: 4.0.9(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)) + '@types/react': + specifier: ^18.3.3 + version: 18.3.18 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.3.4(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.5.1) + nodemon: + specifier: ^3.1.9 + version: 3.1.9 + vite: + specifier: ^5.3.4 + version: 5.4.14(@types/node@18.19.75)(lightningcss@1.29.1) + vite-plugin-css-injected-by-js: + specifier: ^3.5.2 + version: 3.5.2(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)) + vite-plugin-solid: + specifier: ^2.10.2 + version: 2.11.6(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js)(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)) + vite-plugin-top-level-await: + specifier: ^1.4.2 + version: 1.4.4(rollup@4.34.2)(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)) + vite-plugin-wasm: + specifier: ^3.3.0 + version: 3.4.1(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@automerge/automerge-repo-react-hooks@2.0.7': + resolution: {integrity: sha512-ow8xrpO+8UybydsIBcpJWxPnQp6duuCF5f8mEbUuvIYjjUgKF+Mk1RnZZRQsaQ9HP7X1iTXn4s3Uc8scAlUPKQ==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + '@automerge/automerge-repo@2.0.7': + resolution: {integrity: sha512-mesv+b5KfN3L1pQCgy2yjhC3Yvg9FttzaFdbDCQ7p/Eed44npPByiB4TXHOzf2tlehAjBB7V5ruejxCRB3NAzQ==} + + '@automerge/automerge@2.2.9': + resolution: {integrity: sha512-6HM52Ops79hAQBWMg/t0MNfGOdEiXyenQjO9F1hKZq0RWDsMLpPa1SzRy/C4/4UyX67sTHuA5CwBpH34SpfZlA==} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.7': + resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.18.6': + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.7': + resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.7': + resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.7': + resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.7': + resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} + engines: {node: '>=6.9.0'} + + '@biomejs/biome@1.9.4': + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.4': + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.4': + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.4': + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.4': + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.4': + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.4': + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.4': + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.4': + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': + resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==} + cpu: [arm64] + os: [darwin] + + '@cbor-extract/cbor-extract-darwin-x64@2.2.0': + resolution: {integrity: sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==} + cpu: [x64] + os: [darwin] + + '@cbor-extract/cbor-extract-linux-arm64@2.2.0': + resolution: {integrity: sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==} + cpu: [arm64] + os: [linux] + + '@cbor-extract/cbor-extract-linux-arm@2.2.0': + resolution: {integrity: sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==} + cpu: [arm] + os: [linux] + + '@cbor-extract/cbor-extract-linux-x64@2.2.0': + resolution: {integrity: sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==} + cpu: [x64] + os: [linux] + + '@cbor-extract/cbor-extract-win32-x64@2.2.0': + resolution: {integrity: sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==} + cpu: [x64] + os: [win32] + + '@corvu/dialog@0.2.4': + resolution: {integrity: sha512-n54vJq+fOy8GVrnYBdJpD6JXNuyx7LOeMrRxwzAvZnYGpW8+AA12tnb/P/2emJj/HjOO5otheGKb0breshdFlA==} + peerDependencies: + solid-js: ^1.8 + + '@corvu/utils@0.4.2': + resolution: {integrity: sha512-Ox2kYyxy7NoXdKWdHeDEjZxClwzO4SKM8plAaVwmAJPxHMqA0rLOoAsa+hBDwRLpctf+ZRnAd/ykguuJidnaTA==} + peerDependencies: + solid-js: ^1.8 + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@noble/hashes@1.7.1': + resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} + engines: {node: ^14.21.3 || >=16} + + '@rollup/plugin-virtual@3.0.2': + resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.34.2': + resolution: {integrity: sha512-6Fyg9yQbwJR+ykVdT9sid1oc2ewejS6h4wzQltmJfSW53N60G/ah9pngXGANdy9/aaE/TcUFpWosdm7JXS1WTQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.2': + resolution: {integrity: sha512-K5GfWe+vtQ3kyEbihrimM38UgX57UqHp+oME7X/EX9Im6suwZfa7Hsr8AtzbJvukTpwMGs+4s29YMSO3rwWtsw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.2': + resolution: {integrity: sha512-PSN58XG/V/tzqDb9kDGutUruycgylMlUE59f40ny6QIRNsTEIZsrNQTJKUN2keMMSmlzgunMFqyaGLmly39sug==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.2': + resolution: {integrity: sha512-gQhK788rQJm9pzmXyfBB84VHViDERhAhzGafw+E5mUpnGKuxZGkMVDa3wgDFKT6ukLC5V7QTifzsUKdNVxp5qQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.2': + resolution: {integrity: sha512-eiaHgQwGPpxLC3+zTAcdKl4VsBl3r0AiJOd1Um/ArEzAjN/dbPK1nROHrVkdnoE6p7Svvn04w3f/jEZSTVHunA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.2': + resolution: {integrity: sha512-lhdiwQ+jf8pewYOTG4bag0Qd68Jn1v2gO1i0mTuiD+Qkt5vNfHVK/jrT7uVvycV8ZchlzXp5HDVmhpzjC6mh0g==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.2': + resolution: {integrity: sha512-lfqTpWjSvbgQP1vqGTXdv+/kxIznKXZlI109WkIFPbud41bjigjNmOAAKoazmRGx+k9e3rtIdbq2pQZPV1pMig==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.2': + resolution: {integrity: sha512-RGjqULqIurqqv+NJTyuPgdZhka8ImMLB32YwUle2BPTDqDoXNgwFjdjQC59FbSk08z0IqlRJjrJ0AvDQ5W5lpw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.2': + resolution: {integrity: sha512-ZvkPiheyXtXlFqHpsdgscx+tZ7hoR59vOettvArinEspq5fxSDSgfF+L5wqqJ9R4t+n53nyn0sKxeXlik7AY9Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.2': + resolution: {integrity: sha512-UlFk+E46TZEoxD9ufLKDBzfSG7Ki03fo6hsNRRRHF+KuvNZ5vd1RRVQm8YZlGsjcJG8R252XFK0xNPay+4WV7w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.2': + resolution: {integrity: sha512-hJhfsD9ykx59jZuuoQgYT1GEcNNi3RCoEmbo5OGfG8RlHOiVS7iVNev9rhLKh7UBYq409f4uEw0cclTXx8nh8Q==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.2': + resolution: {integrity: sha512-g/O5IpgtrQqPegvqopvmdCF9vneLE7eqYfdPWW8yjPS8f63DNam3U4ARL1PNNB64XHZDHKpvO2Giftf43puB8Q==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.2': + resolution: {integrity: sha512-bSQijDC96M6PuooOuXHpvXUYiIwsnDmqGU8+br2U7iPoykNi9JtMUpN7K6xml29e0evK0/g0D1qbAUzWZFHY5Q==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.2': + resolution: {integrity: sha512-49TtdeVAsdRuiUHXPrFVucaP4SivazetGUVH8CIxVsNsaPHV4PFkpLmH9LeqU/R4Nbgky9lzX5Xe1NrzLyraVA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.2': + resolution: {integrity: sha512-j+jFdfOycLIQ7FWKka9Zd3qvsIyugg5LeZuHF6kFlXo6MSOc6R1w37YUVy8VpAKd81LMWGi5g9J25P09M0SSIw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.2': + resolution: {integrity: sha512-aDPHyM/D2SpXfSNCVWCxyHmOqN9qb7SWkY1+vaXqMNMXslZYnwh9V/UCudl6psyG0v6Ukj7pXanIpfZwCOEMUg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.2': + resolution: {integrity: sha512-LQRkCyUBnAo7r8dbEdtNU08EKLCJMgAk2oP5H3R7BnUlKLqgR3dUjrLBVirmc1RK6U6qhtDw29Dimeer8d5hzQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.2': + resolution: {integrity: sha512-wt8OhpQUi6JuPFkm1wbVi1BByeag87LDFzeKSXzIdGcX4bMLqORTtKxLoCbV57BHYNSUSOKlSL4BYYUghainYA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.2': + resolution: {integrity: sha512-rUrqINax0TvrPBXrFKg0YbQx18NpPN3NNrgmaao9xRNbTwek7lOXObhx8tQy8gelmQ/gLaGy1WptpU2eKJZImg==} + cpu: [x64] + os: [win32] + + '@swc/core-darwin-arm64@1.10.14': + resolution: {integrity: sha512-Dh4VyrhDDb05tdRmqJ/MucOPMTnrB4pRJol18HVyLlqu1HOT5EzonUniNTCdQbUXjgdv5UVJSTE1lYTzrp+myA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.10.14': + resolution: {integrity: sha512-KpzotL/I0O12RE3tF8NmQErINv0cQe/0mnN/Q50ESFzB5kU6bLgp2HMnnwDTm/XEZZRJCNe0oc9WJ5rKbAJFRQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.10.14': + resolution: {integrity: sha512-20yRXZjMJVz1wp1TcscKiGTVXistG+saIaxOmxSNQia1Qun3hSWLL+u6+5kXbfYGr7R2N6kqSwtZbIfJI25r9Q==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.10.14': + resolution: {integrity: sha512-Gy7cGrNkiMfPxQyLGxdgXPwyWzNzbHuWycJFcoKBihxZKZIW8hkPBttkGivuLC+0qOgsV2/U+S7tlvAju7FtmQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.10.14': + resolution: {integrity: sha512-+oYVqJvFw62InZ8PIy1rBACJPC2WTe4vbVb9kM1jJj2D7dKLm9acnnYIVIDsM5Wo7Uab8RvPHXVbs19IBurzuw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.10.14': + resolution: {integrity: sha512-OmEbVEKQFLQVHwo4EJl9osmlulURy46k232Opfpn/1ji0t2KcNCci3POsnfMuoZjLkGJv8vGNJdPQxX+CP+wSA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.10.14': + resolution: {integrity: sha512-OZW+Icm8DMPqHbhdxplkuG8qrNnPk5i7xJOZWYi1y5bTjgGFI4nEzrsmmeHKMdQTaWwsFrm3uK1rlyQ48MmXmg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.10.14': + resolution: {integrity: sha512-sTvc+xrDQXy3HXZFtTEClY35Efvuc3D+busYm0+rb1+Thau4HLRY9WP+sOKeGwH9/16rzfzYEqD7Ds8A9ykrHw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.10.14': + resolution: {integrity: sha512-j2iQ4y9GWTKtES5eMU0sDsFdYni7IxME7ejFej25Tv3Fq4B+U9tgtYWlJwh1858nIWDXelHiKcSh/UICAyVMdQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.10.14': + resolution: {integrity: sha512-TYtWkUSMkjs0jGPeWdtWbex4B+DlQZmN/ySVLiPI+EltYCLEXsFMkVFq6aWn48dqFHggFK0UYfvDrJUR2c3Qxg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.10.14': + resolution: {integrity: sha512-WSrnE6JRnH20ZYjOOgSS4aOaPv9gxlkI2KRkN24kagbZnPZMnN8bZZyzw1rrLvwgpuRGv17Uz+hflosbR+SP6w==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.17': + resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} + + '@tailwindcss/node@4.0.9': + resolution: {integrity: sha512-tOJvdI7XfJbARYhxX+0RArAhmuDcczTC46DGCEziqxzzbIaPnfYaIyRT31n4u8lROrsO7Q6u/K9bmQHL2uL1bQ==} + + '@tailwindcss/oxide-android-arm64@4.0.9': + resolution: {integrity: sha512-YBgy6+2flE/8dbtrdotVInhMVIxnHJPbAwa7U1gX4l2ThUIaPUp18LjB9wEH8wAGMBZUb//SzLtdXXNBHPUl6Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.0.9': + resolution: {integrity: sha512-pWdl4J2dIHXALgy2jVkwKBmtEb73kqIfMpYmcgESr7oPQ+lbcQ4+tlPeVXaSAmang+vglAfFpXQCOvs/aGSqlw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.0.9': + resolution: {integrity: sha512-4Dq3lKp0/C7vrRSkNPtBGVebEyWt9QPPlQctxJ0H3MDyiQYvzVYf8jKow7h5QkWNe8hbatEqljMj/Y0M+ERYJg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.0.9': + resolution: {integrity: sha512-k7U1RwRODta8x0uealtVt3RoWAWqA+D5FAOsvVGpYoI6ObgmnzqWW6pnVwz70tL8UZ/QXjeMyiICXyjzB6OGtQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.9': + resolution: {integrity: sha512-NDDjVweHz2zo4j+oS8y3KwKL5wGCZoXGA9ruJM982uVJLdsF8/1AeKvUwKRlMBpxHt1EdWJSAh8a0Mfhl28GlQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.0.9': + resolution: {integrity: sha512-jk90UZ0jzJl3Dy1BhuFfRZ2KP9wVKMXPjmCtY4U6fF2LvrjP5gWFJj5VHzfzHonJexjrGe1lMzgtjriuZkxagg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.0.9': + resolution: {integrity: sha512-3eMjyTC6HBxh9nRgOHzrc96PYh1/jWOwHZ3Kk0JN0Kl25BJ80Lj9HEvvwVDNTgPg154LdICwuFLuhfgH9DULmg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.0.9': + resolution: {integrity: sha512-v0D8WqI/c3WpWH1kq/HP0J899ATLdGZmENa2/emmNjubT0sWtEke9W9+wXeEoACuGAhF9i3PO5MeyditpDCiWQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.0.9': + resolution: {integrity: sha512-Kvp0TCkfeXyeehqLJr7otsc4hd/BUPfcIGrQiwsTVCfaMfjQZCG7DjI+9/QqPZha8YapLA9UoIcUILRYO7NE1Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-win32-arm64-msvc@4.0.9': + resolution: {integrity: sha512-m3+60T/7YvWekajNq/eexjhV8z10rswcz4BC9bioJ7YaN+7K8W2AmLmG0B79H14m6UHE571qB0XsPus4n0QVgQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.0.9': + resolution: {integrity: sha512-dpc05mSlqkwVNOUjGu/ZXd5U1XNch1kHFJ4/cHkZFvaW1RzbHmRt24gvM8/HC6IirMxNarzVw4IXVtvrOoZtxA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.0.9': + resolution: {integrity: sha512-eLizHmXFqHswJONwfqi/WZjtmWZpIalpvMlNhTM99/bkHtUs6IqgI1XQ0/W5eO2HiRQcIlXUogI2ycvKhVLNcA==} + engines: {node: '>= 10'} + + '@tailwindcss/vite@4.0.9': + resolution: {integrity: sha512-BIKJO+hwdIsN7V6I7SziMZIVHWWMsV/uCQKYEbeiGRDRld+TkqyRRl9+dQ0MCXbhcVr+D9T/qX2E84kT7V281g==} + peerDependencies: + vite: ^5.2.0 || ^6 + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/node@18.19.75': + resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/react@18.3.18': + resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + babel-plugin-jsx-dom-expressions@0.39.8: + resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} + peerDependencies: + '@babel/core': ^7.20.12 + + babel-preset-solid@1.9.6: + resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58check@3.0.1: + resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + + caniuse-lite@1.0.30001697: + resolution: {integrity: sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==} + + cbor-extract@2.2.0: + resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==} + hasBin: true + + cbor-x@1.6.0: + resolution: {integrity: sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + component-register@0.8.7: + resolution: {integrity: sha512-clPS/o1RNfJw7L1/w4q+nkj6l7JV32kFHCx6vW5nSPOEly4B9olMeADNilEgpLV/DdeS7y8JXhHKx9YvSj8vqQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + electron-to-chromium@1.5.91: + resolution: {integrity: sha512-sNSHHyq048PFmZY4S90ax61q+gLCs0X0YmcOII9wG9S2XwbVr+h4VW2wWhnbp/Eys3cCwTxVF292W3qPaxIapQ==} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + fast-sha256@1.3.0: + resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + 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'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + html-entities@2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + lightningcss-darwin-arm64@1.29.1: + resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.29.1: + resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.29.1: + resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.29.1: + resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.1: + resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.1: + resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.1: + resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.1: + resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.29.1: + resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.1: + resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.29.1: + resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==} + engines: {node: '>= 12.0.0'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-gyp-build-optional-packages@5.1.1: + resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} + hasBin: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + nodemon@3.1.9: + resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} + engines: {node: '>=10'} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + engines: {node: ^10 || ^12 || >=14} + + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-usestateref@1.0.9: + resolution: {integrity: sha512-t8KLsI7oje0HzfzGhxFXzuwbf1z9vhBM1ptHLUIHhYqZDKFuI5tzdhEVxSNzUkYxwF8XdpOErzHlKxvP7sTERw==} + peerDependencies: + react: '>16.0.0' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + rollup@4.34.2: + resolution: {integrity: sha512-sBDUoxZEaqLu9QeNalL8v3jw6WjPku4wfZGyTU7l7m1oC+rpRihXc/n/H+4148ZkGz5Xli8CHMns//fFGKvpIQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + solid-dismissible@0.1.1: + resolution: {integrity: sha512-9kcKBJIMdS+586cA1g63HYWxKh3h89leeNHbPZ1csYjuni+NvPBtNr11l0iEX2AKKEt6FHk6qNhc/gjoYAW1pA==} + peerDependencies: + solid-js: ^1.8 + + solid-element@1.9.1: + resolution: {integrity: sha512-baJy6Qz27oAUgkPlqOf3Y+7RsBiuVQrS51Nrh1ddDbrqrNPvJbIvehpUsTzLNFb2ZHIoHuNnDg330go/ZKcRdg==} + peerDependencies: + solid-js: ^1.9.3 + + solid-focus-trap@0.1.9: + resolution: {integrity: sha512-LTyNki6GUJPRLXV5uMWPkYClB07SUMubbr2EkAddiR0CJCF/I283txilMU9RURSr/P8EewMfXWu2o3aWrK7A5A==} + peerDependencies: + solid-js: ^1.8 + + solid-presence@0.2.0: + resolution: {integrity: sha512-YM92o+jvpzX3XGaD4rLYmq/Kc2ZVh47GSCLEufHBFQQIurvZTs8SoGJxO8BJGNDxBKdcS8F3dYhW1SDXp4BNjA==} + peerDependencies: + solid-js: ^1.8 + + solid-prevent-scroll@0.1.10: + resolution: {integrity: sha512-KplGPX2GHiWJLZ6AXYRql4M127PdYzfwvLJJXMkO+CMb8Np4VxqDAg5S8jLdwlEuBis/ia9DKw2M8dFx5u8Mhw==} + peerDependencies: + solid-js: ^1.8 + + solid-refresh@0.6.3: + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} + peerDependencies: + solid-js: ^1.3 + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + tailwindcss@4.0.9: + resolution: {integrity: sha512-12laZu+fv1ONDRoNR9ipTOpUD7RN9essRVkX36sjxuRUInpN7hIiHN4lBd/SIFjbISvnXzp8h/hXzmU8SQQYhw==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + validate-html-nesting@1.2.3: + resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} + + vite-plugin-css-injected-by-js@3.5.2: + resolution: {integrity: sha512-2MpU/Y+SCZyWUB6ua3HbJCrgnF0KACAsmzOQt1UvRVJCGF6S8xdA3ZUhWcWdM9ivG4I5az8PnQmwwrkC2CAQrQ==} + peerDependencies: + vite: '>2.0.0-0' + + vite-plugin-solid@2.11.6: + resolution: {integrity: sha512-Sl5CTqJTGyEeOsmdH6BOgalIZlwH3t4/y0RQuFLMGnvWMBvxb4+lq7x3BSiAw6etf0QexfNJW7HSOO/Qf7pigg==} + peerDependencies: + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* + solid-js: ^1.7.2 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + '@testing-library/jest-dom': + optional: true + + vite-plugin-top-level-await@1.4.4: + resolution: {integrity: sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw==} + peerDependencies: + vite: '>=2.8' + + vite-plugin-wasm@3.4.1: + resolution: {integrity: sha512-ja3nSo2UCkVeitltJGkS3pfQHAanHv/DqGatdI39ja6McgABlpsZ5hVgl6wuR8Qx5etY3T5qgDQhOWzc5RReZA==} + peerDependencies: + vite: ^2 || ^3 || ^4 || ^5 || ^6 + + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitefu@1.0.6: + resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + vite: + optional: true + + xstate@5.19.2: + resolution: {integrity: sha512-B8fL2aP0ogn5aviAXFzI5oZseAMqN00fg/TeDa3ZtatyDcViYLIfuQl4y8qmHCiKZgGEzmnTyNtNQL9oeJE2gw==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@automerge/automerge-repo-react-hooks@2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@automerge/automerge': 2.2.9 + '@automerge/automerge-repo': 2.0.7 + eventemitter3: 5.0.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-usestateref: 1.0.9(react@18.3.1) + transitivePeerDependencies: + - supports-color + + '@automerge/automerge-repo@2.0.7': + dependencies: + '@automerge/automerge': 2.2.9 + bs58check: 3.0.1 + cbor-x: 1.6.0 + debug: 4.4.0(supports-color@5.5.0) + eventemitter3: 5.0.1 + fast-sha256: 1.3.0 + uuid: 9.0.1 + xstate: 5.19.2 + transitivePeerDependencies: + - supports-color + + '@automerge/automerge@2.2.9': + dependencies: + uuid: 9.0.1 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.5': {} + + '@babel/core@7.26.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@5.5.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.18.6': + dependencies: + '@babel/types': 7.26.7 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.7': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + + '@babel/parser@7.26.7': + dependencies: + '@babel/types': 7.26.7 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + + '@babel/traverse@7.26.7': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + debug: 4.4.0(supports-color@5.5.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.7': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@biomejs/biome@1.9.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': + optional: true + + '@biomejs/cli-darwin-x64@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64@1.9.4': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-x64@1.9.4': + optional: true + + '@biomejs/cli-win32-arm64@1.9.4': + optional: true + + '@biomejs/cli-win32-x64@1.9.4': + optional: true + + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-darwin-x64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-linux-arm64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-linux-arm@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-linux-x64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-win32-x64@2.2.0': + optional: true + + '@corvu/dialog@0.2.4(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js)': + dependencies: + '@corvu/utils': 0.4.2(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-dismissible: 0.1.1(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-focus-trap: 0.1.9(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + solid-presence: 0.2.0(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-prevent-scroll: 0.1.10(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + + '@corvu/utils@0.4.2(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js)': + dependencies: + '@floating-ui/dom': 1.6.13 + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/utils@0.2.9': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@noble/hashes@1.7.1': {} + + '@rollup/plugin-virtual@3.0.2(rollup@4.34.2)': + optionalDependencies: + rollup: 4.34.2 + + '@rollup/rollup-android-arm-eabi@4.34.2': + optional: true + + '@rollup/rollup-android-arm64@4.34.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.2': + optional: true + + '@rollup/rollup-darwin-x64@4.34.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.2': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.2': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.2': + optional: true + + '@swc/core-darwin-arm64@1.10.14': + optional: true + + '@swc/core-darwin-x64@1.10.14': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.10.14': + optional: true + + '@swc/core-linux-arm64-gnu@1.10.14': + optional: true + + '@swc/core-linux-arm64-musl@1.10.14': + optional: true + + '@swc/core-linux-x64-gnu@1.10.14': + optional: true + + '@swc/core-linux-x64-musl@1.10.14': + optional: true + + '@swc/core-win32-arm64-msvc@1.10.14': + optional: true + + '@swc/core-win32-ia32-msvc@1.10.14': + optional: true + + '@swc/core-win32-x64-msvc@1.10.14': + optional: true + + '@swc/core@1.10.14': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.17 + optionalDependencies: + '@swc/core-darwin-arm64': 1.10.14 + '@swc/core-darwin-x64': 1.10.14 + '@swc/core-linux-arm-gnueabihf': 1.10.14 + '@swc/core-linux-arm64-gnu': 1.10.14 + '@swc/core-linux-arm64-musl': 1.10.14 + '@swc/core-linux-x64-gnu': 1.10.14 + '@swc/core-linux-x64-musl': 1.10.14 + '@swc/core-win32-arm64-msvc': 1.10.14 + '@swc/core-win32-ia32-msvc': 1.10.14 + '@swc/core-win32-x64-msvc': 1.10.14 + + '@swc/counter@0.1.3': {} + + '@swc/types@0.1.17': + dependencies: + '@swc/counter': 0.1.3 + + '@tailwindcss/node@4.0.9': + dependencies: + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + tailwindcss: 4.0.9 + + '@tailwindcss/oxide-android-arm64@4.0.9': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.0.9': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.0.9': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.0.9': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.9': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.0.9': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.0.9': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.0.9': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.0.9': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.0.9': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.0.9': + optional: true + + '@tailwindcss/oxide@4.0.9': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.0.9 + '@tailwindcss/oxide-darwin-arm64': 4.0.9 + '@tailwindcss/oxide-darwin-x64': 4.0.9 + '@tailwindcss/oxide-freebsd-x64': 4.0.9 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.9 + '@tailwindcss/oxide-linux-arm64-gnu': 4.0.9 + '@tailwindcss/oxide-linux-arm64-musl': 4.0.9 + '@tailwindcss/oxide-linux-x64-gnu': 4.0.9 + '@tailwindcss/oxide-linux-x64-musl': 4.0.9 + '@tailwindcss/oxide-win32-arm64-msvc': 4.0.9 + '@tailwindcss/oxide-win32-x64-msvc': 4.0.9 + + '@tailwindcss/vite@4.0.9(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1))': + dependencies: + '@tailwindcss/node': 4.0.9 + '@tailwindcss/oxide': 4.0.9 + lightningcss: 1.29.1 + tailwindcss: 4.0.9 + vite: 5.4.14(@types/node@18.19.75)(lightningcss@1.29.1) + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.7 + + '@types/estree@1.0.6': {} + + '@types/node@18.19.75': + dependencies: + undici-types: 5.26.5 + optional: true + + '@types/prop-types@15.7.14': {} + + '@types/react@18.3.18': + dependencies: + '@types/prop-types': 15.7.14 + csstype: 3.1.3 + + '@types/uuid@10.0.0': {} + + '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1))': + dependencies: + '@babel/core': 7.26.7 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.7) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.14(@types/node@18.19.75)(lightningcss@1.29.1) + transitivePeerDependencies: + - supports-color + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + autoprefixer@10.4.20(postcss@8.5.1): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001697 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-value-parser: 4.2.0 + + babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.26.7): + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.26.7) + '@babel/types': 7.26.7 + html-entities: 2.3.3 + parse5: 7.3.0 + validate-html-nesting: 1.2.3 + + babel-preset-solid@1.9.6(@babel/core@7.26.7): + dependencies: + '@babel/core': 7.26.7 + babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.26.7) + + balanced-match@1.0.2: {} + + base-x@4.0.0: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001697 + electron-to-chromium: 1.5.91 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + bs58check@3.0.1: + dependencies: + '@noble/hashes': 1.7.1 + bs58: 5.0.0 + + caniuse-lite@1.0.30001697: {} + + cbor-extract@2.2.0: + dependencies: + node-gyp-build-optional-packages: 5.1.1 + optionalDependencies: + '@cbor-extract/cbor-extract-darwin-arm64': 2.2.0 + '@cbor-extract/cbor-extract-darwin-x64': 2.2.0 + '@cbor-extract/cbor-extract-linux-arm': 2.2.0 + '@cbor-extract/cbor-extract-linux-arm64': 2.2.0 + '@cbor-extract/cbor-extract-linux-x64': 2.2.0 + '@cbor-extract/cbor-extract-win32-x64': 2.2.0 + optional: true + + cbor-x@1.6.0: + optionalDependencies: + cbor-extract: 2.2.0 + + 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 + + component-register@0.8.7: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + csstype@3.1.3: {} + + debug@4.4.0(supports-color@5.5.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 + + detect-libc@1.0.3: {} + + detect-libc@2.0.3: + optional: true + + electron-to-chromium@1.5.91: {} + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@6.0.1: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + eventemitter3@5.0.1: {} + + fast-sha256@1.3.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + fraction.js@4.3.7: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + globals@11.12.0: {} + + graceful-fs@4.2.11: {} + + has-flag@3.0.0: {} + + html-entities@2.3.3: {} + + ignore-by-default@1.0.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-what@4.1.16: {} + + jiti@2.4.2: {} + + js-tokens@4.0.0: {} + + jsesc@3.1.0: {} + + json5@2.2.3: {} + + lightningcss-darwin-arm64@1.29.1: + optional: true + + lightningcss-darwin-x64@1.29.1: + optional: true + + lightningcss-freebsd-x64@1.29.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.1: + optional: true + + lightningcss-linux-arm64-gnu@1.29.1: + optional: true + + lightningcss-linux-arm64-musl@1.29.1: + optional: true + + lightningcss-linux-x64-gnu@1.29.1: + optional: true + + lightningcss-linux-x64-musl@1.29.1: + optional: true + + lightningcss-win32-arm64-msvc@1.29.1: + optional: true + + lightningcss-win32-x64-msvc@1.29.1: + optional: true + + lightningcss@1.29.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.1 + lightningcss-darwin-x64: 1.29.1 + lightningcss-freebsd-x64: 1.29.1 + lightningcss-linux-arm-gnueabihf: 1.29.1 + lightningcss-linux-arm64-gnu: 1.29.1 + lightningcss-linux-arm64-musl: 1.29.1 + lightningcss-linux-x64-gnu: 1.29.1 + lightningcss-linux-x64-musl: 1.29.1 + lightningcss-win32-arm64-msvc: 1.29.1 + lightningcss-win32-x64-msvc: 1.29.1 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + merge-anything@5.1.7: + dependencies: + is-what: 4.1.16 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + ms@2.1.3: {} + + nanoid@3.3.8: {} + + node-gyp-build-optional-packages@5.1.1: + dependencies: + detect-libc: 2.0.3 + optional: true + + node-releases@2.0.19: {} + + nodemon@3.1.9: + dependencies: + chokidar: 3.6.0 + debug: 4.4.0(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 7.7.1 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.1 + undefsafe: 2.0.5 + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + postcss-value-parser@4.2.0: {} + + postcss@8.5.1: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + pstree.remy@1.1.8: {} + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-refresh@0.14.2: {} + + react-usestateref@1.0.9(react@18.3.1): + dependencies: + react: 18.3.1 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + rollup@4.34.2: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.2 + '@rollup/rollup-android-arm64': 4.34.2 + '@rollup/rollup-darwin-arm64': 4.34.2 + '@rollup/rollup-darwin-x64': 4.34.2 + '@rollup/rollup-freebsd-arm64': 4.34.2 + '@rollup/rollup-freebsd-x64': 4.34.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.2 + '@rollup/rollup-linux-arm-musleabihf': 4.34.2 + '@rollup/rollup-linux-arm64-gnu': 4.34.2 + '@rollup/rollup-linux-arm64-musl': 4.34.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.2 + '@rollup/rollup-linux-riscv64-gnu': 4.34.2 + '@rollup/rollup-linux-s390x-gnu': 4.34.2 + '@rollup/rollup-linux-x64-gnu': 4.34.2 + '@rollup/rollup-linux-x64-musl': 4.34.2 + '@rollup/rollup-win32-arm64-msvc': 4.34.2 + '@rollup/rollup-win32-ia32-msvc': 4.34.2 + '@rollup/rollup-win32-x64-msvc': 4.34.2 + fsevents: 2.3.3 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.1: {} + + semver@7.7.1: {} + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.7.1 + + solid-dismissible@0.1.1(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js): + dependencies: + '@corvu/utils': 0.4.2(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + + solid-element@1.9.1(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js): + dependencies: + component-register: 0.8.7 + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + + solid-focus-trap@0.1.9(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js): + dependencies: + '@corvu/utils': 0.4.2(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + + solid-presence@0.2.0(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js): + dependencies: + '@corvu/utils': 0.4.2(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + + solid-prevent-scroll@0.1.10(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js): + dependencies: + '@corvu/utils': 0.4.2(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + + solid-refresh@0.6.3(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js): + dependencies: + '@babel/generator': 7.26.5 + '@babel/helper-module-imports': 7.25.9 + '@babel/types': 7.26.7 + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + transitivePeerDependencies: + - supports-color + + source-map-js@1.2.1: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + tailwindcss@4.0.9: {} + + tapable@2.2.1: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + touch@3.1.1: {} + + undefsafe@2.0.5: {} + + undici-types@5.26.5: + optional: true + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uuid@10.0.0: {} + + uuid@11.1.0: {} + + uuid@9.0.1: {} + + validate-html-nesting@1.2.3: {} + + vite-plugin-css-injected-by-js@3.5.2(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)): + dependencies: + vite: 5.4.14(@types/node@18.19.75)(lightningcss@1.29.1) + + vite-plugin-solid@2.11.6(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js)(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)): + dependencies: + '@babel/core': 7.26.7 + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.9.6(@babel/core@7.26.7) + merge-anything: 5.1.7 + solid-js: link:../frontend/node_modules/.pnpm/solid-js@1.9.2/node_modules/solid-js + solid-refresh: 0.6.3(solid-js@frontend+node_modules+.pnpm+solid-js@1.9.2+node_modules+solid-js) + vite: 5.4.14(@types/node@18.19.75)(lightningcss@1.29.1) + vitefu: 1.0.6(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)) + transitivePeerDependencies: + - supports-color + + vite-plugin-top-level-await@1.4.4(rollup@4.34.2)(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)): + dependencies: + '@rollup/plugin-virtual': 3.0.2(rollup@4.34.2) + '@swc/core': 1.10.14 + uuid: 10.0.0 + vite: 5.4.14(@types/node@18.19.75)(lightningcss@1.29.1) + transitivePeerDependencies: + - '@swc/helpers' + - rollup + + vite-plugin-wasm@3.4.1(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)): + dependencies: + vite: 5.4.14(@types/node@18.19.75)(lightningcss@1.29.1) + + vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.1 + rollup: 4.34.2 + optionalDependencies: + '@types/node': 18.19.75 + fsevents: 2.3.3 + lightningcss: 1.29.1 + + vitefu@1.0.6(vite@5.4.14(@types/node@18.19.75)(lightningcss@1.29.1)): + optionalDependencies: + vite: 5.4.14(@types/node@18.19.75)(lightningcss@1.29.1) + + xstate@5.19.2: {} + + yallist@3.1.1: {} diff --git a/packages/patchwork/src/ai-prompt.ts b/packages/patchwork/src/ai-prompt.ts new file mode 100644 index 000000000..44213325e --- /dev/null +++ b/packages/patchwork/src/ai-prompt.ts @@ -0,0 +1,728 @@ +import { DocHandle } from "@automerge/automerge-repo"; +import { AIEditPrompt } from "@patchwork/sdk"; +import { v7 } from "uuid"; + +console.log("this is the full updated ai prompt 12:25"); + +// Type definitions based on catlog-wasm structure +interface ModelDocumentContent { + name: string; + theory: string; + notebook: { + cells: NotebookCell[]; + }; + type: string; +} + +type NotebookCell = + | { tag: "rich-text"; id: string; content: string } + | { tag: "formal"; id: string; content: ModelJudgment } + | { tag: "stem"; id: string }; + +type ModelJudgment = + | { tag: "object"; id: string; name: string; obType: ObType } + | { + tag: "morphism"; + id: string; + name: string; + morType: MorType; + dom: Ob | null; + cod: Ob | null; + }; + +type ObType = { tag: "Basic"; content: string } | { tag: "Tabulator"; content: MorType }; + +type MorType = { tag: "Basic"; content: string } | { tag: "Hom"; content: ObType }; + +type Ob = { tag: "Basic"; content: string } | { tag: "Tabulated"; content: string }; + +// Cell definition for add-cells operation +type CellDefinition = + | { cellType: "rich-text"; content: string } + | { cellType: "object"; name: string; obType: ObType } + | { + cellType: "morphism"; + name: string; + dom: string; + cod: string; + morType: MorType; + }; + +// Edit operation types +type EditOperation = + | { + type: "add-cell"; + cellType: "rich-text"; + content: string; + position: { after?: string; before?: string }; + } + | { + type: "add-cell"; + cellType: "object"; + name: string; + obType: ObType; + position: { after?: string; before?: string }; + } + | { + type: "add-cell"; + cellType: "morphism"; + name: string; + dom: string; + cod: string; + morType: MorType; + position: { after?: string; before?: string }; + } + | { + type: "add-cells"; + cells: CellDefinition[]; + position: { after?: string; before?: string }; + } + | { type: "edit-cell"; id: string; updates: any } + | { type: "delete-cell"; id: string }; + +/** Generate a UUID v7 (time-ordered) for new cells and objects. */ +function generateUUID(): string { + const uuid = v7(); + console.log(`πŸ†” Generated new UUID: ${uuid}`); + return uuid; +} + +/** Validate that a string is a valid UUID */ +function isValidUUID(uuid: string): boolean { + const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + return uuidRegex.test(uuid); +} + +/** Log and validate an ID before using it */ +function validateAndLogId(id: string, context: string): string { + console.log(`πŸ” ${context} - ID: "${id}"`); + if (!isValidUUID(id)) { + console.error(`❌ INVALID UUID detected in ${context}: "${id}"`); + console.error(`❌ This may cause downstream errors!`); + } else { + console.log(`βœ… Valid UUID in ${context}: "${id}"`); + } + return id; +} + +/** Deep merge source object into target object */ +function deepMerge(target: any, source: any) { + for (const key in source) { + if (source[key] && typeof source[key] === "object" && !Array.isArray(source[key])) { + if (!target[key] || typeof target[key] !== "object") { + target[key] = {}; + } + deepMerge(target[key], source[key]); + } else { + target[key] = source[key]; + } + } +} + +function createNameToIdMap(cells: NotebookCell[]): Map { + const map = new Map(); + for (const cell of cells) { + if (cell.tag === "formal") { + if (cell.content.tag === "object") { + map.set(cell.content.name, cell.content.id); + } else if (cell.content.tag === "morphism") { + map.set(cell.content.name, cell.content.id); + } + } + } + return map; +} + +export const stockFlowAIPrompt: AIEditPrompt = { + id: "stock-flow-ai-prompt", + name: "Stock Flow Diagram Editor", + type: "patchwork:ai-prompt", + datatypeId: "catcolab-model", + module: { + docToText: (doc: ModelDocumentContent) => JSON.stringify(doc, null, 2), + textToDoc: (text: string) => JSON.parse(text), + prompt: `You are an AI assistant helping to edit stock flow diagrams in CatColab. + +# Stock Flow Diagram Concepts + +**Stock Flow Diagrams** model systems with: +- **Stocks**: Accumulating quantities (populations, inventory, etc.) - represented as rectangles +- **Flows**: Rates of change between stocks (birth rates, consumption, etc.) - represented as arrows +- **Links**: Dependencies where a stock influences a flow rate - represented as curved lines + +Common examples: epidemiological models (S-E-I-R-V), supply chains, economic models, population dynamics. + +# CatColab Schema Structure + +Documents follow this JSON structure: + +json: +{ + "name": "Model Name", + "theory": "primitive-stock-flow", + "type": "model", + "notebook": { + "cells": [ + // Rich text cells for explanations + { + "tag": "rich-text", + "id": "uuid-here", + "content": "Human readable explanation" + }, + // Formal cells for mathematical objects + { + "tag": "formal", + "id": "uuid-here", + "content": { + "tag": "object", // Declares a stock + "id": "uuid-here", + "name": "Population", + "obType": {"tag": "Basic", "content": "Object"} + } + }, + { + "tag": "formal", + "id": "uuid-here", + "content": { + "tag": "morphism", // Declares a flow + "id": "uuid-here", + "name": "birth_rate", + "dom": {"tag": "Basic", "content": "source-population-id"}, + "cod": {"tag": "Basic", "content": "target-population-id"}, + "morType": {"tag": "Hom", "content": {"tag": "Basic", "content": "Object"}} + } + } + ] + } +} + + +**Key concepts**: +- **dom** (domain) = source stock of a flow +- **cod** (codomain) = target stock of a flow +- **Objects** represent stocks (accumulating quantities) +- **Morphisms** represent flows (rates of change) or links (dependencies) + +# Example: SEIRV Epidemiological Model + +This model has 5 stocks (populations) and flows between them: + +**Stocks**: Susceptible β†’ Exposed β†’ Infectious β†’ Recovered, plus Vaccinated +**Flows**: exposure, vaccination, infection, recovery +**Link**: Infectious population influences exposure rate + +json: +// Stock: Susceptible population +{ + "tag": "object", + "name": "Susceptible", + "obType": {"tag": "Basic", "content": "Object"} +} + +// Flow: People move from Susceptible to Exposed +{ + "tag": "morphism", + "name": "exposure", + "dom": {"tag": "Basic", "content": "susceptible-id"}, + "cod": {"tag": "Basic", "content": "exposed-id"}, + "morType": {"tag": "Hom", "content": {"tag": "Basic", "content": "Object"}} +} + +// Link: Infectious population affects exposure rate +{ + "tag": "morphism", + "name": "", + "dom": {"tag": "Basic", "content": "infectious-id"}, + "cod": {"tag": "Tabulated", "content": "exposure-flow-id"}, + "morType": {"tag": "Basic", "content": "Link"} +} + + +# Making Edits + +When the user requests changes, respond with a concise explanation followed by your edits in this format: + +I'll add a Dead population and mortality flow from Infectious to Dead. + + +[ + { + "type": "add-cell", + "cellType": "rich-text", + "content": "New explanation text", + "position": {"index": 10} + }, + { + "type": "add-cell", + "cellType": "object", + "name": "Dead", + "obType": {"tag": "Basic", "content": "Object"}, + "position": {"index": 11} + }, + { + "type": "add-cell", + "cellType": "morphism", + "name": "mortality", + "dom": "infectious-population-name", + "cod": "dead-population-name", + "morType": {"tag": "Hom", "content": {"tag": "Basic", "content": "Object"}}, + "position": {"after": "some-cell-id"} + }, + { + "type": "edit-cell", + "id": "existing-cell-id", + "updates": { + "content": "Updated content" + } + }, + { + "type": "delete-cell", + "id": "cell-id-to-remove" + } +] + + +**Edit Guidelines**: +- **IMPORTANT**: All object and morphism names must be unique across the entire document +- For **add-cell** with morphisms, reference objects or morphisms by name (I'll resolve to IDs) +- For **edit-cell**, provide partial updates that will be merged into the existing cell +- **Rich text** cells provide context and explanations +- **Object** cells create new stocks +- **Morphism** cells create flows between stocks or links from stocks to flows +- Always maintain logical flow: stocks should connect via meaningful processes +- Use domain knowledge for realistic models (epidemiology, economics, etc.) + +**Positioning Cells (REQUIRED)**: +- The "position" field is REQUIRED for all "add-cell" and "add-cells" operations +- You must specify one of these position options: + - "position": {"after": "cell-id-or-name"} - Insert after the cell with this ID or name + - "position": {"before": "cell-id-or-name"} - Insert before the cell with this ID or name + - "position": {"after": "_start"} - Insert at the beginning of the notebook +- For existing cells, use their ID (found in the document) +- For cells you created earlier in the same edit, use their name +- Example: {"type": "add-cell", "cellType": "rich-text", "content": "Text", "position": {"after": "abc-123"}} + +**Adding Multiple Consecutive Cells**: +- Use the "add-cells" operation to insert multiple cells at once at the same position +- This is much cleaner than using multiple "add-cell" operations +- The cells will be inserted consecutively in the order they appear in the "cells" array +- Example: +json: +{ + "type": "add-cells", + "cells": [ + {"cellType": "rich-text", "content": "First cell"}, + {"cellType": "object", "name": "MyStock", "obType": {"tag": "Basic", "content": "Object"}}, + {"cellType": "rich-text", "content": "Third cell"} + ], + "position": {"after": "some-cell-id"} +} + +- This inserts all three cells consecutively after the specified cell +- You can use the same position options: "after" or "before" + +**Referencing Objects and Morphisms**: +- Use names to reference both objects and morphisms in dom/cod fields +- When inserting after a cell you created earlier in the same edit, use the cell's name +- For objects, use the object name (e.g., "MyStock") +- For morphisms, use the morphism name (e.g., "birth_rate") +- For rich-text cells, you cannot reference them by name (they don't have names) +- **Remember**: All names must be unique across the entire document! + +**Edit Examples**: +- Update rich-text content: {"type": "edit-cell", "id": "...", "updates": {"content": "New text"}} +- Update object name: {"type": "edit-cell", "id": "...", "updates": {"content": {"name": "New Name"}}} +- Update morphism domain: {"type": "edit-cell", "id": "...", "updates": {"content": {"dom": {"tag": "Basic", "content": "new-id"}}}} +- Insert cell at beginning: {"type": "add-cell", "cellType": "rich-text", "content": "Text", "position": {"after": "_start"}} +- Insert after specific existing cell: {"type": "add-cell", "cellType": "object", "name": "Stock", "obType": {...}, "position": {"after": "cell-123"}} +- Insert after a new object you created: {"type": "add-cell", "cellType": "rich-text", "content": "Explanation", "position": {"after": "MyNewStock"}} +- Add multiple cells after a cell: {"type": "add-cells", "cells": [...], "position": {"after": "cell-456"}} + +You MUST provide a brief explanation followed by tags with valid JSON!`, + + edit: async (handle: DocHandle, operations: EditOperation[]) => { + console.log("πŸ”§ Starting edit operation..."); + console.log("πŸ“‹ Received operations:", operations); + console.log(`πŸ“‹ Applying ${operations.length} operations`); + + handle.change((doc) => { + // Create unified name-to-ID map for all objects and morphisms + const nameToId = createNameToIdMap(doc.notebook.cells); + console.log("πŸ—ΊοΈ Initial name to ID mapping:", Array.from(nameToId.entries())); + + // Validate all existing IDs + for (const [name, id] of nameToId.entries()) { + validateAndLogId(id, `existing "${name}" ID`); + } + + // Separate operations by type and prepare add operations + const addOps: Array<{ + op: EditOperation & { type: "add-cell" | "add-cells" }; + cell: NotebookCell; + position?: { after?: string; before?: string }; + }> = []; + const otherOps: EditOperation[] = []; + + // Track names of newly created cells for referencing + const newCellNames = new Map(); // name -> cell ID + + // Helper function to resolve names to IDs (objects or morphisms) + const resolveNameToId = (name: string, context: string): string => { + // First try existing items (objects or morphisms) + let id = nameToId.get(name); + if (id) { + console.log(`πŸ” ${context} resolved "${name}" to existing ID: ${id}`); + return id; + } + + // Throw error instead of using invalid name as UUID + console.error( + `❌ ${context} could not resolve "${name}" - no object or morphism with this name exists`, + ); + throw new Error( + `Could not resolve name "${name}" in ${context}. Make sure the object or morphism is defined before referencing it.`, + ); + }; + + // First pass: prepare all cells and categorize operations + for (const op of operations) { + if (op.type === "add-cell") { + const newCellId = generateUUID(); + validateAndLogId(newCellId, "add-cell new cell ID"); + let newCell: NotebookCell | null = null; + + if (op.cellType === "rich-text") { + console.log( + `πŸ“ Preparing rich-text cell: "${op.content.substring(0, 50)}..."`, + ); + newCell = { + tag: "rich-text", + id: validateAndLogId(newCellId, "rich-text cell assignment"), + content: op.content, + }; + } else if (op.cellType === "object") { + const newObjectId = generateUUID(); + validateAndLogId(newObjectId, "add-cell object ID"); + console.log( + `πŸ“¦ Preparing object: "${op.name}" with ID: ${newObjectId}`, + ); + newCell = { + tag: "formal", + id: validateAndLogId(newCellId, "object cell assignment"), + content: { + tag: "object", + id: validateAndLogId(newObjectId, "object content ID"), + name: op.name, + obType: op.obType, + }, + }; + // Update the name-to-id mapping immediately + console.log( + `πŸ—ΊοΈ Mapping object name "${op.name}" -> object ID "${newObjectId}"`, + ); + nameToId.set(op.name, newObjectId); + // Track the cell name for later referencing + console.log( + `🏷️ Tracking cell name "${op.name}" -> cell ID "${newCellId}"`, + ); + newCellNames.set(op.name, newCellId); + } else if (op.cellType === "morphism") { + const newMorphismId = generateUUID(); + validateAndLogId(newMorphismId, "add-cell morphism ID"); + + // Resolve dom and cod references + const domId = resolveNameToId(op.dom, "add-cell morphism domain"); + const codId = resolveNameToId(op.cod, "add-cell morphism codomain"); + + console.log( + `πŸ”— Resolving morphism domains: "${op.dom}" -> "${domId}", "${op.cod}" -> "${codId}"`, + ); + validateAndLogId(domId, "morphism domain ID"); + validateAndLogId(codId, "morphism codomain ID"); + + console.log( + `πŸ”— Preparing morphism: "${op.name}" from "${op.dom}" (${domId}) to "${op.cod}" (${codId})`, + ); + + newCell = { + tag: "formal", + id: validateAndLogId(newCellId, "morphism cell assignment"), + content: { + tag: "morphism", + id: validateAndLogId(newMorphismId, "morphism content ID"), + name: op.name, + dom: { + tag: "Basic", + content: validateAndLogId(domId, "morphism dom content"), + }, + cod: { + tag: "Basic", + content: validateAndLogId(codId, "morphism cod content"), + }, + morType: op.morType, + }, + }; + // Track the cell name for later referencing + console.log( + `🏷️ Tracking morphism name "${op.name}" -> cell ID "${newCellId}"`, + ); + newCellNames.set(op.name, newCellId); + // Also add morphism name to unified map for immediate referencing + console.log( + `πŸ—ΊοΈ Mapping morphism name "${op.name}" -> morphism ID "${newMorphismId}"`, + ); + nameToId.set(op.name, newMorphismId); + } + + if (newCell) { + addOps.push({ op, cell: newCell, position: op.position }); + } + } else if (op.type === "add-cells") { + // Handle multiple cells being added at once + console.log(`πŸ“š Preparing to add ${op.cells.length} cells`); + + for (const cellDef of op.cells) { + const newCellId = generateUUID(); + validateAndLogId(newCellId, "add-cells new cell ID"); + let newCell: NotebookCell | null = null; + + if (cellDef.cellType === "rich-text") { + console.log( + `πŸ“ Preparing add-cells rich-text: "${cellDef.content.substring( + 0, + 50, + )}..."`, + ); + newCell = { + tag: "rich-text", + id: validateAndLogId( + newCellId, + "add-cells rich-text assignment", + ), + content: cellDef.content, + }; + } else if (cellDef.cellType === "object") { + const newObjectId = generateUUID(); + validateAndLogId(newObjectId, "add-cells object ID"); + console.log( + `πŸ“¦ Preparing add-cells object: "${cellDef.name}" with ID: ${newObjectId}`, + ); + newCell = { + tag: "formal", + id: validateAndLogId( + newCellId, + "add-cells object cell assignment", + ), + content: { + tag: "object", + id: validateAndLogId( + newObjectId, + "add-cells object content ID", + ), + name: cellDef.name, + obType: cellDef.obType, + }, + }; + // Update the name-to-id mapping immediately + console.log( + `πŸ—ΊοΈ Mapping add-cells object name "${cellDef.name}" -> object ID "${newObjectId}"`, + ); + nameToId.set(cellDef.name, newObjectId); + // Track the cell name for later referencing + console.log( + `🏷️ Tracking add-cells cell name "${cellDef.name}" -> cell ID "${newCellId}"`, + ); + newCellNames.set(cellDef.name, newCellId); + } else if (cellDef.cellType === "morphism") { + const newMorphismId = generateUUID(); + validateAndLogId(newMorphismId, "add-cells morphism ID"); + + // Resolve dom and cod references + const domId = resolveNameToId( + cellDef.dom, + "add-cells morphism domain", + ); + const codId = resolveNameToId( + cellDef.cod, + "add-cells morphism codomain", + ); + + console.log( + `πŸ”— Resolving add-cells morphism domains: "${cellDef.dom}" -> "${domId}", "${cellDef.cod}" -> "${codId}"`, + ); + validateAndLogId(domId, "add-cells morphism domain ID"); + validateAndLogId(codId, "add-cells morphism codomain ID"); + console.log(`πŸ”— Preparing add-cells morphism: "${cellDef.name}"`); + + newCell = { + tag: "formal", + id: validateAndLogId( + newCellId, + "add-cells morphism cell assignment", + ), + content: { + tag: "morphism", + id: validateAndLogId( + newMorphismId, + "add-cells morphism content ID", + ), + name: cellDef.name, + dom: { + tag: "Basic", + content: validateAndLogId( + domId, + "add-cells morphism dom content", + ), + }, + cod: { + tag: "Basic", + content: validateAndLogId( + codId, + "add-cells morphism cod content", + ), + }, + morType: cellDef.morType, + }, + }; + // Track the cell name for later referencing + console.log( + `🏷️ Tracking add-cells morphism name "${cellDef.name}" -> cell ID "${newCellId}"`, + ); + newCellNames.set(cellDef.name, newCellId); + // Also add morphism name to unified map for immediate referencing + console.log( + `πŸ—ΊοΈ Mapping add-cells morphism name "${cellDef.name}" -> morphism ID "${newMorphismId}"`, + ); + nameToId.set(cellDef.name, newMorphismId); + } + + if (newCell) { + addOps.push({ op, cell: newCell, position: op.position }); + } + } + } else { + otherOps.push(op); + } + } + + // Helper function to find cell index by ID or name + const findCellIndex = (idOrName: string): number => { + // Check for special "_start" case + if (idOrName === "_start") { + return -1; // Special marker for beginning + } + + // First try to find by cell ID + let index = doc.notebook.cells.findIndex((c) => c.id === idOrName); + if (index >= 0) return index; + + // Then try to find by newly created cell name + const cellId = newCellNames.get(idOrName); + if (cellId) { + index = doc.notebook.cells.findIndex((c) => c.id === cellId); + if (index >= 0) return index; + } + + // Finally try to find by object/morphism name in existing cells + index = doc.notebook.cells.findIndex((c) => { + if (c.tag === "formal" && c.content.tag === "object") { + return c.content.name === idOrName; + } + if (c.tag === "formal" && c.content.tag === "morphism") { + return c.content.name === idOrName; + } + return false; + }); + + return index; + }; + + // Group cells by their parent operation + const cellGroups = new Map(); + for (const { op, cell } of addOps) { + if (!cellGroups.has(op)) { + cellGroups.set(op, []); + } + cellGroups.get(op)!.push(cell); + } + + // Process operations (no need for complex sorting since we don't use indexes) + for (const [op, cells] of cellGroups.entries()) { + if (op.position.after) { + // Insert after specific cell ID/name + const afterIndex = findCellIndex(op.position.after); + if (op.position.after === "_start") { + // Special case: insert at beginning + doc.notebook.cells.splice(0, 0, ...cells); + console.log(`πŸ“ Inserted ${cells.length} cell(s) at the beginning`); + } else if (afterIndex >= 0) { + doc.notebook.cells.splice(afterIndex + 1, 0, ...cells); + console.log( + `πŸ“ Inserted ${cells.length} cell(s) after: ${op.position.after}`, + ); + } else { + console.log(`⚠️ Cell ${op.position.after} not found, adding at end`); + doc.notebook.cells.push(...cells); + } + } else if (op.position.before) { + // Insert before specific cell ID/name + const beforeIndex = findCellIndex(op.position.before); + if (beforeIndex >= 0) { + doc.notebook.cells.splice(beforeIndex, 0, ...cells); + console.log( + `πŸ“ Inserted ${cells.length} cell(s) before: ${op.position.before}`, + ); + } else { + console.log(`⚠️ Cell ${op.position.before} not found, adding at end`); + doc.notebook.cells.push(...cells); + } + } else { + // Position is required, this should not happen + console.error(`❌ Position is required for add operations`); + throw new Error( + "Position is required for add-cell and add-cells operations", + ); + } + } + + // Process other operations (edit-cell, delete-cell) + for (const op of otherOps) { + console.log(`πŸ”„ Processing ${op.type} operation`); + switch (op.type) { + case "edit-cell": + console.log(`πŸ” Looking for cell to edit with ID: "${op.id}"`); + validateAndLogId(op.id, "edit-cell operation ID"); + const cellIndex = doc.notebook.cells.findIndex((c) => c.id === op.id); + if (cellIndex >= 0) { + const cell = doc.notebook.cells[cellIndex]; + validateAndLogId(cell.id, "found cell ID for editing"); + console.log(`✏️ Editing cell ${op.id} with updates:`, op.updates); + + // Deep merge the updates into the cell + deepMerge(cell, op.updates); + } else { + console.log(`⚠️ Cell ${op.id} not found for editing`); + } + break; + + case "delete-cell": + console.log(`πŸ” Looking for cell to delete with ID: "${op.id}"`); + validateAndLogId(op.id, "delete-cell operation ID"); + const initialLength = doc.notebook.cells.length; + const deleteIndex = doc.notebook.cells.findIndex((c) => c.id === op.id); + if (deleteIndex !== -1) { + const cellToDelete = doc.notebook.cells[deleteIndex]; + validateAndLogId(cellToDelete.id, "found cell ID for deletion"); + doc.notebook.cells.splice(deleteIndex, 1); + } + const deletedCount = initialLength - doc.notebook.cells.length; + console.log(`πŸ—‘οΈ Deleted ${deletedCount} cell(s) with ID ${op.id}`); + break; + } + } + + console.log("βœ… All operations completed successfully"); + }); + }, + }, +}; diff --git a/packages/patchwork/src/analysis_annotations.tsx b/packages/patchwork/src/analysis_annotations.tsx new file mode 100644 index 000000000..9026efa5b --- /dev/null +++ b/packages/patchwork/src/analysis_annotations.tsx @@ -0,0 +1,176 @@ +import type { AnnotationsViewProps } from "@patchwork/sdk/annotations"; +import type { Cell, Uuid } from "catlog-wasm"; +import { type Component, createResource, For, Match, Show, Switch } from "solid-js"; +import type { AnnotationsPluginImplementation } from "../../../../patchwork/sdk/dist/annotations/types"; +import { AnalysisCellEditor } from "../../frontend/src/analysis/analysis_editor"; +import { LiveAnalysisContext } from "../../frontend/src/analysis/context"; +import { getLiveAnalysis } from "../../frontend/src/analysis/document"; +import { ApiContext } from "../../frontend/src/api"; +import type { CellActions, RichTextCell } from "../../frontend/src/notebook"; +import { stdTheories, TheoryLibraryContext } from "../../frontend/src/stdlib"; +import type { AnalysisDoc } from "./analysis_datatype"; +import { + type CellAnnotationsViewProps, + CellAnnotationsViewWrapper, + CellPointer, + patchesToAnnotation, +} from "./annotations"; + +export function AnnotationsView({ + annotations, + docUrl, +}: AnnotationsViewProps>) { + return React.createElement(CellAnnotationsViewWrapper, { + annotations, + docUrl, + CellAnnotationsView, + }); +} + +const CellView: Component<{ + cell: Cell; +}> = ({ cell }) => { + return ( + + +
    {(cell as RichTextCell).content}
    +
    + + {}} + isActive={false} + actions={{} as CellActions} + /> + +
    + ); +}; + +function CellAnnotationsView(props: CellAnnotationsViewProps) { + // Typescript gets confused because the patchwork and the frontend package both import "@automerge/automerge-repo" in their package.json + const api = { repo: props.repo as any }; + const [liveAnalysis] = createResource( + () => props.docUrl, + async (refId) => { + try { + const result = await getLiveAnalysis(refId, api, stdTheories); + return result; + } catch (error) { + throw error; + } + }, + ); + + return ( +
    +
    + +
    ⏳ Loading analysis...
    +
    + +
    + ❌ Error loading model: {liveAnalysis.error?.message || "Unknown error"} +
    +
    + + {(_) => { + return ( + + + liveAnalysis()!}> + + {(annotation) => { + switch (annotation.type) { + case "added": + return ( +
    + +
    + ); + case "deleted": + return ( +
    + +
    + ); + case "changed": + return ( +
    +
    + Before +
    +
    + +
    +
    + After +
    +
    + +
    +
    + ); + + case "comment": + if ( + props.annotations.some( + (annotation) => + annotation.type !== "comment", + ) + ) { + return null; + } + + return ( +
    + + {(pointer) => ( +
    + + } + /> +
    + )} +
    +
    + ); + } + }} +
    +
    +
    +
    + ); + }} +
    +
    +
    + ); +} + +export const plugin: AnnotationsPluginImplementation> = { + patchesToAnnotation: patchesToAnnotation, + targetToPointer: (doc, target): CellPointer => + new CellPointer(doc, target), + AnnotationsView, +}; diff --git a/packages/patchwork/src/analysis_datatype.ts b/packages/patchwork/src/analysis_datatype.ts new file mode 100644 index 000000000..60990950a --- /dev/null +++ b/packages/patchwork/src/analysis_datatype.ts @@ -0,0 +1,52 @@ +import { HasVersionControlMetadata } from "@patchwork/sdk/versionControl"; +import { type DataTypeImplementation, initFrom } from "@patchwork/sdk"; +import { AutomergeUrl } from "@automerge/automerge-repo"; +import { Cell, Uuid } from "catlog-wasm"; + +// SCHEMA + +export type AnalysisDoc = HasVersionControlMetadata> & { + name: string; + theory: string; + type: string; + notebook: { + cells: any[]; + }; + analysisOf?: { + _id: AutomergeUrl; + }; + analysisType: "model"; +}; + +// FUNCTIONS + +export const markCopy = (doc: AnalysisDoc) => { + doc.name = "Copy of " + doc.name; +}; + +const setTitle = async (doc: AnalysisDoc, title: string) => { + doc.name = title; +}; + +const getTitle = async (doc: AnalysisDoc) => { + return doc.name || "CatColab Analysis"; +}; + +export const init = (doc: AnalysisDoc) => { + initFrom(doc, { + name: "CatColab Analysis", + theory: "simple-olog", + type: "analysis", + analysisType: "model", + notebook: { + cells: [], + }, + }); +}; + +export const dataType: DataTypeImplementation = { + init, + getTitle, + setTitle, + markCopy, +}; diff --git a/packages/patchwork/src/analysis_pane.tsx b/packages/patchwork/src/analysis_pane.tsx new file mode 100644 index 000000000..ede56dc63 --- /dev/null +++ b/packages/patchwork/src/analysis_pane.tsx @@ -0,0 +1,55 @@ +import { createResource, Show } from "solid-js"; + +import { getLiveAnalysis, LiveAnalysisDocument } from "../../frontend/src/analysis"; +import { AnalysisNotebookEditor } from "../../frontend/src/analysis/analysis_editor"; +import { ApiContext } from "../../frontend/src/api"; +import { stdTheories, TheoryLibraryContext } from "../../frontend/src/stdlib"; +import { SolidToolProps } from "./tools"; +import { AnnotationsContext } from "./annotations_solid"; + +export function AnalysisPaneComponent(props: SolidToolProps) { + // Typescript gets confused because the patchwork and the frontend package both import "@automerge/automerge-repo" in their package.json + const api = { repo: props.repo as any }; + const [liveAnalysis] = createResource( + () => props.docUrl, + async (refId) => { + try { + const result = await getLiveAnalysis(refId, api, stdTheories); + return result; + } catch (error) { + throw error; + } + }, + ); + + return ( +
    +
    + +
    ⏳ Loading analysis...
    +
    + +
    + ❌ Error loading model: {liveAnalysis.error?.message || "Unknown error"} +
    +
    + + {(_) => { + // Provide contexts using SAME import paths as ModelPane + return ( + + + + + + + + ); + }} + +
    +
    + ); +} diff --git a/packages/patchwork/src/annotations.css b/packages/patchwork/src/annotations.css new file mode 100644 index 000000000..2e3e95483 --- /dev/null +++ b/packages/patchwork/src/annotations.css @@ -0,0 +1,41 @@ +@import "../../frontend/src/index.css"; + +.annotation { + position: relative; +} + +.annotation::before { + content: ""; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 1000; + pointer-events: auto; +} + +.annotation-added { + border-left: 3px solid #68c58a; + background-color: #d4ffe14f; +} + +.annotation-changed { + border-left: 3px solid #f8b62e; + background-color: #ffefc078; +} + +.annotation-deleted { + background-color: #ffe2e2; +} + +.annotation-label { + font-size: 0.75em; + color: darkgray; +} + +.annotation-group { + display: flex; + flex-direction: column; + gap: 4px; +} diff --git a/packages/patchwork/src/annotations.ts b/packages/patchwork/src/annotations.ts new file mode 100644 index 000000000..a3ed45341 --- /dev/null +++ b/packages/patchwork/src/annotations.ts @@ -0,0 +1,155 @@ +import * as Automerge from "@automerge/automerge"; +import { AutomergeUrl, Repo } from "@automerge/automerge-repo"; +import { useRepo } from "@automerge/automerge-repo-react-hooks"; +import { Annotation, DiffAnnotation, Pointer } from "@patchwork/sdk/annotations"; +import { Cell, Uuid } from "catlog-wasm"; +import React, { useEffect, useRef } from "react"; +import { Component } from "solid-js"; +import { createComponent, render } from "solid-js/web"; +import { AnalysisDoc } from "./analysis_datatype"; +import { ModelDoc } from "./model_datatype"; +import "./annotations.css"; + +export class CellPointer implements Pointer { + constructor( + readonly doc: D, + readonly target: Uuid, + ) {} + + get value(): any { + return this.doc.notebook.cells.find((cell) => cell.id === this.target)!; + } + get sortValue(): string | number | (string | number)[] { + return this.target; + } + doesOverlap(pointer: Pointer): boolean { + return this.target === pointer.target; + } +} + +export const patchesToAnnotation = ( + docBefore: D, + docAfter: D, + patches: Automerge.Patch[], +): DiffAnnotation>[] => { + const annotations: DiffAnnotation>[] = []; + + const newCellIds = new Set(); + const changedCellIds = new Set(); + + patches.forEach((patch) => { + if (patch.path[0] !== "notebook" || patch.path[1] !== "cells") { + return; + } + + const cellIndex = patch.path[2] as number; + + switch (patch.action) { + case "del": { + const cellId = docBefore.notebook.cells[cellIndex].id; + const cellAfter = docAfter.notebook.cells.find((cell) => cell.id === cellId); + + if (cellAfter) { + if (changedCellIds.has(cellId)) { + break; + } + + changedCellIds.add(cellId); + annotations.push({ + type: "changed", + before: new CellPointer(docBefore, cellId), + after: new CellPointer(docAfter, cellId), + }); + } else { + annotations.push({ + type: "deleted", + pointer: new CellPointer(docBefore, cellId), + }); + } + break; + } + + case "splice": + case "put": { + const cellId = docAfter.notebook.cells[cellIndex].id; + const cellBefore = docBefore.notebook.cells.find((cell) => cell.id === cellId); + if (cellBefore) { + if (changedCellIds.has(cellId)) { + break; + } + + changedCellIds.add(cellId); + annotations.push({ + type: "changed", + before: new CellPointer(docBefore, cellId), + after: new CellPointer(docAfter, cellId), + }); + } else { + if (newCellIds.has(cellId)) { + break; + } + + newCellIds.add(cellId); + annotations.push({ + type: "added", + pointer: new CellPointer(docAfter, cellId), + }); + } + break; + } + } + }); + + return annotations; +}; + +export type CellAnnotationsViewProps = { + repo: Repo; + annotations: Annotation>[]; + docUrl: AutomergeUrl; +}; + +export function CellAnnotationsViewWrapper({ + annotations, + docUrl, + CellAnnotationsView, +}: { + annotations: Annotation>[]; + docUrl: AutomergeUrl; + CellAnnotationsView: Component; +}) { + const solidContainerRef = useRef(null); + const solidDisposeRef = useRef<(() => void) | null>(null); + const repo = useRepo(); + + useEffect(() => { + if (solidContainerRef.current) { + // Clean up previous render + if (solidDisposeRef.current) { + solidDisposeRef.current(); + } + + solidDisposeRef.current = render( + () => + createComponent(CellAnnotationsView, { + repo, + annotations, + docUrl, + }), + solidContainerRef.current, + ); + } + + // Cleanup on unmount + return () => { + if (solidDisposeRef.current) { + solidDisposeRef.current(); + solidDisposeRef.current = null; + } + }; + }, [annotations, repo]); + + // We use React.createElement here to avoid bringing in React's JSX transform. + // We had some trouble with combining both solid and react JSX in one build. + return React.createElement("div", { ref: solidContainerRef }); +} diff --git a/packages/patchwork/src/annotations_solid.ts b/packages/patchwork/src/annotations_solid.ts new file mode 100644 index 000000000..1e4f36e27 --- /dev/null +++ b/packages/patchwork/src/annotations_solid.ts @@ -0,0 +1,57 @@ +import type { AutomergeUrl } from "@automerge/automerge-repo"; +import type { + Annotation, + AnnotationWithUIState, + Comment, + Pointer, + useAllAnnotations, +} from "@patchwork/sdk/annotations"; +import { Accessor, createContext, useContext } from "solid-js"; + +export type DocUrlWithAnnotations = { + originalUrl: AutomergeUrl; + cloneUrl: AutomergeUrl; + annotations: Annotation[]; +}; + +export const AnnotationsContext = createContext>>(); + +export const useAnnotationsOfDoc = ( + docUrl: AutomergeUrl, +): { + annotations: Accessor[]>; + selection: Accessor[]>; + setSelection: (pointers: Pointer[]) => void; + addComment: (pointers: Pointer[]) => Promise; +} => { + const context = useContext(AnnotationsContext); + if (!context) { + throw new Error("AnnotationsContext not found"); + } + + const annotations = () => { + return (context().docLinksWithAnnotations.find( + (docLinkWithAnnotations) => + docLinkWithAnnotations.url === docUrl || + docLinkWithAnnotations.main?.url === docUrl, + )?.annotations ?? []) as AnnotationWithUIState[]; + }; + + return { + annotations, + setSelection: (pointers: Pointer[]) => { + context().setSelection(pointers.map((pointer) => ({ ...pointer, docUrl }))); + }, + selection: () => { + return context() + .selection.filter((pointer) => pointer.docUrl === docUrl) + .map((pointer) => { + const { docUrl, ...rest } = pointer; + return rest as Pointer; + }); + }, + addComment: (pointers: Pointer[]): Promise => { + return context().addComment(pointers.map((pointer) => ({ ...pointer, docUrl }))); + }, + }; +}; diff --git a/packages/patchwork/src/index.ts b/packages/patchwork/src/index.ts new file mode 100644 index 000000000..6e402374d --- /dev/null +++ b/packages/patchwork/src/index.ts @@ -0,0 +1,89 @@ +import type { Plugin } from "@patchwork/sdk/plugins"; +import { stockFlowAIPrompt } from "./ai-prompt"; +import type { LoadableAnnotationPlugin } from "@patchwork/sdk/annotations"; + +export const plugins: Plugin[] = [ + { + type: "patchwork:dataType", + id: "catcolab-model", + name: "CatColab Model", + icon: "Zap", + async load() { + const { dataType } = await import("./model_datatype"); + return dataType; + }, + }, + { + type: "patchwork:dataType", + id: "catcolab-analysis", + name: "CatColab Analysis", + icon: "BarChart3", + async load() { + const { dataType } = await import("./analysis_datatype"); + return dataType; + }, + unlisted: true, + }, + // { + // type: "patchwork:tool", + // id: "catcolab-model-view", + // name: "Model", + // icon: "Zap", + // supportedDataTypes: ["catcolab-model"], + // async load() { + // const { ModelTool } = await import("./tools"); + + // return { + // EditorComponent: ModelTool, + // }; + // }, + // }, + // { + // type: "patchwork:tool", + // id: "catcolab-model-analysis-view", + // name: "Analysis", + // icon: "Zap", + // supportedDataTypes: ["catcolab-model"], + // async load() { + // const { AnalysisTool } = await import("./tools"); + + // return { + // EditorComponent: AnalysisTool, + // }; + // }, + // }, + { + type: "patchwork:tool", + id: "catcolab-model-side-by-side-view", + name: "CatColab", + icon: "Zap", + supportedDataTypes: ["catcolab-model"], + async load() { + const { SideBySideTool } = await import("./tools"); + return { + EditorComponent: SideBySideTool, + }; + }, + }, + stockFlowAIPrompt, + { + type: "patchwork:annotations", + name: "Model Annotations", + id: "model-annotations", + supportedDataTypes: ["catcolab-model"], + async load() { + const { plugin } = await import("./model_annotations"); + return plugin; + }, + } as LoadableAnnotationPlugin, + { + type: "patchwork:annotations", + name: "Analysis Annotations", + id: "analysis-annotations", + supportedDataTypes: ["catcolab-analysis"], + async load() { + const { plugin } = await import("./analysis_annotations"); + return plugin; + }, + } as LoadableAnnotationPlugin, +]; diff --git a/packages/patchwork/src/model_annotations.tsx b/packages/patchwork/src/model_annotations.tsx new file mode 100644 index 000000000..256ae518f --- /dev/null +++ b/packages/patchwork/src/model_annotations.tsx @@ -0,0 +1,177 @@ +import { AnnotationsViewProps } from "@patchwork/sdk/annotations"; +import { Cell, Uuid } from "catlog-wasm"; +import React from "react"; +import { Component, createResource, For, Match, Show, Switch } from "solid-js"; +import { AnnotationsPluginImplementation } from "../../../../patchwork/sdk/dist/annotations/types"; +import { ApiContext } from "../../frontend/src/api"; +import { getLiveModel, LiveModelContext } from "../../frontend/src/model"; +import { ModelCellEditor } from "../../frontend/src/model/model_editor"; +import { CellActions, FormalCell, RichTextCell } from "../../frontend/src/notebook"; +import { stdTheories, TheoryLibraryContext } from "../../frontend/src/stdlib"; +import { + CellAnnotationsViewProps, + CellAnnotationsViewWrapper, + CellPointer, + patchesToAnnotation, +} from "./annotations"; +import { ModelDoc } from "./model_datatype"; + +export function AnnotationsView({ + annotations, + docUrl, +}: AnnotationsViewProps>) { + return React.createElement(CellAnnotationsViewWrapper, { + annotations, + docUrl, + CellAnnotationsView, + }); +} + +const CellView: Component<{ + cell: Cell; +}> = ({ cell }) => { + return ( + + +
    {(cell as RichTextCell).content}
    +
    + + ).content} + changeContent={(_) => {}} + isActive={false} + actions={{} as CellActions} + /> + +
    + ); +}; + +function CellAnnotationsView(props: CellAnnotationsViewProps) { + // Typescript gets confused because the patchwork and the frontend package both import "@automerge/automerge-repo" in their package.json + const api = { repo: props.repo as any }; + + const [liveModel] = createResource( + () => props.docUrl, + async (refId) => { + try { + return await getLiveModel(refId, api, stdTheories); + } catch (error) { + console.error("=== Model Loading Failed ==="); + console.error("Error:", error); + console.error("Stack:", (error as Error).stack); + throw error; + } + }, + ); + + console.log("annotations view", props); + + return ( +
    +
    + +
    ⏳ Loading model...
    +
    + +
    ❌ Error loading model: {liveModel.error?.message || "Unknown error"}
    +
    + + {(_) => { + return ( + + + liveModel()!}> + + {(annotation) => { + switch (annotation.type) { + case "added": + return ( +
    + +
    + ); + case "deleted": + return ( +
    + +
    + ); + case "changed": + return ( +
    +
    + Before +
    +
    + +
    +
    + After +
    +
    + +
    +
    + ); + case "comment": + if ( + props.annotations.some( + (annotation) => + annotation.type !== "comment", + ) + ) { + return null; + } + + return ( +
    + + {(pointer) => ( +
    + + } + /> +
    + )} +
    +
    + ); + } + }} +
    +
    +
    +
    + ); + }} +
    +
    +
    + ); +} + +export const plugin: AnnotationsPluginImplementation> = { + patchesToAnnotation: patchesToAnnotation, + targetToPointer: (doc, target): CellPointer => new CellPointer(doc, target), + AnnotationsView, +}; diff --git a/packages/patchwork/src/model_datatype.ts b/packages/patchwork/src/model_datatype.ts new file mode 100644 index 000000000..5d6f16d6a --- /dev/null +++ b/packages/patchwork/src/model_datatype.ts @@ -0,0 +1,187 @@ +import * as A from "@automerge/automerge"; +import { + HasVersionControlMetadata, + Annotation, + TextPatch, + DecodedChangeWithMetadata, +} from "@patchwork/sdk/versionControl"; +import { type DataTypeImplementation, DocLink, initFrom } from "@patchwork/sdk"; +import { Cell, Uuid } from "catlog-wasm"; +import { AutomergeUrl, Repo } from "@automerge/automerge-repo"; +import { AnalysisDoc, init as initAnalysis } from "./analysis_datatype"; + +// SCHEMA + +export type ModelDoc = HasVersionControlMetadata> & { + name: string; + theory: string; + type: string; + notebook: { + cells: Cell[]; + }; + analysisDocUrl: AutomergeUrl; +}; + +export const patchesToAnnotations = (doc: ModelDoc, _docBefore: ModelDoc, patches: A.Patch[]) => { + const changedCells = new Set(); + const annotations: Annotation>[] = []; + + // hack: there seems to be a bug in Automerge where view doesn't return the correct version of the snapshot + // ... but it works if we look up the heads in the history + const headsBefore = A.getHeads(_docBefore); + const docBefore = A.getHistory(doc).find( + ({ change }) => change.hash === headsBefore[0], + )?.snapshot; + + patches.forEach((patch) => { + if (patch.path[0] !== "notebook" || patch.path[1] !== "cells") { + return; + } + + const cellIndex = patch.path[2] as number; + + if (patch.path.length === 3) { + switch (patch.action) { + case "del": { + if (!docBefore) { + return; + } + + const cell = docBefore.notebook.cells[cellIndex]; + annotations.push({ + type: "deleted", + deleted: cell, + anchor: cell.id, + } as Annotation>); + return; + } + case "insert": { + changedCells.add(doc.notebook.cells[cellIndex].id); + const cell = doc.notebook.cells[cellIndex]; + annotations.push({ + type: "added", + added: cell, + anchor: cell.id, + } as Annotation>); + return; + } + } + } + + switch (patch.action) { + case "insert": + case "splice": { + const after = doc.notebook.cells[cellIndex]; + + if (changedCells.has(after.id)) { + return; + } + + const before = docBefore?.notebook.cells.find((cell) => cell.id === after.id); + + if (!before) { + annotations.push({ + type: "added", + added: after, + anchor: after.id, + } as Annotation>); + changedCells.add(after.id); + return; + } + + annotations.push({ + type: "changed", + before: before, + after: after, + anchor: after.id, + } as Annotation>); + changedCells.add(after.id); + return; + } + } + }); + + return annotations; +}; + +const valueOfAnchor = (doc: ModelDoc, anchor: Uuid): Cell => { + return doc.notebook.cells.find((cell) => cell.id === anchor) as Cell; +}; + +const sortAnchorsBy = (doc: ModelDoc, anchor: Uuid): number => { + return doc.notebook.cells.findIndex((cell) => cell.id === anchor); +}; + +const includePatchInChangeGroup = (patch: A.Patch | TextPatch) => { + return patch.path[0] === "notebook"; +}; + +// We filter conservatively with a deny-list because dealing with edits on a nested schema is annoying. +// Would be better to filter with an allow-list but that's tricky with current Automerge APIs. +export const includeChangeInHistory = (doc: ModelDoc) => { + const metadataObjIds = [ + "branchMetadata", + "tags", + "diffBase", + //"discussions", filter out comment changes for now because we don't surface them in the history + "changeGroupSummaries", + ].map((path) => A.getObjectId(doc, path)); + + return (decodedChange: DecodedChangeWithMetadata) => { + return decodedChange.ops.every((op) => !metadataObjIds.includes(op.obj)); + }; +}; + +export const markCopy = (doc: ModelDoc) => { + doc.name = "Copy of " + doc.name; +}; + +const setTitle = async (doc: ModelDoc, title: string) => { + doc.name = title; +}; + +const getTitle = async (doc: ModelDoc) => { + return doc.name || "CatColab Model"; +}; + +export const init = (doc: ModelDoc, repo: Repo) => { + const analysisDocHandle = repo.create(); + + analysisDocHandle.change((doc) => { + initAnalysis(doc); + }); + + initFrom(doc, { + name: "CatColab Model", + theory: "simple-olog", + type: "model", + notebook: { + cells: [], + }, + analysisDocUrl: analysisDocHandle.url, + }); +}; + +const links = (doc: ModelDoc): DocLink[] => { + return doc.analysisDocUrl + ? [ + { + url: doc.analysisDocUrl, + name: "Analysis", + type: "catcolab-analysis", + }, + ] + : []; +}; + +export const dataType: DataTypeImplementation> = { + init, + getTitle, + setTitle, + markCopy, + sortAnchorsBy, + valueOfAnchor, + patchesToAnnotations, + includePatchInChangeGroup, + links, +}; diff --git a/packages/patchwork/src/model_pane.tsx b/packages/patchwork/src/model_pane.tsx new file mode 100644 index 000000000..1d306d2d6 --- /dev/null +++ b/packages/patchwork/src/model_pane.tsx @@ -0,0 +1,61 @@ +import { createResource, Show } from "solid-js"; + +import { ApiContext } from "../../frontend/src/api"; +import { getLiveModel } from "../../frontend/src/model/document"; +import { ModelPane } from "../../frontend/src/model/model_editor"; +import { stdTheories, TheoryLibraryContext } from "../../frontend/src/stdlib"; +import { AnnotationsContext } from "./annotations_solid"; +import { SolidToolProps } from "./tools"; + +export function ModelPaneComponent(props: SolidToolProps) { + // Typescript gets confused because the patchwork and the frontend package both import "@automerge/automerge-repo" in their package.json + const api = { repo: props.repo as any }; + + const [liveModel] = createResource( + () => props.docUrl, + async (refId) => { + try { + return await getLiveModel(refId, api, stdTheories); + } catch (error) { + console.error("=== Model Loading Failed ==="); + console.error("Error:", error); + console.error("Stack:", (error as Error).stack); + throw error; + } + }, + ); + + const isLoading = () => liveModel.loading || !liveModel(); + + const hasError = () => liveModel.error; + + return ( +
    +
    + +
    ⏳ Loading model...
    +
    + + +
    + ❌ Error loading model: {liveModel.error?.message || "Unknown error"} +
    +
    +
    + + {(_) => { + return ( + + + + + + + + ); + }} + +
    +
    + ); +} diff --git a/packages/patchwork/src/tools.css b/packages/patchwork/src/tools.css new file mode 100644 index 000000000..6ec6836b2 --- /dev/null +++ b/packages/patchwork/src/tools.css @@ -0,0 +1,20 @@ +@import "../../frontend/src/index.css"; + +.split-view-container { + display: flex; + flex-direction: row; + height: 100%; +} + +.split-view-pane { + flex: 1; + height: 100%; + padding: 8px; +} + +.split-view-divider { + width: 1px; + height: 100%; + border-left: 1px solid #e5e7eb; + padding: 0 8px; +} diff --git a/packages/patchwork/src/tools.ts b/packages/patchwork/src/tools.ts new file mode 100644 index 000000000..611a33bb4 --- /dev/null +++ b/packages/patchwork/src/tools.ts @@ -0,0 +1,171 @@ +import { Repo } from "@automerge/automerge-repo"; +import { useDocHandle, useDocument, useRepo } from "@automerge/automerge-repo-react-hooks"; +import { EditorProps } from "@patchwork/sdk"; +import { useAllAnnotations } from "@patchwork/sdk/annotations"; +import { Cell, Uuid } from "catlog-wasm"; +import React, { useEffect, useMemo, useRef } from "react"; +import { Accessor, JSX, createSignal } from "solid-js"; + +import { createComponent, render } from "solid-js/web"; +import { AnalysisDoc } from "./analysis_datatype"; +import { AnalysisPaneComponent } from "./analysis_pane"; +import { ModelDoc } from "./model_datatype"; +import { ModelPaneComponent } from "./model_pane"; +import "./tools.css"; + +export type SolidToolProps = { + docUrl: string; + repo: Repo; + annotationsContextValue: Accessor>; +}; + +export const ModelTool: React.FC>> = ({ docUrl }) => { + return React.createElement(Tool, { + docUrl, + solidComponent: ModelPaneComponent, + }); +}; + +export const AnalysisTool: React.FC>> = ({ docUrl }) => { + const [modelDoc] = useDocument(docUrl, { suspense: true }); + + const { docLinksWithAnnotations } = useAllAnnotations(); + + const analysisDocUrl = modelDoc.analysisDocUrl; + + const resolvedAnalysisDocUrl = useMemo( + () => + docLinksWithAnnotations.find((a) => a.main?.url === analysisDocUrl)?.url ?? + analysisDocUrl, + [modelDoc.analysisDocUrl, docLinksWithAnnotations], + ); + + const resolvedModelDocUrl = useMemo( + () => docLinksWithAnnotations.find((a) => a.main?.url === docUrl)?.url ?? docUrl, + [docUrl, docLinksWithAnnotations], + ); + + const analysisDocHandle = useDocHandle(resolvedAnalysisDocUrl, { + suspense: true, + }); + + // hack: update the analysis document to point to the current model document + // + // Why do we need to do this? + // + // when we create a branch of a model document this creates a copy of the analysis document + // so both documents are branched together + // + // the problem is that the forked analysis document still points to the original model document + // the correct solution would be to resolve the url to point to the forked model document + // but that would involve pushing the resolve logic down into the frontend package + // since the whole branch scope resolution is very hacky right now I want to avoid that + useEffect(() => { + if ( + !modelDoc || + !analysisDocHandle || + analysisDocHandle.doc()?.analysisOf?._id === resolvedModelDocUrl + ) { + return; + } + analysisDocHandle.change((doc) => { + doc.analysisOf = { + _id: resolvedModelDocUrl, + }; + }); + }, [resolvedAnalysisDocUrl, modelDoc, analysisDocHandle]); + + if (!resolvedAnalysisDocUrl) { + return null; + } + + return React.createElement(Tool, { + docUrl: resolvedAnalysisDocUrl, + solidComponent: AnalysisPaneComponent, + }); +}; + +export const SideBySideTool: React.FC>> = (props) => { + return React.createElement("div", { className: "split-view-container" }, [ + React.createElement("div", { className: "split-view-pane" }, [ + React.createElement(ModelTool, props), + ]), + React.createElement("div", { className: "split-view-divider" }), + React.createElement("div", { className: "split-view-pane" }, [ + React.createElement("h1", {}, "Analysis"), + React.createElement(AnalysisTool, props), + ]), + ]); +}; + +const Tool: React.FC< + EditorProps> & { + solidComponent?: (props: SolidToolProps) => JSX.Element; + } +> = ({ docUrl, solidComponent = ModelPaneComponent }) => { + const handle = useDocHandle(docUrl, { suspense: true }); + const repo = useRepo(); + + const allAnnotations = useAllAnnotations(); + + const solidContainerRef = useRef(null); + const solidDisposeRef = useRef<(() => void) | null>(null); + + const [getAnnotationsContextValue, setAnnotationsContextValue] = useMemo( + () => createSignal | null>(null), + [], + ); + + // update annoations context whenever it changes + useEffect(() => { + if (allAnnotations) { + setAnnotationsContextValue(allAnnotations); + } + }, [allAnnotations]); + + // mount the solid component once the handle and repo are available + useEffect(() => { + const annotationContextValue = getAnnotationsContextValue(); + + if (!handle || !repo || !annotationContextValue) { + return; + } + + if (solidContainerRef.current) { + // Clean up previous render + if (solidDisposeRef.current) { + solidDisposeRef.current(); + } + + solidDisposeRef.current = render( + () => + createComponent(solidComponent, { + docUrl, + repo, + annotationsContextValue: () => getAnnotationsContextValue()!, + }), + solidContainerRef.current, + ); + } + + // Cleanup on unmount + return () => { + if (solidDisposeRef.current) { + solidDisposeRef.current(); + solidDisposeRef.current = null; + } + }; + }, [docUrl, handle, solidComponent]); + + if (!handle) { + return null; + } + + // We use React.createElement here to avoid bringing in React's JSX transform. + // We had some trouble with combining both solid and react JSX in one build. + return React.createElement("div", { + className: "catcolab-patchwork", + ref: solidContainerRef, + style: { height: "100%", overflowY: "scroll" }, + }); +}; diff --git a/packages/patchwork/tsconfig.json b/packages/patchwork/tsconfig.json new file mode 100644 index 000000000..b69aa87e1 --- /dev/null +++ b/packages/patchwork/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*", "../src/**/*.ts", "../src/**/*.tsx"], + "ts-node": { + "esm": true + } +} diff --git a/packages/patchwork/vite.config.ts b/packages/patchwork/vite.config.ts new file mode 100644 index 000000000..0cb1849bb --- /dev/null +++ b/packages/patchwork/vite.config.ts @@ -0,0 +1,28 @@ +import { defineConfig } from "vite"; +import topLevelAwait from "vite-plugin-top-level-await"; +import wasm from "vite-plugin-wasm"; +import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js"; +import tailwindcss from "@tailwindcss/vite"; +import solid from "vite-plugin-solid"; + +import { EXTERNAL_DEPENDENCIES } from "@patchwork/sdk/shared-dependencies"; + +export default defineConfig({ + base: "./", + plugins: [topLevelAwait(), wasm(), solid(), tailwindcss(), cssInjectedByJsPlugin()], + + build: { + minify: false, + rollupOptions: { + external: EXTERNAL_DEPENDENCIES, + input: "./src/index.ts", + output: { + format: "es", + entryFileNames: "[name].js", + chunkFileNames: "assets/[name]-[hash].js", + assetFileNames: "assets/[name][extname]", + }, + preserveEntrySignatures: "strict", + }, + }, +}); diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5f042701e..e74f23b4c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: - - "packages/automerge-doc-server" - - "packages/backend/pkg" - - "packages/frontend" + - "packages/automerge-doc-server" + - "packages/backend/pkg" + - "packages/frontend" + - "packages/patchwork"