diff --git a/.storybook/styles.css b/.storybook/styles.css index f10c4befdb..8c92b2b75f 100644 --- a/.storybook/styles.css +++ b/.storybook/styles.css @@ -14,6 +14,7 @@ @import url('./styles/file-upload.css'); @import url('./styles/floating-panel.css'); @import url('./styles/hover-card.css'); +@import url('./styles/image-cropper.css'); @import url('./styles/json-tree-view.css'); @import url('./styles/listbox.css'); @import url('./styles/menu.css'); diff --git a/.storybook/styles/image-cropper.css b/.storybook/styles/image-cropper.css new file mode 100644 index 0000000000..19f69e494b --- /dev/null +++ b/.storybook/styles/image-cropper.css @@ -0,0 +1,56 @@ +[data-scope='image-cropper'][data-part='root'] { + max-width: fit-content; +} + +[data-scope='image-cropper'][data-part='selection'] { + box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.5); + border: 1px solid rgba(255, 255, 255, 0.5); + cursor: move; + &[data-shape='circle'] { + border-radius: 50%; + } +} + +[data-scope='image-cropper'][data-part='image'] { + display: block; + max-width: 100%; +} + +[data-scope='image-cropper'][data-part='handle'] { + --handle-size: 12px; + width: var(--handle-size); + height: var(--handle-size); + + &[data-position='n'], + &[data-position='s'] { + height: 6px; + } + + &[data-position='e'], + &[data-position='w'] { + width: 6px; + } + + & > div { + width: calc(var(--handle-size) / 2); + height: calc(var(--handle-size) / 2); + background: #fff; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } +} + +[data-scope='image-cropper'][data-part='grid'] { + --grid-color: rgba(255, 255, 255, 0.7); + --grid-line-width: 1px; + + &[data-axis='vertical'] { + border-inline: var(--grid-line-width) solid var(--grid-color); + } + + &[data-axis='horizontal'] { + border-block: var(--grid-line-width) solid var(--grid-color); + } +} diff --git a/bun.lock b/bun.lock index 93eeec3bcf..fc2204ef18 100644 --- a/bun.lock +++ b/bun.lock @@ -68,6 +68,7 @@ "@zag-js/highlight-word": "1.27.1", "@zag-js/hover-card": "1.27.1", "@zag-js/i18n-utils": "1.27.1", + "@zag-js/image-cropper": "1.27.1", "@zag-js/json-tree-utils": "1.27.1", "@zag-js/listbox": "1.27.1", "@zag-js/marquee": "1.27.1", @@ -173,6 +174,7 @@ "@zag-js/highlight-word": "1.27.1", "@zag-js/hover-card": "1.27.1", "@zag-js/i18n-utils": "1.27.1", + "@zag-js/image-cropper": "1.27.1", "@zag-js/json-tree-utils": "1.27.1", "@zag-js/listbox": "1.27.1", "@zag-js/marquee": "1.27.1", @@ -274,6 +276,7 @@ "@zag-js/highlight-word": "1.27.1", "@zag-js/hover-card": "1.27.1", "@zag-js/i18n-utils": "1.27.1", + "@zag-js/image-cropper": "1.27.1", "@zag-js/json-tree-utils": "1.27.1", "@zag-js/listbox": "1.27.1", "@zag-js/marquee": "1.27.1", @@ -373,6 +376,7 @@ "@zag-js/highlight-word": "1.27.1", "@zag-js/hover-card": "1.27.1", "@zag-js/i18n-utils": "1.27.1", + "@zag-js/image-cropper": "1.27.1", "@zag-js/json-tree-utils": "1.27.1", "@zag-js/listbox": "1.27.1", "@zag-js/marquee": "1.27.1", @@ -713,9 +717,9 @@ "@deno/shim-deno-test": ["@deno/shim-deno-test@0.5.0", "", {}, "sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w=="], - "@dxup/nuxt": ["@dxup/nuxt@0.2.0", "", { "dependencies": { "@dxup/unimport": "^0.1.0", "@nuxt/kit": "^4.1.3", "chokidar": "^4.0.3", "pathe": "2.0.3", "tinyglobby": "^0.2.15" } }, "sha512-tUS2040HEiGwjwZ8hTczfuRoiXSOuA+ATPXO9Bllf03nHHj1lSlmaAyVJHFsSXL5Os5NZqimNAZ1iDed7VElzA=="], + "@dxup/nuxt": ["@dxup/nuxt@0.2.1", "", { "dependencies": { "@dxup/unimport": "^0.1.1", "@nuxt/kit": "^4.2.0", "chokidar": "^4.0.3", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" } }, "sha512-0RLwkep6ftN3nd4Pfcgwrz8L5D2p5Tf8DKs3pr91TYO22N8loa9y8oPLQnJDqvrT0FBMEiCyPA7C8AMl7THPPg=="], - "@dxup/unimport": ["@dxup/unimport@0.1.0", "", {}, "sha512-6Q/Po8qGmlrShdG/R9+rpIhme9N/PGJumpvmwr1UAxGpt9DfOCt9kF8+yJkxhtPdJFL37KgUILZBRAkSU8cJZg=="], + "@dxup/unimport": ["@dxup/unimport@0.1.1", "", {}, "sha512-DLrjNapztDceDgvVL28D/8CyXIVbhIRGvYl+QGeiclLG6UZjG0a2q4+bGBeTfbt++wF0F7lYaI/MipPmXSNgnA=="], "@edge-runtime/format": ["@edge-runtime/format@2.2.1", "", {}, "sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g=="], @@ -729,63 +733,63 @@ "@effect/schema": ["@effect/schema@0.75.5", "", { "dependencies": { "fast-check": "^3.21.0" }, "peerDependencies": { "effect": "^3.9.2" } }, "sha512-TQInulTVCuF+9EIbJpyLP6dvxbQJMphrnRqgexm/Ze39rSjfhJuufF7XvU3SxTgg3HnL7B/kpORTJbHhlE6thw=="], - "@emnapi/core": ["@emnapi/core@1.6.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg=="], + "@emnapi/core": ["@emnapi/core@1.7.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw=="], - "@emnapi/runtime": ["@emnapi/runtime@1.6.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA=="], + "@emnapi/runtime": ["@emnapi/runtime@1.7.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q=="], "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.11", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.11", "", { "os": "android", "cpu": "arm" }, "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.11", "", { "os": "android", "cpu": "arm64" }, "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.11", "", { "os": "android", "cpu": "x64" }, "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.11", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.11", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.11", "", { "os": "linux", "cpu": "arm" }, "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.11", "", { "os": "linux", "cpu": "ia32" }, "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.11", "", { "os": "linux", "cpu": "none" }, "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.11", "", { "os": "linux", "cpu": "none" }, "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.11", "", { "os": "linux", "cpu": "ppc64" }, "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.11", "", { "os": "linux", "cpu": "none" }, "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.11", "", { "os": "linux", "cpu": "s390x" }, "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.11", "", { "os": "linux", "cpu": "x64" }, "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.11", "", { "os": "none", "cpu": "arm64" }, "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.11", "", { "os": "none", "cpu": "x64" }, "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.11", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.11", "", { "os": "openbsd", "cpu": "x64" }, "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.11", "", { "os": "none", "cpu": "arm64" }, "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.11", "", { "os": "sunos", "cpu": "x64" }, "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.11", "", { "os": "win32", "cpu": "ia32" }, "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.11", "", { "os": "win32", "cpu": "x64" }, "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], @@ -919,7 +923,7 @@ "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], - "@microsoft/api-extractor": ["@microsoft/api-extractor@7.53.3", "", { "dependencies": { "@microsoft/api-extractor-model": "7.31.3", "@microsoft/tsdoc": "~0.15.1", "@microsoft/tsdoc-config": "~0.17.1", "@rushstack/node-core-library": "5.18.0", "@rushstack/rig-package": "0.6.0", "@rushstack/terminal": "0.19.3", "@rushstack/ts-command-line": "5.1.3", "lodash": "~4.17.15", "minimatch": "10.0.3", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", "typescript": "5.8.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-p2HmQaMSVqMBj3bH3643f8xApKAqrF1jNpPsMCTQOYCYgfwLnvzsve8c+bgBWzCOBBgLK54PB6ZLIWMGLg8CZA=="], + "@microsoft/api-extractor": ["@microsoft/api-extractor@7.54.0", "", { "dependencies": { "@microsoft/api-extractor-model": "7.31.3", "@microsoft/tsdoc": "~0.15.1", "@microsoft/tsdoc-config": "~0.17.1", "@rushstack/node-core-library": "5.18.0", "@rushstack/rig-package": "0.6.0", "@rushstack/terminal": "0.19.3", "@rushstack/ts-command-line": "5.1.3", "diff": "~8.0.2", "lodash": "~4.17.15", "minimatch": "10.0.3", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", "typescript": "5.8.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-t0SEcbVUPy4yAVykPafTNWktBg728X6p9t8qCuGDsYr1/lz2VQFihYDP2CnBFSArP5vwJPcvxktoKVSqH326cA=="], "@microsoft/api-extractor-model": ["@microsoft/api-extractor-model@7.31.3", "", { "dependencies": { "@microsoft/tsdoc": "~0.15.1", "@microsoft/tsdoc-config": "~0.17.1", "@rushstack/node-core-library": "5.18.0" } }, "sha512-dv4quQI46p0U03TCEpasUf6JrJL3qjMN7JUAobsPElxBv4xayYYvWW9aPpfYV+Jx6hqUcVaLVOeV7+5hxsyoFQ=="], @@ -963,7 +967,7 @@ "@nodeutils/defaults-deep": ["@nodeutils/defaults-deep@1.1.0", "", { "dependencies": { "lodash": "^4.15.0" } }, "sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg=="], - "@nuxt/cli": ["@nuxt/cli@3.29.3", "", { "dependencies": { "c12": "^3.3.0", "citty": "^0.1.6", "clipboardy": "^5.0.0", "confbox": "^0.2.2", "consola": "^3.4.2", "defu": "^6.1.4", "exsolve": "^1.0.7", "fuse.js": "^7.1.0", "get-port-please": "^3.2.0", "giget": "^2.0.0", "h3": "^1.15.4", "jiti": "^2.6.1", "listhen": "^1.9.0", "nypm": "^0.6.2", "ofetch": "^1.4.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "scule": "^1.3.0", "semver": "^7.7.2", "srvx": "^0.8.9", "std-env": "^3.9.0", "tinyexec": "^1.0.1", "ufo": "^1.6.1", "undici": "^7.16.0", "youch": "^4.1.0-beta.11" }, "bin": { "nuxi": "bin/nuxi.mjs", "nuxi-ng": "bin/nuxi.mjs", "nuxt": "bin/nuxi.mjs", "nuxt-cli": "bin/nuxi.mjs" } }, "sha512-48GYmH4SyzR5pqd02UXVzBfrvEGaurPKMjSWxlHgqnpI5buwOYCvH+OqvHOmvnLrDP2bxR9hbDod/UIphOjMhg=="], + "@nuxt/cli": ["@nuxt/cli@3.30.0", "", { "dependencies": { "c12": "^3.3.1", "citty": "^0.1.6", "confbox": "^0.2.2", "consola": "^3.4.2", "copy-paste": "^2.2.0", "defu": "^6.1.4", "exsolve": "^1.0.7", "fuse.js": "^7.1.0", "giget": "^2.0.0", "jiti": "^2.6.1", "listhen": "^1.9.0", "nypm": "^0.6.2", "ofetch": "^1.5.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "scule": "^1.3.0", "semver": "^7.7.3", "srvx": "^0.9.4", "std-env": "^3.10.0", "tinyexec": "^1.0.1", "ufo": "^1.6.1", "youch": "^4.1.0-beta.12" }, "bin": { "nuxi": "bin/nuxi.mjs", "nuxi-ng": "bin/nuxi.mjs", "nuxt": "bin/nuxi.mjs", "nuxt-cli": "bin/nuxi.mjs" } }, "sha512-nBNEkvOwqzxgvfTBUKPX0zN4h85dWjjkW+kP4OFnVaN3C3kdsbScNtYPIZyp0+ArabL5t4RT93Gyx0IZMRNzAQ=="], "@nuxt/devalue": ["@nuxt/devalue@2.0.2", "", {}, "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA=="], @@ -985,13 +989,13 @@ "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], - "@octokit/core": ["@octokit/core@7.0.5", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.2", "@octokit/request": "^10.0.4", "@octokit/request-error": "^7.0.1", "@octokit/types": "^15.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q=="], + "@octokit/core": ["@octokit/core@7.0.6", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q=="], - "@octokit/endpoint": ["@octokit/endpoint@11.0.1", "", { "dependencies": { "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA=="], + "@octokit/endpoint": ["@octokit/endpoint@11.0.2", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ=="], - "@octokit/graphql": ["@octokit/graphql@9.0.2", "", { "dependencies": { "@octokit/request": "^10.0.4", "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw=="], + "@octokit/graphql": ["@octokit/graphql@9.0.3", "", { "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA=="], - "@octokit/openapi-types": ["@octokit/openapi-types@26.0.0", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="], + "@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@13.2.1", "", { "dependencies": { "@octokit/types": "^15.0.1" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-Tj4PkZyIL6eBMYcG/76QGsedF0+dWVeLhYprTmuFVVxzDW7PQh23tM0TP0z+1MvSkxB29YFZwnUX+cXfTiSdyw=="], @@ -999,13 +1003,13 @@ "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@16.1.1", "", { "dependencies": { "@octokit/types": "^15.0.1" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-VztDkhM0ketQYSh5Im3IcKWFZl7VIrrsCaHbDINkdYeiiAsJzjhS2xRFCSJgfN6VOcsoW4laMtsmf3HcNqIimg=="], - "@octokit/request": ["@octokit/request@10.0.5", "", { "dependencies": { "@octokit/endpoint": "^11.0.1", "@octokit/request-error": "^7.0.1", "@octokit/types": "^15.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ=="], + "@octokit/request": ["@octokit/request@10.0.6", "", { "dependencies": { "@octokit/endpoint": "^11.0.2", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-FO+UgZCUu+pPnZAR+iKdUt64kPE7QW7ciqpldaMXaNzixz5Jld8dJ31LAUewk0cfSRkNSRKyqG438ba9c/qDlQ=="], - "@octokit/request-error": ["@octokit/request-error@7.0.1", "", { "dependencies": { "@octokit/types": "^15.0.0" } }, "sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA=="], + "@octokit/request-error": ["@octokit/request-error@7.0.2", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-U8piOROoQQUyExw5c6dTkU3GKxts5/ERRThIauNL7yaRoeXW0q/5bgHWT7JfWBw1UyrbK8ERId2wVkcB32n0uQ=="], "@octokit/rest": ["@octokit/rest@22.0.0", "", { "dependencies": { "@octokit/core": "^7.0.2", "@octokit/plugin-paginate-rest": "^13.0.1", "@octokit/plugin-request-log": "^6.0.0", "@octokit/plugin-rest-endpoint-methods": "^16.0.0" } }, "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA=="], - "@octokit/types": ["@octokit/types@15.0.2", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q=="], + "@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], "@one-ini/wasm": ["@one-ini/wasm@0.1.1", "", {}, "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw=="], @@ -1215,7 +1219,7 @@ "@poppinss/colors": ["@poppinss/colors@4.1.5", "", { "dependencies": { "kleur": "^4.1.5" } }, "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw=="], - "@poppinss/dumper": ["@poppinss/dumper@0.6.4", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@sindresorhus/is": "^7.0.2", "supports-color": "^10.0.0" } }, "sha512-iG0TIdqv8xJ3Lt9O8DrPRxw1MRLjNpoqiSGU03P/wNLP/s0ra0udPJ1J2Tx5M0J3H/cVyEgpbn8xUKRY9j59kQ=="], + "@poppinss/dumper": ["@poppinss/dumper@0.6.5", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@sindresorhus/is": "^7.0.2", "supports-color": "^10.0.0" } }, "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw=="], "@poppinss/exception": ["@poppinss/exception@1.2.2", "", {}, "sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg=="], @@ -1321,8 +1325,6 @@ "@rushstack/ts-command-line": ["@rushstack/ts-command-line@5.1.3", "", { "dependencies": { "@rushstack/terminal": "0.19.3", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" } }, "sha512-Kdv0k/BnnxIYFlMVC1IxrIS0oGQd4T4b7vKfx52Y2+wk2WZSDFIvedr7JrhenzSlm3ou5KwtoTGTGd5nbODRug=="], - "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], - "@shikijs/core": ["@shikijs/core@3.14.0", "", { "dependencies": { "@shikijs/types": "3.14.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw=="], "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.14.0", "", { "dependencies": { "@shikijs/types": "3.14.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ=="], @@ -1347,7 +1349,7 @@ "@sinclair/typebox": ["@sinclair/typebox@0.25.24", "", {}, "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ=="], - "@sindresorhus/is": ["@sindresorhus/is@7.1.0", "", {}, "sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA=="], + "@sindresorhus/is": ["@sindresorhus/is@7.1.1", "", {}, "sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ=="], "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], @@ -1361,7 +1363,7 @@ "@solidjs/testing-library": ["@solidjs/testing-library@0.8.10", "", { "dependencies": { "@testing-library/dom": "^10.4.0" }, "peerDependencies": { "@solidjs/router": ">=0.9.0", "solid-js": ">=1.0.0" }, "optionalPeers": ["@solidjs/router"] }, "sha512-qdeuIerwyq7oQTIrrKvV0aL9aFeuwTd86VYD3afdq5HYEwoox1OBTJy4y8A3TFZr8oAR0nujYgCzY/8wgHGfeQ=="], - "@speed-highlight/core": ["@speed-highlight/core@1.2.8", "", {}, "sha512-IGytNtnUnPIobIbOq5Y6LIlqiHNX+vnToQIS7lj6L5819C+rA8TXRDkkG8vePsiBOGcoW9R6i+dp2YBUKdB09Q=="], + "@speed-highlight/core": ["@speed-highlight/core@1.2.12", "", {}, "sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA=="], "@stackblitz/sdk": ["@stackblitz/sdk@1.11.0", "", {}, "sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ=="], @@ -1563,7 +1565,7 @@ "@types/resolve": ["@types/resolve@1.20.6", "", {}, "sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ=="], - "@types/send": ["@types/send@1.2.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ=="], + "@types/send": ["@types/send@0.17.6", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og=="], "@types/serve-static": ["@types/serve-static@1.15.10", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "<1" } }, "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw=="], @@ -1779,6 +1781,8 @@ "@zag-js/i18n-utils": ["@zag-js/i18n-utils@1.27.1", "", { "dependencies": { "@zag-js/dom-query": "1.27.1" } }, "sha512-dNP7ZMoKxCD8KOc3RPqBpj7mEr5qb2qix8o6AQHw2QMDdgMDj0E9y5ZaNHIzkpMyYmvURY5I+pwWfFricv/rHg=="], + "@zag-js/image-cropper": ["@zag-js/image-cropper@1.27.1", "", { "dependencies": { "@zag-js/anatomy": "1.27.1", "@zag-js/core": "1.27.1", "@zag-js/dom-query": "1.27.1", "@zag-js/types": "1.27.1", "@zag-js/utils": "1.27.1" } }, "sha512-fzAlMZwKQVVxaHcxbGmwOY05fFdooxkAYNjuzansQo5nHWQIVVVe7/Ou6GzU7ggc/Ws+a/TY2dp3dZbzrSfc5g=="], + "@zag-js/interact-outside": ["@zag-js/interact-outside@1.27.1", "", { "dependencies": { "@zag-js/dom-query": "1.27.1", "@zag-js/utils": "1.27.1" } }, "sha512-MfZobJhDWSiS9SzF35FJd/R+/ksvwzgjXl51p1sjaqVQoTIfKAe/pK8Hcky7NWX9NsVx77x/YidJpb/Bwf3f6g=="], "@zag-js/json-tree-utils": ["@zag-js/json-tree-utils@1.27.1", "", {}, "sha512-ugiV6V4BqKufZr2XRdZB3x4x/uxUbmfG0viMAkCYJKD5wWaMukPqUAxytJ5ybAIfnDDvRRjRzaZX+erVu5rzXA=="], @@ -1963,7 +1967,7 @@ "axe-core": ["axe-core@4.11.0", "", {}, "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ=="], - "axios": ["axios@1.13.1", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw=="], + "axios": ["axios@1.13.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA=="], "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], @@ -1985,7 +1989,7 @@ "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.8.21", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.24", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-uUhTRDPXamakPyghwrUcjaGvvBqGrWvBHReoiULMIpOJVM9IYzQh83Xk2Onx5HlGI2o10NNCzcs9TG/S3TkwrQ=="], "basic-ftp": ["basic-ftp@5.0.5", "", {}, "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg=="], @@ -2001,7 +2005,7 @@ "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], - "birpc": ["birpc@2.6.1", "", {}, "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ=="], + "birpc": ["birpc@2.7.0", "", {}, "sha512-tub/wFGH49vNCm0xraykcY3TcRgX/3JsALYq/Lwrtti+bTyFHkCUAWF5wgYoie8P41wYwig2mIKiqoocr1EkEQ=="], "body-parser": ["body-parser@2.2.0", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.0", "http-errors": "^2.0.0", "iconv-lite": "^0.6.3", "on-finished": "^2.4.1", "qs": "^6.14.0", "raw-body": "^3.0.0", "type-is": "^2.0.0" } }, "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg=="], @@ -2049,7 +2053,7 @@ "caniuse-api": ["caniuse-api@3.0.0", "", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], - "caniuse-lite": ["caniuse-lite@1.0.30001751", "", {}, "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001753", "", {}, "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -2095,7 +2099,7 @@ "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], - "clipboardy": ["clipboardy@5.0.0", "", { "dependencies": { "execa": "^9.6.0", "is-wayland": "^0.1.0", "is-wsl": "^3.1.0", "is64bit": "^2.0.0" } }, "sha512-MQfKHaD09eP80Pev4qBxZLbxJK/ONnqfSYAPlCmPh+7BDboYtO/3BmB6HGzxDIT0SlTRc2tzS8lQqfcdLtZ0Kg=="], + "clipboardy": ["clipboardy@4.0.0", "", { "dependencies": { "execa": "^8.0.1", "is-wsl": "^3.1.0", "is64bit": "^2.0.0" } }, "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w=="], "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], @@ -2155,6 +2159,8 @@ "copy-anything": ["copy-anything@4.0.5", "", { "dependencies": { "is-what": "^5.2.0" } }, "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA=="], + "copy-paste": ["copy-paste@2.2.0", "", { "dependencies": { "iconv-lite": "^0.4.8" } }, "sha512-jqSL4r9DSeiIvJZStLzY/sMLt9ToTM7RsK237lYOTG+KcbQJHGala3R1TUpa8h1p9adswVgIdV4qGbseVhL4lg=="], + "copy-to-clipboard": ["copy-to-clipboard@3.3.3", "", { "dependencies": { "toggle-selection": "^1.0.6" } }, "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA=="], "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], @@ -2263,7 +2269,7 @@ "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], - "diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], + "diff": ["diff@8.0.2", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="], "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], @@ -2301,7 +2307,7 @@ "effect": ["effect@3.19.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-eFvvryWkbXvQ4Gak1Nadv9CW6U35+UUS/fIkF4c/Th8rs2u47g+tNkViYeVGliglNnR6Ai5Otl9tLbav3yZjXg=="], - "electron-to-chromium": ["electron-to-chromium@1.5.243", "", {}, "sha512-ZCphxFW3Q1TVhcgS9blfut1PX8lusVi2SvXQgmEEnK4TCmE1JhH2JkjJN+DNt0pJJwfBri5AROBnz2b/C+YU9g=="], + "electron-to-chromium": ["electron-to-chromium@1.5.245", "", {}, "sha512-rdmGfW47ZhL/oWEJAY4qxRtdly2B98ooTJ0pdEI4jhVLZ6tNf8fPtov2wS1IRKwFJT92le3x4Knxiwzl7cPPpQ=="], "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], @@ -2337,7 +2343,7 @@ "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.25.11", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.11", "@esbuild/android-arm": "0.25.11", "@esbuild/android-arm64": "0.25.11", "@esbuild/android-x64": "0.25.11", "@esbuild/darwin-arm64": "0.25.11", "@esbuild/darwin-x64": "0.25.11", "@esbuild/freebsd-arm64": "0.25.11", "@esbuild/freebsd-x64": "0.25.11", "@esbuild/linux-arm": "0.25.11", "@esbuild/linux-arm64": "0.25.11", "@esbuild/linux-ia32": "0.25.11", "@esbuild/linux-loong64": "0.25.11", "@esbuild/linux-mips64el": "0.25.11", "@esbuild/linux-ppc64": "0.25.11", "@esbuild/linux-riscv64": "0.25.11", "@esbuild/linux-s390x": "0.25.11", "@esbuild/linux-x64": "0.25.11", "@esbuild/netbsd-arm64": "0.25.11", "@esbuild/netbsd-x64": "0.25.11", "@esbuild/openbsd-arm64": "0.25.11", "@esbuild/openbsd-x64": "0.25.11", "@esbuild/openharmony-arm64": "0.25.11", "@esbuild/sunos-x64": "0.25.11", "@esbuild/win32-arm64": "0.25.11", "@esbuild/win32-ia32": "0.25.11", "@esbuild/win32-x64": "0.25.11" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q=="], + "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], "esbuild-android-64": ["esbuild-android-64@0.14.47", "", { "os": "android", "cpu": "x64" }, "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g=="], @@ -2397,7 +2403,7 @@ "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - "esrap": ["esrap@2.1.1", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-ebTT9B6lOtZGMgJ3o5r12wBacHctG7oEWazIda8UlPfA3HD/Wrv8FdXoVo73vzdpwCxNyXjPauyN2bbJzMkB9A=="], + "esrap": ["esrap@2.1.2", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg=="], "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], @@ -2471,8 +2477,6 @@ "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], - "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], @@ -2647,7 +2651,7 @@ "ini": ["ini@4.1.1", "", {}, "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="], - "inline-style-parser": ["inline-style-parser@0.2.4", "", {}, "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="], + "inline-style-parser": ["inline-style-parser@0.2.6", "", {}, "sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg=="], "inline-style-prefixer": ["inline-style-prefixer@7.0.1", "", { "dependencies": { "css-in-js-utils": "^3.1.0" } }, "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw=="], @@ -2747,8 +2751,6 @@ "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], - "is-wayland": ["is-wayland@0.1.0", "", {}, "sha512-QkbMsWkIfkrzOPxenwye0h56iAXirZYHG9eHVPb22fO9y+wPbaX/CHacOWBa/I++4ohTcByimhM1/nyCsH8KNA=="], - "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], @@ -3155,7 +3157,7 @@ "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], - "ofetch": ["ofetch@1.5.0", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-A7llJ7eZyziA5xq9//3ZurA8OhFqtS99K5/V1sLBJ5j137CM/OAjlbA/TEJXBuOWwOfLqih+oH5U3ran4za1FQ=="], + "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], @@ -3583,7 +3585,7 @@ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - "sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="], + "sax": ["sax@1.4.3", "", {}, "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="], "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], @@ -3637,9 +3639,9 @@ "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], - "signal-exit": ["signal-exit@4.0.2", "", {}, "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q=="], + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "simple-git": ["simple-git@3.28.0", "", { "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", "debug": "^4.4.0" } }, "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w=="], + "simple-git": ["simple-git@3.30.0", "", { "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", "debug": "^4.4.0" } }, "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg=="], "sirv": ["sirv@3.0.2", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g=="], @@ -3681,7 +3683,7 @@ "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - "srvx": ["srvx@0.8.16", "", { "bin": { "srvx": "bin/srvx.mjs" } }, "sha512-hmcGW4CgroeSmzgF1Ihwgl+Ths0JqAJ7HwjP2X7e3JzY7u4IydLMcdnlqGQiQGUswz+PO9oh/KtCpOISIvs9QQ=="], + "srvx": ["srvx@0.9.5", "", { "bin": { "srvx": "bin/srvx.mjs" } }, "sha512-nQsA2c8q3XwbSn6kTxVQjz0zS096rV+Be2pzJwrYEAdtnYszLw4MTy8JWJjz1XEGBZwP0qW51SUIX3WdjdRemQ=="], "stack-generator": ["stack-generator@2.0.10", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ=="], @@ -3745,9 +3747,9 @@ "structured-clone-es": ["structured-clone-es@1.0.0", "", {}, "sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ=="], - "style-to-js": ["style-to-js@1.1.18", "", { "dependencies": { "style-to-object": "1.0.11" } }, "sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg=="], + "style-to-js": ["style-to-js@1.1.19", "", { "dependencies": { "style-to-object": "1.0.12" } }, "sha512-Ev+SgeqiNGT1ufsXyVC5RrJRXdrkRJ1Gol9Qw7Pb72YCKJXrBvP0ckZhBeVSrw2m06DJpei2528uIpjMb4TsoQ=="], - "style-to-object": ["style-to-object@1.0.11", "", { "dependencies": { "inline-style-parser": "0.2.4" } }, "sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow=="], + "style-to-object": ["style-to-object@1.0.12", "", { "dependencies": { "inline-style-parser": "0.2.6" } }, "sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw=="], "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], @@ -3793,7 +3795,7 @@ "terracotta": ["terracotta@1.0.6", "", { "dependencies": { "solid-use": "^0.9.0" }, "peerDependencies": { "solid-js": "^1.8" } }, "sha512-yVrmT/Lg6a3tEbeYEJH8ksb1PYkR5FA9k5gr1TchaSNIiA2ZWs5a+koEbePXwlBP0poaV7xViZ/v50bQFcMgqw=="], - "terser": ["terser@5.44.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w=="], + "terser": ["terser@5.44.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw=="], "test-exclude": ["test-exclude@7.0.1", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", "minimatch": "^9.0.4" } }, "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg=="], @@ -3947,9 +3949,9 @@ "unplugin-utils": ["unplugin-utils@0.2.5", "", { "dependencies": { "pathe": "^2.0.3", "picomatch": "^4.0.3" } }, "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg=="], - "unplugin-vue-router": ["unplugin-vue-router@0.16.0", "", { "dependencies": { "@babel/generator": "^7.28.3", "@vue-macros/common": "^3.1.1", "@vue/language-core": "^3.1.0", "ast-walker-scope": "^0.8.2", "chokidar": "^4.0.3", "json5": "^2.2.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.19", "mlly": "^1.8.0", "muggle-string": "^0.4.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "scule": "^1.3.0", "tinyglobby": "^0.2.15", "unplugin": "^2.3.10", "unplugin-utils": "^0.3.0", "yaml": "^2.8.1" }, "peerDependencies": { "@vue/compiler-sfc": "^3.5.17", "vue-router": "^4.6.0" }, "optionalPeers": ["vue-router"] }, "sha512-yFmUQoN07KABkbxMSaNvfjnflwSi3nkSVKi7v6FTwXlzXyRDSx63vQ8Se4ho0T9Ao9I8U5FJB12fzmrGxFB0CA=="], + "unplugin-vue-router": ["unplugin-vue-router@0.16.1", "", { "dependencies": { "@babel/generator": "^7.28.5", "@vue-macros/common": "^3.1.1", "@vue/language-core": "^3.1.2", "ast-walker-scope": "^0.8.3", "chokidar": "^4.0.3", "json5": "^2.2.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.21", "mlly": "^1.8.0", "muggle-string": "^0.4.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "scule": "^1.3.0", "tinyglobby": "^0.2.15", "unplugin": "^2.3.10", "unplugin-utils": "^0.3.1", "yaml": "^2.8.1" }, "peerDependencies": { "@vue/compiler-sfc": "^3.5.17", "vue-router": "^4.6.0" }, "optionalPeers": ["vue-router"] }, "sha512-7A7gUVzLIYMBrBPKk8l4lZoZXDOrO8+etw6/RTrqG3OzpLUUZEXJFUW7+OyMIpQK93sEbdkR2z9ZNNl/r32FMw=="], - "unstorage": ["unstorage@1.17.1", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.4.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ=="], + "unstorage": ["unstorage@1.17.2", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.0", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-cKEsD6iBWJgOMJ6vW1ID/SYuqNf8oN4yqRk8OYqaVQ3nnkJXOT1PSpaMh2QfzLs78UN5kSNRD2c/mgjT8tX7+w=="], "untun": ["untun@0.1.3", "", { "dependencies": { "citty": "^0.1.5", "consola": "^3.2.3", "pathe": "^1.1.1" }, "bin": { "untun": "bin/untun.mjs" } }, "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ=="], @@ -4001,7 +4003,7 @@ "vite-plugin-solid": ["vite-plugin-solid@2.11.10", "", { "dependencies": { "@babel/core": "^7.23.3", "@types/babel__core": "^7.20.4", "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.6.3", "vitefu": "^1.0.4" }, "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 || ^7.0.0" }, "optionalPeers": ["@testing-library/jest-dom"] }, "sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw=="], - "vite-plugin-vue-tracer": ["vite-plugin-vue-tracer@1.0.1", "", { "dependencies": { "estree-walker": "^3.0.3", "exsolve": "^1.0.7", "magic-string": "^0.30.19", "pathe": "^2.0.3", "source-map-js": "^1.2.1" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0", "vue": "^3.5.0" } }, "sha512-L5/vAhT6oYbH4RSQYGLN9VfHexWe7SGzca1pJ7oPkL6KtxWA1jbGeb3Ri1JptKzqtd42HinOq4uEYqzhVWrzig=="], + "vite-plugin-vue-tracer": ["vite-plugin-vue-tracer@1.1.0", "", { "dependencies": { "estree-walker": "^3.0.3", "exsolve": "^1.0.7", "magic-string": "^0.30.19", "pathe": "^2.0.3", "source-map-js": "^1.2.1" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0", "vue": "^3.5.0" } }, "sha512-SnjWJO58WaVGprPoOKkGYIRPSegQYPUOjjTpRvmYhEpBPqr/KTuy2IhY73hDps/z87UHwQzGKVhuaKhHv3GIaA=="], "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], @@ -4115,7 +4117,7 @@ "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], - "youch": ["youch@4.1.0-beta.11", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@poppinss/dumper": "^0.6.4", "@speed-highlight/core": "^1.2.7", "cookie": "^1.0.2", "youch-core": "^0.3.3" } }, "sha512-sQi6PERyO/mT8w564ojOVeAlYTtVQmC2GaktQAf+IdI75/GKIggosBuvyVXvEV+FATAT6RbLdIjFoiIId4ozoQ=="], + "youch": ["youch@4.1.0-beta.12", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@poppinss/dumper": "^0.6.5", "@speed-highlight/core": "^1.2.9", "cookie-es": "^2.0.0", "youch-core": "^0.3.3" } }, "sha512-X+AQ2EdigcZb2h1XQmBMm19TrrfKXxEXWpnf8ThbARwiiSf/pA7MvRTCj5VHCI9z3vjJBsDeqWWyvaI9Bfp9Pg=="], "youch-core": ["youch-core@0.3.3", "", { "dependencies": { "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } }, "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA=="], @@ -4217,8 +4219,6 @@ "@better-auth/core/jose": ["jose@6.1.0", "", {}, "sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA=="], - "@chakra-ui/better-auth/effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="], - "@cloudflare/kv-asset-handler/mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="], "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], @@ -4231,8 +4231,6 @@ "@dxup/nuxt/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - "@inquirer/core/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], @@ -4245,7 +4243,7 @@ "@mapbox/node-pre-gyp/nopt": ["nopt@8.1.0", "", { "dependencies": { "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A=="], - "@mapbox/node-pre-gyp/tar": ["tar@7.5.1", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g=="], + "@mapbox/node-pre-gyp/tar": ["tar@7.5.2", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg=="], "@mdx-js/mdx/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], @@ -4265,9 +4263,7 @@ "@nuxt/cli/c12": ["c12@3.3.1", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^17.2.3", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ=="], - "@nuxt/cli/tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], - - "@nuxt/cli/undici": ["undici@7.16.0", "", {}, "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g=="], + "@nuxt/cli/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], "@nuxt/devtools/@nuxt/kit": ["@nuxt/kit@3.20.0", "", { "dependencies": { "c12": "^3.3.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.6.1", "klona": "^2.0.6", "knitwork": "^1.2.0", "mlly": "^1.8.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^2.1.2", "scule": "^1.3.0", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ufo": "^1.6.1", "unctx": "^2.4.1", "untyped": "^2.0.0" } }, "sha512-EoF1Gf0SPj9vxgAIcGEH+a4PRLC7Dwsy21K6f5+POzylT8DgssN8zL5pwXC+X7OcfzBrwYFh7mM7phvh7ubgeg=="], @@ -4277,8 +4273,6 @@ "@nuxt/devtools-kit/@nuxt/kit": ["@nuxt/kit@3.20.0", "", { "dependencies": { "c12": "^3.3.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.6.1", "klona": "^2.0.6", "knitwork": "^1.2.0", "mlly": "^1.8.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^2.1.2", "scule": "^1.3.0", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ufo": "^1.6.1", "unctx": "^2.4.1", "untyped": "^2.0.0" } }, "sha512-EoF1Gf0SPj9vxgAIcGEH+a4PRLC7Dwsy21K6f5+POzylT8DgssN8zL5pwXC+X7OcfzBrwYFh7mM7phvh7ubgeg=="], - "@nuxt/devtools-wizard/diff": ["diff@8.0.2", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="], - "@nuxt/kit/c12": ["c12@3.3.1", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^17.2.3", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ=="], "@nuxt/telemetry/@nuxt/kit": ["@nuxt/kit@3.20.0", "", { "dependencies": { "c12": "^3.3.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.6.1", "klona": "^2.0.6", "knitwork": "^1.2.0", "mlly": "^1.8.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^2.1.2", "scule": "^1.3.0", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ufo": "^1.6.1", "unctx": "^2.4.1", "untyped": "^2.0.0" } }, "sha512-EoF1Gf0SPj9vxgAIcGEH+a4PRLC7Dwsy21K6f5+POzylT8DgssN8zL5pwXC+X7OcfzBrwYFh7mM7phvh7ubgeg=="], @@ -4289,6 +4283,10 @@ "@nuxt/vite-builder/unenv": ["unenv@2.0.0-rc.24", "", { "dependencies": { "pathe": "^2.0.3" } }, "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw=="], + "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@15.0.2", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q=="], + + "@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@15.0.2", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q=="], + "@pandacss/config/typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], "@pandacss/core/postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], @@ -4369,32 +4367,12 @@ "@tanstack/directive-functions-plugin/@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], - "@tanstack/router-utils/diff": ["diff@8.0.2", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="], - "@tanstack/server-functions-plugin/@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], "@testing-library/jest-dom/dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], "@testing-library/vue/@testing-library/dom": ["@testing-library/dom@9.3.4", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.1.3", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "pretty-format": "^27.0.2" } }, "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ=="], - "@types/body-parser/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - - "@types/connect/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - - "@types/express-serve-static-core/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - - "@types/fs-extra/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - - "@types/jsdom/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - - "@types/jsonfile/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - - "@types/send/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - - "@types/serve-static/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - - "@types/serve-static/@types/send": ["@types/send@0.17.6", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og=="], - "@vercel/backends/fs-extra": ["fs-extra@11.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw=="], "@vercel/backends/path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], @@ -4473,8 +4451,6 @@ "@vercel/static-config/ts-morph": ["ts-morph@12.0.0", "", { "dependencies": { "@ts-morph/common": "~0.11.0", "code-block-writer": "^10.1.1" } }, "sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA=="], - "@vinxi/listhen/clipboardy": ["clipboardy@4.0.0", "", { "dependencies": { "execa": "^8.0.1", "is-wsl": "^3.1.0", "is64bit": "^2.0.0" } }, "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w=="], - "@vinxi/listhen/jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], "@vinxi/listhen/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], @@ -4549,14 +4525,10 @@ "boxen/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], - "bun-types/@types/node": ["@types/node@24.9.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg=="], - "c12/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], "caniuse-api/browserslist": ["browserslist@4.27.0", "", { "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", "electron-to-chromium": "^1.5.238", "node-releases": "^2.0.26", "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw=="], - "clipboardy/execa": ["execa@9.6.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw=="], - "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -4569,6 +4541,8 @@ "copy-anything/is-what": ["is-what@5.5.0", "", {}, "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw=="], + "copy-paste/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + "cosmiconfig/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], "crosspath/@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="], @@ -4603,6 +4577,8 @@ "edge-runtime/picocolors": ["picocolors@1.0.0", "", {}, "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="], + "edge-runtime/signal-exit": ["signal-exit@4.0.2", "", {}, "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q=="], + "editorconfig/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], "editorconfig/minimatch": ["minimatch@9.0.1", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w=="], @@ -4617,8 +4593,6 @@ "estree-util-to-js/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - "execa/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], @@ -4649,8 +4623,6 @@ "listhen/@parcel/watcher-wasm": ["@parcel/watcher-wasm@2.5.1", "", { "dependencies": { "is-glob": "^4.0.3", "micromatch": "^4.0.5", "napi-wasm": "^1.1.0" } }, "sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw=="], - "listhen/clipboardy": ["clipboardy@4.0.0", "", { "dependencies": { "execa": "^8.0.1", "is-wsl": "^3.1.0", "is64bit": "^2.0.0" } }, "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w=="], - "listhen/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], "magic-regexp/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], @@ -4675,7 +4647,7 @@ "nitropack/dot-prop": ["dot-prop@10.1.0", "", { "dependencies": { "type-fest": "^5.0.0" } }, "sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q=="], - "nitropack/magicast": ["magicast@0.5.0", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "source-map-js": "^1.2.1" } }, "sha512-D0cxqnb8DpO66P4LkD9ME6a4AhRK6A+xprXksD5vtsJN6G4zbzdI10vDaWCIyj3eLwjNZrQxUYB20FDhKrMEKQ=="], + "nitropack/magicast": ["magicast@0.5.1", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "source-map-js": "^1.2.1" } }, "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw=="], "nitropack/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], @@ -4691,7 +4663,7 @@ "nuxt/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - "nypm/tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], + "nypm/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], @@ -4795,8 +4767,6 @@ "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "rolldown/@oxc-project/types": ["@oxc-project/types@0.82.3", "", {}, "sha512-6nCUxBnGX0c6qfZW5MaF6/fmu5dHJDMiMPaioKHKs5mi5+8/FHQ7WGjgQIz1zxpmceMYfdIXkOaLYE+ejbuOtA=="], "rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.35", "", {}, "sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg=="], @@ -4819,8 +4789,6 @@ "stacktrace-gps/source-map": ["source-map@0.5.6", "", {}, "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA=="], - "storybook-solidjs-vite/@storybook/builder-vite": ["@storybook/builder-vite@9.1.15", "", { "dependencies": { "@storybook/csf-plugin": "9.1.15", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^9.1.15", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-GZkx72cBnCuTL/cVOIWIicB4GCmZWx52zFGSC/qHOT/sKcUkrIoQSpVljqyPa66woHyUeSZX4mu7aGj5A27QVg=="], - "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -4869,6 +4837,8 @@ "ts-node/arg": ["arg@4.1.0", "", {}, "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg=="], + "ts-node/diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], + "tsup/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], "tsyringe/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], @@ -4883,7 +4853,7 @@ "unimport/unplugin-utils": ["unplugin-utils@0.3.1", "", { "dependencies": { "pathe": "^2.0.3", "picomatch": "^4.0.3" } }, "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog=="], - "unplugin-vue-router/@vue/language-core": ["@vue/language-core@3.1.2", "", { "dependencies": { "@volar/language-core": "2.4.23", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.2" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-PyFDCqpdfYUT+oMLqcc61oHfJlC6yjhybaefwQjRdkchIihToOEpJ2Wu/Ebq2yrnJdd1EsaAvZaXVAqcxtnDxQ=="], + "unplugin-vue-router/@vue/language-core": ["@vue/language-core@3.1.3", "", { "dependencies": { "@volar/language-core": "2.4.23", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.2" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-KpR1F/eGAG9D1RZ0/T6zWJs6dh/pRLfY5WupecyYKJ1fjVmDMgTPw9wXmKv2rBjo4zCJiOSiyB8BDP1OUwpMEA=="], "unplugin-vue-router/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], @@ -4945,8 +4915,6 @@ "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "write-yaml-file/write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], "yargs/escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -4955,8 +4923,6 @@ "yauzl/buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], - "youch/cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], - "zod-to-json-schema/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@ark-ui/anatomy/@zag-js/accordion/@zag-js/core": ["@zag-js/core@0.62.1", "", { "dependencies": { "@zag-js/store": "0.62.1", "klona": "2.0.6" } }, "sha512-ZSjqnV5vcGDassjmZ/lxWbG244A0i+IHImVZ/a4/0JkjkH126ly+At4FC+HI571pNKiNlrqYmGzRRSBMqm37yQ=="], @@ -5339,6 +5305,10 @@ "@nuxt/telemetry/@nuxt/kit/c12": ["c12@3.3.1", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^17.2.3", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ=="], + "@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@26.0.0", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="], + + "@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@26.0.0", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="], + "@pandacss/extractor/ts-morph/@ts-morph/common": ["@ts-morph/common@0.27.0", "", { "dependencies": { "fast-glob": "^3.3.3", "minimatch": "^10.0.1", "path-browserify": "^1.0.1" } }, "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ=="], "@pandacss/node/ts-morph/@ts-morph/common": ["@ts-morph/common@0.27.0", "", { "dependencies": { "fast-glob": "^3.3.3", "minimatch": "^10.0.1", "path-browserify": "^1.0.1" } }, "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ=="], @@ -5455,20 +5425,6 @@ "better-opn/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], - "clipboardy/execa/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], - - "clipboardy/execa/human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], - - "clipboardy/execa/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], - - "clipboardy/execa/npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], - - "clipboardy/execa/pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="], - - "clipboardy/execa/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "clipboardy/execa/strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], - "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -5505,9 +5461,7 @@ "nitropack/@vercel/nft/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], - "nitropack/c12/magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], - - "nitropack/dot-prop/type-fest": ["type-fest@5.1.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-wQ531tuWvB6oK+pchHIu5lHe5f5wpSCqB8Kf4dWQRbOYc9HTge7JL0G4Qd44bh6QuJCccIzL3bugb8GI0MwHrg=="], + "nitropack/dot-prop/type-fest": ["type-fest@5.2.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA=="], "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], @@ -5527,8 +5481,6 @@ "source-map/whatwg-url/webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="], - "storybook-solidjs-vite/@storybook/builder-vite/@storybook/csf-plugin": ["@storybook/csf-plugin@9.1.15", "", { "dependencies": { "unplugin": "^1.3.1" }, "peerDependencies": { "storybook": "^9.1.15" } }, "sha512-UThWh7V3+zd+71XdIsNFkrNslkjyaD/HQPnjWGWBCU4ZWNWRSPd3r0r02nH0zzo+NBi0V4vzNDg/PmfD51iaOg=="], - "sucrase/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], "sucrase/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -5547,7 +5499,7 @@ "test-exclude/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "unplugin-vue-router/@vue/language-core/alien-signals": ["alien-signals@3.0.3", "", {}, "sha512-2JXjom6R7ZwrISpUphLhf4htUq1aKRCennTJ6u9kFfr3sLmC9+I4CxxVi+McoFnIg+p1HnVrfLT/iCt4Dlz//Q=="], + "unplugin-vue-router/@vue/language-core/alien-signals": ["alien-signals@3.0.6", "", {}, "sha512-gCs0YqC1mkYGC6IRXsSrA62ShOSv1FlVN5tRp/Cs2vRWLK/BAeluWIdfsl253pFQPznKEvRmHhfep7crWfyfWQ=="], "vinxi/h3/cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], @@ -5563,7 +5515,7 @@ "vue-component-meta/@vue/language-core/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "vue-tsc/@vue/language-core/alien-signals": ["alien-signals@3.0.3", "", {}, "sha512-2JXjom6R7ZwrISpUphLhf4htUq1aKRCennTJ6u9kFfr3sLmC9+I4CxxVi+McoFnIg+p1HnVrfLT/iCt4Dlz//Q=="], + "vue-tsc/@vue/language-core/alien-signals": ["alien-signals@3.0.6", "", {}, "sha512-gCs0YqC1mkYGC6IRXsSrA62ShOSv1FlVN5tRp/Cs2vRWLK/BAeluWIdfsl253pFQPznKEvRmHhfep7crWfyfWQ=="], "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -5775,10 +5727,6 @@ "archiver-utils/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "clipboardy/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - - "clipboardy/execa/pretty-ms/parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], - "js-beautify/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "micro/raw-body/http-errors/depd": ["depd@1.1.2", "", {}, "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="], @@ -5795,8 +5743,6 @@ "nitropack/@vercel/nft/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "storybook-solidjs-vite/@storybook/builder-vite/@storybook/csf-plugin/unplugin": ["unplugin@1.16.1", "", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w=="], - "sucrase/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "tailwindcss/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], diff --git a/packages/react/package.json b/packages/react/package.json index 276b01eedf..4419880334 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -112,6 +112,7 @@ "@zag-js/focus-trap": "1.27.1", "@zag-js/highlight-word": "1.27.1", "@zag-js/hover-card": "1.27.1", + "@zag-js/image-cropper": "1.27.1", "@zag-js/i18n-utils": "1.27.1", "@zag-js/json-tree-utils": "1.27.1", "@zag-js/listbox": "1.27.1", diff --git a/packages/react/src/components/anatomy.ts b/packages/react/src/components/anatomy.ts index d880067cfb..945ab415ae 100644 --- a/packages/react/src/components/anatomy.ts +++ b/packages/react/src/components/anatomy.ts @@ -17,6 +17,7 @@ export { fieldsetAnatomy } from './fieldset/fieldset.anatomy' export { fileUploadAnatomy } from './file-upload/file-upload.anatomy' export { floatingPanelAnatomy } from './floating-panel/floating-panel.anatomy' export { hoverCardAnatomy } from './hover-card/hover-card.anatomy' +export { imageCropperAnatomy } from './image-cropper/image-cropper.anatomy' export { listboxAnatomy } from './listbox/listbox.anatomy' export { marqueeAnatomy } from './marquee/marquee.anatomy' export { menuAnatomy } from './menu/menu.anatomy' diff --git a/packages/react/src/components/image-cropper/examples/basic.tsx b/packages/react/src/components/image-cropper/examples/basic.tsx new file mode 100644 index 0000000000..e9db7ba1b0 --- /dev/null +++ b/packages/react/src/components/image-cropper/examples/basic.tsx @@ -0,0 +1,20 @@ +import { ImageCropper } from '@ark-ui/react/image-cropper' + +export const Basic = () => { + return ( + + + + + {ImageCropper.handles.map((position) => ( + +
+ + ))} + + + + + + ) +} diff --git a/packages/react/src/components/image-cropper/examples/circle.tsx b/packages/react/src/components/image-cropper/examples/circle.tsx new file mode 100644 index 0000000000..76563fdc13 --- /dev/null +++ b/packages/react/src/components/image-cropper/examples/circle.tsx @@ -0,0 +1,18 @@ +import { ImageCropper } from '@ark-ui/react/image-cropper' + +export const Circle = () => { + return ( + + + + + {ImageCropper.handles.map((position) => ( + +
+ + ))} + + + + ) +} diff --git a/packages/react/src/components/image-cropper/examples/controlled.tsx b/packages/react/src/components/image-cropper/examples/controlled.tsx new file mode 100644 index 0000000000..90add933a9 --- /dev/null +++ b/packages/react/src/components/image-cropper/examples/controlled.tsx @@ -0,0 +1,28 @@ +import { ImageCropper } from '@ark-ui/react/image-cropper' +import { useState } from 'react' + +export const Controlled = () => { + const [zoom, setZoom] = useState(1) + + return ( + <> + + + + setZoom(e.zoom)}> + + + + {ImageCropper.handles.map((position) => ( + +
+ + ))} + + + + + + + ) +} diff --git a/packages/react/src/components/image-cropper/examples/fixed.tsx b/packages/react/src/components/image-cropper/examples/fixed.tsx new file mode 100644 index 0000000000..df3c46738f --- /dev/null +++ b/packages/react/src/components/image-cropper/examples/fixed.tsx @@ -0,0 +1,15 @@ +import { ImageCropper } from '@ark-ui/react/image-cropper' + +export const Fixed = () => { + return ( + + + + + + + + + + ) +} diff --git a/packages/react/src/components/image-cropper/examples/root-provider.tsx b/packages/react/src/components/image-cropper/examples/root-provider.tsx new file mode 100644 index 0000000000..9f0a26d56a --- /dev/null +++ b/packages/react/src/components/image-cropper/examples/root-provider.tsx @@ -0,0 +1,27 @@ +import { ImageCropper, useImageCropper } from '@ark-ui/react/image-cropper' + +export const RootProvider = () => { + const imageCropper = useImageCropper() + + return ( + <> + + + + + + + + {ImageCropper.handles.map((position) => ( + +
+ + ))} + + + + + + + ) +} diff --git a/packages/react/src/components/image-cropper/image-cropper-context.tsx b/packages/react/src/components/image-cropper/image-cropper-context.tsx new file mode 100644 index 0000000000..41925359e8 --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper-context.tsx @@ -0,0 +1,8 @@ +import type { ReactNode } from 'react' +import { type UseImageCropperContext, useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperContextProps { + children: (context: UseImageCropperContext) => ReactNode +} + +export const ImageCropperContext = (props: ImageCropperContextProps) => props.children(useImageCropperContext()) diff --git a/packages/react/src/components/image-cropper/image-cropper-grid.tsx b/packages/react/src/components/image-cropper/image-cropper-grid.tsx new file mode 100644 index 0000000000..d907bacc0d --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper-grid.tsx @@ -0,0 +1,18 @@ +import type { GridProps } from '@zag-js/image-cropper' +import { mergeProps } from '@zag-js/react' +import { forwardRef } from 'react' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperGridBaseProps extends PolymorphicProps, GridProps {} +export interface ImageCropperGridProps extends HTMLProps<'div'>, ImageCropperGridBaseProps {} + +export const ImageCropperGrid = forwardRef((props, ref) => { + const { axis, ...localProps } = props + const imageCropper = useImageCropperContext() + const mergedProps = mergeProps(imageCropper.getGridProps({ axis }), localProps) + + return +}) + +ImageCropperGrid.displayName = 'ImageCropperGrid' diff --git a/packages/react/src/components/image-cropper/image-cropper-handle.tsx b/packages/react/src/components/image-cropper/image-cropper-handle.tsx new file mode 100644 index 0000000000..bfa8e75063 --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper-handle.tsx @@ -0,0 +1,18 @@ +import type { HandleProps } from '@zag-js/image-cropper' +import { mergeProps } from '@zag-js/react' +import { forwardRef } from 'react' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperHandleBaseProps extends PolymorphicProps, HandleProps {} +export interface ImageCropperHandleProps extends HTMLProps<'div'>, ImageCropperHandleBaseProps {} + +export const ImageCropperHandle = forwardRef((props, ref) => { + const { position, ...localProps } = props + const imageCropper = useImageCropperContext() + const mergedProps = mergeProps(imageCropper.getHandleProps({ position }), localProps) + + return +}) + +ImageCropperHandle.displayName = 'ImageCropperHandle' diff --git a/packages/react/src/components/image-cropper/image-cropper-image.tsx b/packages/react/src/components/image-cropper/image-cropper-image.tsx new file mode 100644 index 0000000000..e8a66ee2c1 --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper-image.tsx @@ -0,0 +1,16 @@ +import { mergeProps } from '@zag-js/react' +import { forwardRef } from 'react' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperImageBaseProps extends PolymorphicProps {} +export interface ImageCropperImageProps extends HTMLProps<'img'>, ImageCropperImageBaseProps {} + +export const ImageCropperImage = forwardRef((props, ref) => { + const imageCropper = useImageCropperContext() + const mergedProps = mergeProps(imageCropper.getImageProps(), props) + + return +}) + +ImageCropperImage.displayName = 'ImageCropperImage' diff --git a/packages/react/src/components/image-cropper/image-cropper-root-provider.tsx b/packages/react/src/components/image-cropper/image-cropper-root-provider.tsx new file mode 100644 index 0000000000..33e92f32a5 --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper-root-provider.tsx @@ -0,0 +1,26 @@ +import { mergeProps } from '@zag-js/react' +import { forwardRef } from 'react' +import { createSplitProps } from '../../utils/create-split-props' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import type { UseImageCropperReturn } from './use-image-cropper' +import { ImageCropperProvider } from './use-image-cropper-context' + +interface RootProviderProps { + value: UseImageCropperReturn +} + +export interface ImageCropperRootProviderBaseProps extends RootProviderProps, PolymorphicProps {} +export interface ImageCropperRootProviderProps extends HTMLProps<'div'>, ImageCropperRootProviderBaseProps {} + +export const ImageCropperRootProvider = forwardRef((props, ref) => { + const [{ value: imageCropper }, localProps] = createSplitProps()(props, ['value']) + const mergedProps = mergeProps(imageCropper.getRootProps(), localProps) + + return ( + + + + ) +}) + +ImageCropperRootProvider.displayName = 'ImageCropperRootProvider' diff --git a/packages/react/src/components/image-cropper/image-cropper-root.tsx b/packages/react/src/components/image-cropper/image-cropper-root.tsx new file mode 100644 index 0000000000..a7ce95ee3e --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper-root.tsx @@ -0,0 +1,52 @@ +import { mergeProps } from '@zag-js/react' +import { forwardRef } from 'react' +import { createSplitProps } from '../../utils/create-split-props' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { type UseImageCropperProps, useImageCropper } from './use-image-cropper' +import { ImageCropperProvider } from './use-image-cropper-context' + +export interface ImageCropperRootBaseProps extends UseImageCropperProps, PolymorphicProps {} +export interface ImageCropperRootProps extends HTMLProps<'div'>, ImageCropperRootBaseProps {} + +export const ImageCropperRoot = forwardRef((props, ref) => { + const [useImageCropperProps, localProps] = createSplitProps()(props, [ + 'aspectRatio', + 'cropShape', + 'defaultFlip', + 'defaultRotation', + 'defaultZoom', + 'fixedCropArea', + 'flip', + 'id', + 'ids', + 'initialCrop', + 'maxHeight', + 'maxWidth', + 'maxZoom', + 'minHeight', + 'minWidth', + 'minZoom', + 'nudgeStep', + 'nudgeStepCtrl', + 'nudgeStepShift', + 'onCropChange', + 'onFlipChange', + 'onRotationChange', + 'onZoomChange', + 'rotation', + 'translations', + 'zoom', + 'zoomSensitivity', + 'zoomStep', + ]) + const imageCropper = useImageCropper(useImageCropperProps) + const mergedProps = mergeProps(imageCropper.getRootProps(), localProps) + + return ( + + + + ) +}) + +ImageCropperRoot.displayName = 'ImageCropperRoot' diff --git a/packages/react/src/components/image-cropper/image-cropper-selection.tsx b/packages/react/src/components/image-cropper/image-cropper-selection.tsx new file mode 100644 index 0000000000..44b7e55738 --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper-selection.tsx @@ -0,0 +1,16 @@ +import { mergeProps } from '@zag-js/react' +import { forwardRef } from 'react' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperSelectionBaseProps extends PolymorphicProps {} +export interface ImageCropperSelectionProps extends HTMLProps<'div'>, ImageCropperSelectionBaseProps {} + +export const ImageCropperSelection = forwardRef((props, ref) => { + const imageCropper = useImageCropperContext() + const mergedProps = mergeProps(imageCropper.getSelectionProps(), props) + + return +}) + +ImageCropperSelection.displayName = 'ImageCropperSelection' diff --git a/packages/react/src/components/image-cropper/image-cropper-viewport.tsx b/packages/react/src/components/image-cropper/image-cropper-viewport.tsx new file mode 100644 index 0000000000..ac9728453a --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper-viewport.tsx @@ -0,0 +1,16 @@ +import { mergeProps } from '@zag-js/react' +import { forwardRef } from 'react' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperViewportBaseProps extends PolymorphicProps {} +export interface ImageCropperViewportProps extends HTMLProps<'div'>, ImageCropperViewportBaseProps {} + +export const ImageCropperViewport = forwardRef((props, ref) => { + const imageCropper = useImageCropperContext() + const mergedProps = mergeProps(imageCropper.getViewportProps(), props) + + return +}) + +ImageCropperViewport.displayName = 'ImageCropperViewport' diff --git a/packages/react/src/components/image-cropper/image-cropper.anatomy.ts b/packages/react/src/components/image-cropper/image-cropper.anatomy.ts new file mode 100644 index 0000000000..c98ff919f9 --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper.anatomy.ts @@ -0,0 +1 @@ +export { anatomy as imageCropperAnatomy } from '@zag-js/image-cropper' diff --git a/packages/react/src/components/image-cropper/image-cropper.stories.tsx b/packages/react/src/components/image-cropper/image-cropper.stories.tsx new file mode 100644 index 0000000000..3a76f74a53 --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper.stories.tsx @@ -0,0 +1,13 @@ +import type { Meta } from '@storybook/react-vite' + +const meta: Meta = { + title: 'Components / Image Cropper', +} + +export default meta + +export { Basic } from './examples/basic' +export { Circle } from './examples/circle' +export { Controlled } from './examples/controlled' +export { Fixed } from './examples/fixed' +export { RootProvider } from './examples/root-provider' diff --git a/packages/react/src/components/image-cropper/image-cropper.ts b/packages/react/src/components/image-cropper/image-cropper.ts new file mode 100644 index 0000000000..da18d1065a --- /dev/null +++ b/packages/react/src/components/image-cropper/image-cropper.ts @@ -0,0 +1,48 @@ +export type { + CropChangeDetails, + FlipChangeDetails, + FlipState, + HandlePosition, + RotationChangeDetails, + ZoomChangeDetails, + SelectionLabelDetails, + PreviewDescriptionDetails, + SelectionValueTextDetails, +} from '@zag-js/image-cropper' +export { handles } from '@zag-js/image-cropper' +export { ImageCropperContext as Context, type ImageCropperContextProps as ContextProps } from './image-cropper-context' +export { + ImageCropperGrid as Grid, + type ImageCropperGridBaseProps as GridBaseProps, + type ImageCropperGridProps as GridProps, +} from './image-cropper-grid' +export { + ImageCropperHandle as Handle, + type ImageCropperHandleBaseProps as HandleBaseProps, + type ImageCropperHandleProps as HandleProps, +} from './image-cropper-handle' +export { + ImageCropperImage as Image, + type ImageCropperImageBaseProps as ImageBaseProps, + type ImageCropperImageProps as ImageProps, +} from './image-cropper-image' +export { + ImageCropperRoot as Root, + type ImageCropperRootBaseProps as RootBaseProps, + type ImageCropperRootProps as RootProps, +} from './image-cropper-root' +export { + ImageCropperRootProvider as RootProvider, + type ImageCropperRootProviderBaseProps as RootProviderBaseProps, + type ImageCropperRootProviderProps as RootProviderProps, +} from './image-cropper-root-provider' +export { + ImageCropperSelection as Selection, + type ImageCropperSelectionBaseProps as SelectionBaseProps, + type ImageCropperSelectionProps as SelectionProps, +} from './image-cropper-selection' +export { + ImageCropperViewport as Viewport, + type ImageCropperViewportBaseProps as ViewportBaseProps, + type ImageCropperViewportProps as ViewportProps, +} from './image-cropper-viewport' diff --git a/packages/react/src/components/image-cropper/index.ts b/packages/react/src/components/image-cropper/index.ts new file mode 100644 index 0000000000..88e9cedf1f --- /dev/null +++ b/packages/react/src/components/image-cropper/index.ts @@ -0,0 +1,37 @@ +export type { + CropChangeDetails as ImageCropperCropChangeDetails, + FlipChangeDetails as ImageCropperFlipChangeDetails, + FlipState as ImageCropperFlipState, + HandlePosition as ImageCropperHandlePosition, + RotationChangeDetails as ImageCropperRotationChangeDetails, + ZoomChangeDetails as ImageCropperZoomChangeDetails, +} from '@zag-js/image-cropper' +export { ImageCropperContext, type ImageCropperContextProps } from './image-cropper-context' +export { ImageCropperGrid, type ImageCropperGridBaseProps, type ImageCropperGridProps } from './image-cropper-grid' +export { + ImageCropperHandle, + type ImageCropperHandleBaseProps, + type ImageCropperHandleProps, +} from './image-cropper-handle' +export { ImageCropperImage, type ImageCropperImageBaseProps, type ImageCropperImageProps } from './image-cropper-image' +export { ImageCropperRoot, type ImageCropperRootBaseProps, type ImageCropperRootProps } from './image-cropper-root' +export { + ImageCropperRootProvider, + type ImageCropperRootProviderBaseProps, + type ImageCropperRootProviderProps, +} from './image-cropper-root-provider' +export { + ImageCropperSelection, + type ImageCropperSelectionBaseProps, + type ImageCropperSelectionProps, +} from './image-cropper-selection' +export { + ImageCropperViewport, + type ImageCropperViewportBaseProps, + type ImageCropperViewportProps, +} from './image-cropper-viewport' +export { imageCropperAnatomy } from './image-cropper.anatomy' +export { useImageCropper, type UseImageCropperProps, type UseImageCropperReturn } from './use-image-cropper' +export { useImageCropperContext, type UseImageCropperContext } from './use-image-cropper-context' + +export * as ImageCropper from './image-cropper' diff --git a/packages/react/src/components/image-cropper/use-image-cropper-context.ts b/packages/react/src/components/image-cropper/use-image-cropper-context.ts new file mode 100644 index 0000000000..14bc6922dc --- /dev/null +++ b/packages/react/src/components/image-cropper/use-image-cropper-context.ts @@ -0,0 +1,10 @@ +import { createContext } from '../../utils/create-context' +import type { UseImageCropperReturn } from './use-image-cropper' + +export interface UseImageCropperContext extends UseImageCropperReturn {} + +export const [ImageCropperProvider, useImageCropperContext] = createContext({ + name: 'ImageCropperContext', + hookName: 'useImageCropperContext', + providerName: '', +}) diff --git a/packages/react/src/components/image-cropper/use-image-cropper.ts b/packages/react/src/components/image-cropper/use-image-cropper.ts new file mode 100644 index 0000000000..f3bab95fd1 --- /dev/null +++ b/packages/react/src/components/image-cropper/use-image-cropper.ts @@ -0,0 +1,25 @@ +import * as imageCropper from '@zag-js/image-cropper' +import { type PropTypes, normalizeProps, useMachine } from '@zag-js/react' +import { useId } from 'react' +import { useEnvironmentContext, useLocaleContext } from '../../providers' +import type { Optional } from '../../types' + +export interface UseImageCropperProps extends Optional, 'id'> {} + +export interface UseImageCropperReturn extends imageCropper.Api {} + +export const useImageCropper = (props?: UseImageCropperProps): UseImageCropperReturn => { + const id = useId() + const { dir } = useLocaleContext() + const { getRootNode } = useEnvironmentContext() + + const machineProps: imageCropper.Props = { + id, + dir, + getRootNode, + ...props, + } + + const service = useMachine(imageCropper.machine, machineProps) + return imageCropper.connect(service, normalizeProps) +} diff --git a/packages/react/src/components/index.ts b/packages/react/src/components/index.ts index 5a5d5003f4..6d444e5be0 100644 --- a/packages/react/src/components/index.ts +++ b/packages/react/src/components/index.ts @@ -23,6 +23,7 @@ export * from './format' export * from './frame' export * from './highlight' export * from './hover-card' +export * from './image-cropper' export * from './json-tree-view' export * from './listbox' export * from './marquee' diff --git a/packages/solid/package.json b/packages/solid/package.json index 021cfaf822..9a1d46d0db 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -111,6 +111,7 @@ "@zag-js/focus-trap": "1.27.1", "@zag-js/highlight-word": "1.27.1", "@zag-js/hover-card": "1.27.1", + "@zag-js/image-cropper": "1.27.1", "@zag-js/i18n-utils": "1.27.1", "@zag-js/json-tree-utils": "1.27.1", "@zag-js/listbox": "1.27.1", diff --git a/packages/solid/src/components/anatomy.ts b/packages/solid/src/components/anatomy.ts index d880067cfb..945ab415ae 100644 --- a/packages/solid/src/components/anatomy.ts +++ b/packages/solid/src/components/anatomy.ts @@ -17,6 +17,7 @@ export { fieldsetAnatomy } from './fieldset/fieldset.anatomy' export { fileUploadAnatomy } from './file-upload/file-upload.anatomy' export { floatingPanelAnatomy } from './floating-panel/floating-panel.anatomy' export { hoverCardAnatomy } from './hover-card/hover-card.anatomy' +export { imageCropperAnatomy } from './image-cropper/image-cropper.anatomy' export { listboxAnatomy } from './listbox/listbox.anatomy' export { marqueeAnatomy } from './marquee/marquee.anatomy' export { menuAnatomy } from './menu/menu.anatomy' diff --git a/packages/solid/src/components/image-cropper/examples/basic.tsx b/packages/solid/src/components/image-cropper/examples/basic.tsx new file mode 100644 index 0000000000..c85b914bea --- /dev/null +++ b/packages/solid/src/components/image-cropper/examples/basic.tsx @@ -0,0 +1,23 @@ +import { For } from 'solid-js' +import { ImageCropper } from '@ark-ui/solid/image-cropper' + +export const Basic = () => { + return ( + + + + + + {(position) => ( + +
+ + )} + + + + + + + ) +} diff --git a/packages/solid/src/components/image-cropper/examples/circle.tsx b/packages/solid/src/components/image-cropper/examples/circle.tsx new file mode 100644 index 0000000000..fafb003873 --- /dev/null +++ b/packages/solid/src/components/image-cropper/examples/circle.tsx @@ -0,0 +1,21 @@ +import { For } from 'solid-js' +import { ImageCropper } from '@ark-ui/solid/image-cropper' + +export const Circle = () => { + return ( + + + + + + {(position) => ( + +
+ + )} + + + + + ) +} diff --git a/packages/solid/src/components/image-cropper/examples/controlled.tsx b/packages/solid/src/components/image-cropper/examples/controlled.tsx new file mode 100644 index 0000000000..e5f587a10b --- /dev/null +++ b/packages/solid/src/components/image-cropper/examples/controlled.tsx @@ -0,0 +1,30 @@ +import { For, createSignal } from 'solid-js' +import { ImageCropper } from '@ark-ui/solid/image-cropper' + +export const Controlled = () => { + const [zoom, setZoom] = createSignal(1) + + return ( + <> + + + + setZoom(details.zoom)}> + + + + + {(position) => ( + +
+ + )} + + + + + + + + ) +} diff --git a/packages/solid/src/components/image-cropper/examples/fixed.tsx b/packages/solid/src/components/image-cropper/examples/fixed.tsx new file mode 100644 index 0000000000..6484a3b8a8 --- /dev/null +++ b/packages/solid/src/components/image-cropper/examples/fixed.tsx @@ -0,0 +1,15 @@ +import { ImageCropper } from '@ark-ui/solid/image-cropper' + +export const Fixed = () => { + return ( + + + + + + + + + + ) +} diff --git a/packages/solid/src/components/image-cropper/examples/root-provider.tsx b/packages/solid/src/components/image-cropper/examples/root-provider.tsx new file mode 100644 index 0000000000..0f9468a3ea --- /dev/null +++ b/packages/solid/src/components/image-cropper/examples/root-provider.tsx @@ -0,0 +1,30 @@ +import { For } from 'solid-js' +import { ImageCropper, useImageCropper } from '@ark-ui/solid/image-cropper' + +export const RootProvider = () => { + const imageCropper = useImageCropper() + + return ( + <> + + + + + + + + + {(position) => ( + +
+ + )} + + + + + + + + ) +} diff --git a/packages/solid/src/components/image-cropper/image-cropper-context.tsx b/packages/solid/src/components/image-cropper/image-cropper-context.tsx new file mode 100644 index 0000000000..bea635270e --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper-context.tsx @@ -0,0 +1,8 @@ +import type { JSX } from 'solid-js' +import { type UseImageCropperContext, useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperContextProps { + children: (context: UseImageCropperContext) => JSX.Element +} + +export const ImageCropperContext = (props: ImageCropperContextProps) => props.children(useImageCropperContext()) diff --git a/packages/solid/src/components/image-cropper/image-cropper-grid.tsx b/packages/solid/src/components/image-cropper/image-cropper-grid.tsx new file mode 100644 index 0000000000..4ac5bb5192 --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper-grid.tsx @@ -0,0 +1,14 @@ +import type { GridProps } from '@zag-js/image-cropper' +import { mergeProps } from '@zag-js/solid' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperGridBaseProps extends PolymorphicProps<'div'>, GridProps {} +export interface ImageCropperGridProps extends HTMLProps<'div'>, ImageCropperGridBaseProps {} + +export const ImageCropperGrid = (props: ImageCropperGridProps) => { + const api = useImageCropperContext() + const mergedProps = mergeProps(() => api().getGridProps({ axis: props.axis }), props) + + return +} diff --git a/packages/solid/src/components/image-cropper/image-cropper-handle.tsx b/packages/solid/src/components/image-cropper/image-cropper-handle.tsx new file mode 100644 index 0000000000..7c3841aa9a --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper-handle.tsx @@ -0,0 +1,14 @@ +import type { HandleProps } from '@zag-js/image-cropper' +import { mergeProps } from '@zag-js/solid' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperHandleBaseProps extends PolymorphicProps<'div'>, HandleProps {} +export interface ImageCropperHandleProps extends HTMLProps<'div'>, ImageCropperHandleBaseProps {} + +export const ImageCropperHandle = (props: ImageCropperHandleProps) => { + const api = useImageCropperContext() + const mergedProps = mergeProps(() => api().getHandleProps({ position: props.position }), props) + + return +} diff --git a/packages/solid/src/components/image-cropper/image-cropper-image.tsx b/packages/solid/src/components/image-cropper/image-cropper-image.tsx new file mode 100644 index 0000000000..88f9c86a55 --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper-image.tsx @@ -0,0 +1,13 @@ +import { mergeProps } from '@zag-js/solid' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperImageBaseProps extends PolymorphicProps<'img'> {} +export interface ImageCropperImageProps extends HTMLProps<'img'>, ImageCropperImageBaseProps {} + +export const ImageCropperImage = (props: ImageCropperImageProps) => { + const api = useImageCropperContext() + const mergedProps = mergeProps(() => api().getImageProps(), props) + + return +} diff --git a/packages/solid/src/components/image-cropper/image-cropper-root-provider.tsx b/packages/solid/src/components/image-cropper/image-cropper-root-provider.tsx new file mode 100644 index 0000000000..71d4ae8445 --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper-root-provider.tsx @@ -0,0 +1,26 @@ +import { mergeProps } from '@zag-js/solid' +import { createSplitProps } from '../../utils/create-split-props' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import type { UseImageCropperReturn } from './use-image-cropper' +import { ImageCropperProvider } from './use-image-cropper-context' + +interface RootProviderProps { + value: UseImageCropperReturn +} + +export interface ImageCropperRootProviderBaseProps extends PolymorphicProps<'div'> {} +export interface ImageCropperRootProviderProps + extends HTMLProps<'div'>, + RootProviderProps, + ImageCropperRootProviderBaseProps {} + +export const ImageCropperRootProvider = (props: ImageCropperRootProviderProps) => { + const [{ value: imageCropper }, localProps] = createSplitProps()(props, ['value']) + const mergedProps = mergeProps(() => imageCropper().getRootProps(), localProps) + + return ( + + + + ) +} diff --git a/packages/solid/src/components/image-cropper/image-cropper-root.tsx b/packages/solid/src/components/image-cropper/image-cropper-root.tsx new file mode 100644 index 0000000000..719b1bee8f --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper-root.tsx @@ -0,0 +1,50 @@ +import { mergeProps } from '@zag-js/solid' +import { createSplitProps } from '../../utils/create-split-props' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { type UseImageCropperProps, useImageCropper } from './use-image-cropper' +import { ImageCropperProvider } from './use-image-cropper-context' + +export interface ImageCropperRootBaseProps extends UseImageCropperProps, PolymorphicProps<'div'> {} +export interface ImageCropperRootProps extends HTMLProps<'div'>, ImageCropperRootBaseProps {} + +export const ImageCropperRoot = (props: ImageCropperRootProps) => { + const [useImageCropperProps, localProps] = createSplitProps()(props, [ + 'aspectRatio', + 'cropShape', + 'defaultFlip', + 'defaultRotation', + 'defaultZoom', + 'fixedCropArea', + 'flip', + 'id', + 'ids', + 'initialCrop', + 'maxHeight', + 'maxWidth', + 'maxZoom', + 'minHeight', + 'minWidth', + 'minZoom', + 'nudgeStep', + 'nudgeStepCtrl', + 'nudgeStepShift', + 'onCropChange', + 'onFlipChange', + 'onRotationChange', + 'onZoomChange', + 'rotation', + 'translations', + 'zoom', + 'zoomSensitivity', + 'zoomStep', + ]) + + const api = useImageCropper(useImageCropperProps) + const mergedProps = mergeProps(() => api().getRootProps(), localProps) + + return ( + + + + ) +} diff --git a/packages/solid/src/components/image-cropper/image-cropper-selection.tsx b/packages/solid/src/components/image-cropper/image-cropper-selection.tsx new file mode 100644 index 0000000000..2715d7e394 --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper-selection.tsx @@ -0,0 +1,13 @@ +import { mergeProps } from '@zag-js/solid' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperSelectionBaseProps extends PolymorphicProps<'div'> {} +export interface ImageCropperSelectionProps extends HTMLProps<'div'>, ImageCropperSelectionBaseProps {} + +export const ImageCropperSelection = (props: ImageCropperSelectionProps) => { + const api = useImageCropperContext() + const mergedProps = mergeProps(() => api().getSelectionProps(), props) + + return +} diff --git a/packages/solid/src/components/image-cropper/image-cropper-viewport.tsx b/packages/solid/src/components/image-cropper/image-cropper-viewport.tsx new file mode 100644 index 0000000000..43ab3cb4d1 --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper-viewport.tsx @@ -0,0 +1,13 @@ +import { mergeProps } from '@zag-js/solid' +import { type HTMLProps, type PolymorphicProps, ark } from '../factory' +import { useImageCropperContext } from './use-image-cropper-context' + +export interface ImageCropperViewportBaseProps extends PolymorphicProps<'div'> {} +export interface ImageCropperViewportProps extends HTMLProps<'div'>, ImageCropperViewportBaseProps {} + +export const ImageCropperViewport = (props: ImageCropperViewportProps) => { + const api = useImageCropperContext() + const mergedProps = mergeProps(() => api().getViewportProps(), props) + + return +} diff --git a/packages/solid/src/components/image-cropper/image-cropper.anatomy.ts b/packages/solid/src/components/image-cropper/image-cropper.anatomy.ts new file mode 100644 index 0000000000..c98ff919f9 --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper.anatomy.ts @@ -0,0 +1 @@ +export { anatomy as imageCropperAnatomy } from '@zag-js/image-cropper' diff --git a/packages/solid/src/components/image-cropper/image-cropper.stories.tsx b/packages/solid/src/components/image-cropper/image-cropper.stories.tsx new file mode 100644 index 0000000000..6919a5747f --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper.stories.tsx @@ -0,0 +1,13 @@ +import type { Meta } from 'storybook-solidjs-vite' + +const meta: Meta = { + title: 'Components / Image Cropper', +} + +export default meta + +export { Basic } from './examples/basic' +export { Circle } from './examples/circle' +export { Controlled } from './examples/controlled' +export { Fixed } from './examples/fixed' +export { RootProvider } from './examples/root-provider' diff --git a/packages/solid/src/components/image-cropper/image-cropper.ts b/packages/solid/src/components/image-cropper/image-cropper.ts new file mode 100644 index 0000000000..83ce711222 --- /dev/null +++ b/packages/solid/src/components/image-cropper/image-cropper.ts @@ -0,0 +1,45 @@ +export type { + CropChangeDetails, + FlipChangeDetails, + FlipState, + HandlePosition, + RotationChangeDetails, + ZoomChangeDetails, +} from '@zag-js/image-cropper' +export { handles } from '@zag-js/image-cropper' +export { ImageCropperContext as Context, type ImageCropperContextProps as ContextProps } from './image-cropper-context' +export { + ImageCropperGrid as Grid, + type ImageCropperGridBaseProps as GridBaseProps, + type ImageCropperGridProps as GridProps, +} from './image-cropper-grid' +export { + ImageCropperHandle as Handle, + type ImageCropperHandleBaseProps as HandleBaseProps, + type ImageCropperHandleProps as HandleProps, +} from './image-cropper-handle' +export { + ImageCropperImage as Image, + type ImageCropperImageBaseProps as ImageBaseProps, + type ImageCropperImageProps as ImageProps, +} from './image-cropper-image' +export { + ImageCropperRoot as Root, + type ImageCropperRootBaseProps as RootBaseProps, + type ImageCropperRootProps as RootProps, +} from './image-cropper-root' +export { + ImageCropperRootProvider as RootProvider, + type ImageCropperRootProviderBaseProps as RootProviderBaseProps, + type ImageCropperRootProviderProps as RootProviderProps, +} from './image-cropper-root-provider' +export { + ImageCropperSelection as Selection, + type ImageCropperSelectionBaseProps as SelectionBaseProps, + type ImageCropperSelectionProps as SelectionProps, +} from './image-cropper-selection' +export { + ImageCropperViewport as Viewport, + type ImageCropperViewportBaseProps as ViewportBaseProps, + type ImageCropperViewportProps as ViewportProps, +} from './image-cropper-viewport' diff --git a/packages/solid/src/components/image-cropper/index.tsx b/packages/solid/src/components/image-cropper/index.tsx new file mode 100644 index 0000000000..88e9cedf1f --- /dev/null +++ b/packages/solid/src/components/image-cropper/index.tsx @@ -0,0 +1,37 @@ +export type { + CropChangeDetails as ImageCropperCropChangeDetails, + FlipChangeDetails as ImageCropperFlipChangeDetails, + FlipState as ImageCropperFlipState, + HandlePosition as ImageCropperHandlePosition, + RotationChangeDetails as ImageCropperRotationChangeDetails, + ZoomChangeDetails as ImageCropperZoomChangeDetails, +} from '@zag-js/image-cropper' +export { ImageCropperContext, type ImageCropperContextProps } from './image-cropper-context' +export { ImageCropperGrid, type ImageCropperGridBaseProps, type ImageCropperGridProps } from './image-cropper-grid' +export { + ImageCropperHandle, + type ImageCropperHandleBaseProps, + type ImageCropperHandleProps, +} from './image-cropper-handle' +export { ImageCropperImage, type ImageCropperImageBaseProps, type ImageCropperImageProps } from './image-cropper-image' +export { ImageCropperRoot, type ImageCropperRootBaseProps, type ImageCropperRootProps } from './image-cropper-root' +export { + ImageCropperRootProvider, + type ImageCropperRootProviderBaseProps, + type ImageCropperRootProviderProps, +} from './image-cropper-root-provider' +export { + ImageCropperSelection, + type ImageCropperSelectionBaseProps, + type ImageCropperSelectionProps, +} from './image-cropper-selection' +export { + ImageCropperViewport, + type ImageCropperViewportBaseProps, + type ImageCropperViewportProps, +} from './image-cropper-viewport' +export { imageCropperAnatomy } from './image-cropper.anatomy' +export { useImageCropper, type UseImageCropperProps, type UseImageCropperReturn } from './use-image-cropper' +export { useImageCropperContext, type UseImageCropperContext } from './use-image-cropper-context' + +export * as ImageCropper from './image-cropper' diff --git a/packages/solid/src/components/image-cropper/use-image-cropper-context.ts b/packages/solid/src/components/image-cropper/use-image-cropper-context.ts new file mode 100644 index 0000000000..22d59a3d5c --- /dev/null +++ b/packages/solid/src/components/image-cropper/use-image-cropper-context.ts @@ -0,0 +1,9 @@ +import { createContext } from '../../utils/create-context' +import type { UseImageCropperReturn } from './use-image-cropper' + +export interface UseImageCropperContext extends UseImageCropperReturn {} + +export const [ImageCropperProvider, useImageCropperContext] = createContext({ + hookName: 'useImageCropperContext', + providerName: '', +}) diff --git a/packages/solid/src/components/image-cropper/use-image-cropper.ts b/packages/solid/src/components/image-cropper/use-image-cropper.ts new file mode 100644 index 0000000000..6b66b8c356 --- /dev/null +++ b/packages/solid/src/components/image-cropper/use-image-cropper.ts @@ -0,0 +1,27 @@ +import * as imageCropper from '@zag-js/image-cropper' +import { type PropTypes, normalizeProps, useMachine } from '@zag-js/solid' +import { type Accessor, createMemo, createUniqueId } from 'solid-js' +import { useEnvironmentContext, useLocaleContext } from '../../providers' +import type { MaybeAccessor, Optional } from '../../types' +import { runIfFn } from '../../utils/run-if-fn' + +export interface UseImageCropperProps extends Optional, 'id'> {} + +export interface UseImageCropperReturn extends Accessor> {} + +export const useImageCropper = (props: MaybeAccessor = {}): UseImageCropperReturn => { + const id = createUniqueId() + const locale = useLocaleContext() + const environment = useEnvironmentContext() + const imageCropperProps = runIfFn(props) + + const machineProps = createMemo(() => ({ + id, + dir: locale().dir, + getRootNode: environment().getRootNode, + ...imageCropperProps, + })) + + const service = useMachine(imageCropper.machine as any, machineProps) + return createMemo(() => imageCropper.connect(service as any, normalizeProps)) +} diff --git a/packages/solid/src/components/index.tsx b/packages/solid/src/components/index.tsx index 05c701b305..c997a0c346 100644 --- a/packages/solid/src/components/index.tsx +++ b/packages/solid/src/components/index.tsx @@ -24,6 +24,7 @@ export * from './format' export * from './frame' export * from './highlight' export * from './hover-card' +export * from './image-cropper' export * from './json-tree-view' export * from './listbox' export * from './marquee' diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 4e2942ef83..5dccc83578 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -164,6 +164,7 @@ "@zag-js/focus-trap": "1.27.1", "@zag-js/highlight-word": "1.27.1", "@zag-js/hover-card": "1.27.1", + "@zag-js/image-cropper": "1.27.1", "@zag-js/i18n-utils": "1.27.1", "@zag-js/json-tree-utils": "1.27.1", "@zag-js/listbox": "1.27.1", diff --git a/packages/svelte/src/lib/components/anatomy.ts b/packages/svelte/src/lib/components/anatomy.ts index d880067cfb..945ab415ae 100644 --- a/packages/svelte/src/lib/components/anatomy.ts +++ b/packages/svelte/src/lib/components/anatomy.ts @@ -17,6 +17,7 @@ export { fieldsetAnatomy } from './fieldset/fieldset.anatomy' export { fileUploadAnatomy } from './file-upload/file-upload.anatomy' export { floatingPanelAnatomy } from './floating-panel/floating-panel.anatomy' export { hoverCardAnatomy } from './hover-card/hover-card.anatomy' +export { imageCropperAnatomy } from './image-cropper/image-cropper.anatomy' export { listboxAnatomy } from './listbox/listbox.anatomy' export { marqueeAnatomy } from './marquee/marquee.anatomy' export { menuAnatomy } from './menu/menu.anatomy' diff --git a/packages/svelte/src/lib/components/image-cropper/examples/basic.svelte b/packages/svelte/src/lib/components/image-cropper/examples/basic.svelte new file mode 100644 index 0000000000..cde0da70e6 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/examples/basic.svelte @@ -0,0 +1,18 @@ + + + + + + + {#each ImageCropper.handles as position} + +
+
+ {/each} + + +
+
+
diff --git a/packages/svelte/src/lib/components/image-cropper/examples/circle.svelte b/packages/svelte/src/lib/components/image-cropper/examples/circle.svelte new file mode 100644 index 0000000000..e1a7905fc4 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/examples/circle.svelte @@ -0,0 +1,16 @@ + + + + + + + {#each ImageCropper.handles as position} + +
+
+ {/each} +
+
+
diff --git a/packages/svelte/src/lib/components/image-cropper/examples/controlled.svelte b/packages/svelte/src/lib/components/image-cropper/examples/controlled.svelte new file mode 100644 index 0000000000..88df46d9b0 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/examples/controlled.svelte @@ -0,0 +1,28 @@ + + +
+ + + + + + + + {#each ImageCropper.handles as position} + +
+
+ {/each} + + +
+
+
+
diff --git a/packages/svelte/src/lib/components/image-cropper/examples/fixed.svelte b/packages/svelte/src/lib/components/image-cropper/examples/fixed.svelte new file mode 100644 index 0000000000..c24223c689 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/examples/fixed.svelte @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/packages/svelte/src/lib/components/image-cropper/examples/root-provider.svelte b/packages/svelte/src/lib/components/image-cropper/examples/root-provider.svelte new file mode 100644 index 0000000000..7a0b002ae3 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/examples/root-provider.svelte @@ -0,0 +1,29 @@ + + +
+ + + + + + + + {#each ImageCropper.handles as position} + +
+
+ {/each} + + +
+
+
+
diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper-context.svelte b/packages/svelte/src/lib/components/image-cropper/image-cropper-context.svelte new file mode 100644 index 0000000000..211e8bff47 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper-context.svelte @@ -0,0 +1,18 @@ + + + + +{@render render?.(context)} diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper-grid.svelte b/packages/svelte/src/lib/components/image-cropper/image-cropper-grid.svelte new file mode 100644 index 0000000000..ae9ee1e70d --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper-grid.svelte @@ -0,0 +1,23 @@ + + + + + diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper-handle.svelte b/packages/svelte/src/lib/components/image-cropper/image-cropper-handle.svelte new file mode 100644 index 0000000000..75d1fd1860 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper-handle.svelte @@ -0,0 +1,23 @@ + + + + + diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper-image.svelte b/packages/svelte/src/lib/components/image-cropper/image-cropper-image.svelte new file mode 100644 index 0000000000..3685ce14fa --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper-image.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper-root-provider.svelte b/packages/svelte/src/lib/components/image-cropper/image-cropper-root-provider.svelte new file mode 100644 index 0000000000..c9b2de5b48 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper-root-provider.svelte @@ -0,0 +1,27 @@ + + + + + diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper-root.svelte b/packages/svelte/src/lib/components/image-cropper/image-cropper-root.svelte new file mode 100644 index 0000000000..20b0624d74 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper-root.svelte @@ -0,0 +1,87 @@ + + + + + diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper-selection.svelte b/packages/svelte/src/lib/components/image-cropper/image-cropper-selection.svelte new file mode 100644 index 0000000000..085d3e8be7 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper-selection.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper-viewport.svelte b/packages/svelte/src/lib/components/image-cropper/image-cropper-viewport.svelte new file mode 100644 index 0000000000..85e7a89724 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper-viewport.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper.anatomy.ts b/packages/svelte/src/lib/components/image-cropper/image-cropper.anatomy.ts new file mode 100644 index 0000000000..c98ff919f9 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper.anatomy.ts @@ -0,0 +1 @@ +export { anatomy as imageCropperAnatomy } from '@zag-js/image-cropper' diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper.stories.ts b/packages/svelte/src/lib/components/image-cropper/image-cropper.stories.ts new file mode 100644 index 0000000000..fcbeea4ee2 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper.stories.ts @@ -0,0 +1,42 @@ +import type { Meta } from '@storybook/svelte' +import BasicExample from './examples/basic.svelte' +import CircleExample from './examples/circle.svelte' +import ControlledExample from './examples/controlled.svelte' +import FixedExample from './examples/fixed.svelte' +import RootProviderExample from './examples/root-provider.svelte' + +const meta: Meta = { + title: 'Components / Image Cropper', +} + +export default meta + +export const Basic = { + render: () => ({ + Component: BasicExample, + }), +} + +export const Circle = { + render: () => ({ + Component: CircleExample, + }), +} + +export const Controlled = { + render: () => ({ + Component: ControlledExample, + }), +} + +export const Fixed = { + render: () => ({ + Component: FixedExample, + }), +} + +export const RootProvider = { + render: () => ({ + Component: RootProviderExample, + }), +} diff --git a/packages/svelte/src/lib/components/image-cropper/image-cropper.ts b/packages/svelte/src/lib/components/image-cropper/image-cropper.ts new file mode 100644 index 0000000000..1792b88502 --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/image-cropper.ts @@ -0,0 +1,46 @@ +export type { + CropChangeDetails, + FlipChangeDetails, + FlipState, + GetCroppedImageOptions, + HandlePosition, + RotationChangeDetails, + ZoomChangeDetails, +} from '@zag-js/image-cropper' +export { handles } from '@zag-js/image-cropper' +export { default as Context, type ImageCropperContextProps as ContextProps } from './image-cropper-context.svelte' +export { + default as Grid, + type ImageCropperGridBaseProps as GridBaseProps, + type ImageCropperGridProps as GridProps, +} from './image-cropper-grid.svelte' +export { + default as Handle, + type ImageCropperHandleBaseProps as HandleBaseProps, + type ImageCropperHandleProps as HandleProps, +} from './image-cropper-handle.svelte' +export { + default as Image, + type ImageCropperImageBaseProps as ImageBaseProps, + type ImageCropperImageProps as ImageProps, +} from './image-cropper-image.svelte' +export { + default as Root, + type ImageCropperRootBaseProps as RootBaseProps, + type ImageCropperRootProps as RootProps, +} from './image-cropper-root.svelte' +export { + default as RootProvider, + type ImageCropperRootProviderBaseProps as RootProviderBaseProps, + type ImageCropperRootProviderProps as RootProviderProps, +} from './image-cropper-root-provider.svelte' +export { + default as Selection, + type ImageCropperSelectionBaseProps as SelectionBaseProps, + type ImageCropperSelectionProps as SelectionProps, +} from './image-cropper-selection.svelte' +export { + default as Viewport, + type ImageCropperViewportBaseProps as ViewportBaseProps, + type ImageCropperViewportProps as ViewportProps, +} from './image-cropper-viewport.svelte' diff --git a/packages/svelte/src/lib/components/image-cropper/index.ts b/packages/svelte/src/lib/components/image-cropper/index.ts new file mode 100644 index 0000000000..a6ed8855aa --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/index.ts @@ -0,0 +1,50 @@ +export type { + CropChangeDetails as ImageCropperCropChangeDetails, + FlipChangeDetails as ImageCropperFlipChangeDetails, + FlipState as ImageCropperFlipState, + GetCroppedImageOptions as ImageCropperGetCroppedImageOptions, + HandlePosition as ImageCropperHandlePosition, + RotationChangeDetails as ImageCropperRotationChangeDetails, + ZoomChangeDetails as ImageCropperZoomChangeDetails, +} from '@zag-js/image-cropper' +export { default as ImageCropperContext, type ImageCropperContextProps } from './image-cropper-context.svelte' +export { + default as ImageCropperGrid, + type ImageCropperGridBaseProps, + type ImageCropperGridProps, +} from './image-cropper-grid.svelte' +export { + default as ImageCropperHandle, + type ImageCropperHandleBaseProps, + type ImageCropperHandleProps, +} from './image-cropper-handle.svelte' +export { + default as ImageCropperImage, + type ImageCropperImageBaseProps, + type ImageCropperImageProps, +} from './image-cropper-image.svelte' +export { + default as ImageCropperRoot, + type ImageCropperRootBaseProps, + type ImageCropperRootProps, +} from './image-cropper-root.svelte' +export { + default as ImageCropperRootProvider, + type ImageCropperRootProviderBaseProps, + type ImageCropperRootProviderProps, +} from './image-cropper-root-provider.svelte' +export { + default as ImageCropperSelection, + type ImageCropperSelectionBaseProps, + type ImageCropperSelectionProps, +} from './image-cropper-selection.svelte' +export { + default as ImageCropperViewport, + type ImageCropperViewportBaseProps, + type ImageCropperViewportProps, +} from './image-cropper-viewport.svelte' +export { imageCropperAnatomy } from './image-cropper.anatomy' +export { useImageCropperContext, type UseImageCropperContext } from './use-image-cropper-context' +export { useImageCropper, type UseImageCropperProps, type UseImageCropperReturn } from './use-image-cropper.svelte' + +export * as ImageCropper from './image-cropper' diff --git a/packages/svelte/src/lib/components/image-cropper/use-image-cropper-context.ts b/packages/svelte/src/lib/components/image-cropper/use-image-cropper-context.ts new file mode 100644 index 0000000000..3b5a4a1f0b --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/use-image-cropper-context.ts @@ -0,0 +1,7 @@ +import { createContext } from '$lib/utils/create-context' +import type { UseImageCropperReturn } from './use-image-cropper.svelte' + +export interface UseImageCropperContext extends UseImageCropperReturn {} +export const [ImageCropperProvider, useImageCropperContext] = createContext({ + name: 'ImageCropperContext', +}) diff --git a/packages/svelte/src/lib/components/image-cropper/use-image-cropper.svelte.ts b/packages/svelte/src/lib/components/image-cropper/use-image-cropper.svelte.ts new file mode 100644 index 0000000000..35f94ae43c --- /dev/null +++ b/packages/svelte/src/lib/components/image-cropper/use-image-cropper.svelte.ts @@ -0,0 +1,27 @@ +import { useEnvironmentContext } from '$lib/providers/environment' +import { useLocaleContext } from '$lib/providers/locale' +import type { Accessor, Optional } from '$lib/types' +import * as imageCropper from '@zag-js/image-cropper' +import { type PropTypes, normalizeProps, useMachine } from '@zag-js/svelte' +import { type MaybeFunction, runIfFn } from '@zag-js/utils' + +export interface UseImageCropperProps extends Optional, 'id'> {} +export interface UseImageCropperReturn extends Accessor> {} + +export const useImageCropper = (props?: MaybeFunction): UseImageCropperReturn => { + const env = useEnvironmentContext() + const locale = useLocaleContext() + + const machineProps = $derived.by(() => { + const resolvedProps = runIfFn(props) + return { + dir: locale().dir, + getRootNode: env().getRootNode, + ...resolvedProps, + } + }) + + const service = useMachine(imageCropper.machine, () => machineProps) + const api = $derived(imageCropper.connect(service, normalizeProps)) + return () => api +} diff --git a/packages/svelte/src/lib/components/index.ts b/packages/svelte/src/lib/components/index.ts index bc065b4bd0..adaa05fd3f 100644 --- a/packages/svelte/src/lib/components/index.ts +++ b/packages/svelte/src/lib/components/index.ts @@ -24,6 +24,7 @@ export * from './format' export * from './frame' export * from './highlight' export * from './hover-card' +export * from './image-cropper' export * from './json-tree-view' export * from './listbox' export * from './marquee' diff --git a/packages/vue/package.json b/packages/vue/package.json index 1de44dc542..ff35a94aa7 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -111,6 +111,7 @@ "@zag-js/focus-trap": "1.27.1", "@zag-js/highlight-word": "1.27.1", "@zag-js/hover-card": "1.27.1", + "@zag-js/image-cropper": "1.27.1", "@zag-js/i18n-utils": "1.27.1", "@zag-js/json-tree-utils": "1.27.1", "@zag-js/listbox": "1.27.1", diff --git a/packages/vue/src/components/anatomy.ts b/packages/vue/src/components/anatomy.ts index b9cb48a17e..0c5e92d9fe 100644 --- a/packages/vue/src/components/anatomy.ts +++ b/packages/vue/src/components/anatomy.ts @@ -17,6 +17,7 @@ export { fieldsetAnatomy } from './fieldset/fieldset.anatomy' export { fileUploadAnatomy } from './file-upload/file-upload.anatomy' export { floatingPanelAnatomy } from './floating-panel/floating-panel.anatomy' export { hoverCardAnatomy } from './hover-card/hover-card.anatomy' +export { imageCropperAnatomy } from './image-cropper/image-cropper.anatomy' export { listboxAnatomy } from './listbox/listbox.anatomy' export { marqueeAnatomy } from './marquee/marquee.anatomy' export { menuAnatomy } from './menu/menu.anatomy' diff --git a/packages/vue/src/components/image-cropper/examples/basic.vue b/packages/vue/src/components/image-cropper/examples/basic.vue new file mode 100644 index 0000000000..a6e78b03e4 --- /dev/null +++ b/packages/vue/src/components/image-cropper/examples/basic.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/vue/src/components/image-cropper/examples/circle.vue b/packages/vue/src/components/image-cropper/examples/circle.vue new file mode 100644 index 0000000000..ff5c4a7780 --- /dev/null +++ b/packages/vue/src/components/image-cropper/examples/circle.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/vue/src/components/image-cropper/examples/controlled.vue b/packages/vue/src/components/image-cropper/examples/controlled.vue new file mode 100644 index 0000000000..35cdf130d3 --- /dev/null +++ b/packages/vue/src/components/image-cropper/examples/controlled.vue @@ -0,0 +1,26 @@ + + + diff --git a/packages/vue/src/components/image-cropper/examples/fixed.vue b/packages/vue/src/components/image-cropper/examples/fixed.vue new file mode 100644 index 0000000000..312bce362c --- /dev/null +++ b/packages/vue/src/components/image-cropper/examples/fixed.vue @@ -0,0 +1,18 @@ + + + diff --git a/packages/vue/src/components/image-cropper/examples/root-provider.vue b/packages/vue/src/components/image-cropper/examples/root-provider.vue new file mode 100644 index 0000000000..8da605cc3d --- /dev/null +++ b/packages/vue/src/components/image-cropper/examples/root-provider.vue @@ -0,0 +1,25 @@ + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper-context.vue b/packages/vue/src/components/image-cropper/image-cropper-context.vue new file mode 100644 index 0000000000..91369de7b0 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper-context.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper-grid.vue b/packages/vue/src/components/image-cropper/image-cropper-grid.vue new file mode 100644 index 0000000000..ab81dcfee3 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper-grid.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper-handle.vue b/packages/vue/src/components/image-cropper/image-cropper-handle.vue new file mode 100644 index 0000000000..5e1f9590e0 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper-handle.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper-image.vue b/packages/vue/src/components/image-cropper/image-cropper-image.vue new file mode 100644 index 0000000000..9d96895bee --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper-image.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper-root-provider.vue b/packages/vue/src/components/image-cropper/image-cropper-root-provider.vue new file mode 100644 index 0000000000..51221c9a98 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper-root-provider.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper-root.vue b/packages/vue/src/components/image-cropper/image-cropper-root.vue new file mode 100644 index 0000000000..4a4c0806e4 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper-root.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper-selection.vue b/packages/vue/src/components/image-cropper/image-cropper-selection.vue new file mode 100644 index 0000000000..319320cfc7 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper-selection.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper-viewport.vue b/packages/vue/src/components/image-cropper/image-cropper-viewport.vue new file mode 100644 index 0000000000..02e6909d17 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper-viewport.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/packages/vue/src/components/image-cropper/image-cropper.anatomy.ts b/packages/vue/src/components/image-cropper/image-cropper.anatomy.ts new file mode 100644 index 0000000000..cbf27cc069 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper.anatomy.ts @@ -0,0 +1,3 @@ +import { anatomy } from '@zag-js/image-cropper' + +export const imageCropperAnatomy = anatomy diff --git a/packages/vue/src/components/image-cropper/image-cropper.stories.ts b/packages/vue/src/components/image-cropper/image-cropper.stories.ts new file mode 100644 index 0000000000..6990344105 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper.stories.ts @@ -0,0 +1,48 @@ +import type { Meta } from '@storybook/vue3-vite' + +import BasicExample from './examples/basic.vue' +import CircleExample from './examples/circle.vue' +import ControlledExample from './examples/controlled.vue' +import FixedExample from './examples/fixed.vue' +import RootProviderExample from './examples/root-provider.vue' + +const meta: Meta = { + title: 'Components / Image Cropper', +} + +export default meta + +export const Basic = { + render: () => ({ + components: { Component: BasicExample }, + template: '', + }), +} + +export const Circle = { + render: () => ({ + components: { Component: CircleExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { Component: ControlledExample }, + template: '', + }), +} + +export const Fixed = { + render: () => ({ + components: { Component: FixedExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { Component: RootProviderExample }, + template: '', + }), +} diff --git a/packages/vue/src/components/image-cropper/image-cropper.ts b/packages/vue/src/components/image-cropper/image-cropper.ts new file mode 100644 index 0000000000..452d200d57 --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper.ts @@ -0,0 +1,46 @@ +export type { + CropChangeDetails, + FlipChangeDetails, + FlipState, + HandlePosition, + RotationChangeDetails, + ZoomChangeDetails, +} from '@zag-js/image-cropper' +export { handles } from '@zag-js/image-cropper' +export { default as Context, type ImageCropperContextProps as ContextProps } from './image-cropper-context.vue' +export { + default as Grid, + type ImageCropperGridBaseProps as GridBaseProps, + type ImageCropperGridProps as GridProps, +} from './image-cropper-grid.vue' +export { + default as Handle, + type ImageCropperHandleBaseProps as HandleBaseProps, + type ImageCropperHandleProps as HandleProps, +} from './image-cropper-handle.vue' +export { + default as Image, + type ImageCropperImageBaseProps as ImageBaseProps, + type ImageCropperImageProps as ImageProps, +} from './image-cropper-image.vue' +export { + default as Root, + type ImageCropperRootBaseProps as RootBaseProps, + type ImageCropperRootEmits as RootEmits, + type ImageCropperRootProps as RootProps, +} from './image-cropper-root.vue' +export { + default as RootProvider, + type ImageCropperRootProviderBaseProps as RootProviderBaseProps, + type ImageCropperRootProviderProps as RootProviderProps, +} from './image-cropper-root-provider.vue' +export { + default as Selection, + type ImageCropperSelectionBaseProps as SelectionBaseProps, + type ImageCropperSelectionProps as SelectionProps, +} from './image-cropper-selection.vue' +export { + default as Viewport, + type ImageCropperViewportBaseProps as ViewportBaseProps, + type ImageCropperViewportProps as ViewportProps, +} from './image-cropper-viewport.vue' diff --git a/packages/vue/src/components/image-cropper/image-cropper.types.ts b/packages/vue/src/components/image-cropper/image-cropper.types.ts new file mode 100644 index 0000000000..73b76a285e --- /dev/null +++ b/packages/vue/src/components/image-cropper/image-cropper.types.ts @@ -0,0 +1,151 @@ +import type * as imageCropper from '@zag-js/image-cropper' +import type { Rect } from '@zag-js/types' + +export interface RootProps { + /** + * The ids of the image cropper elements + */ + ids?: imageCropper.ElementIds + /** + * Specifies the localized strings that identify accessibility elements and their states. + */ + translations?: imageCropper.IntlTranslations + /** + * The initial rectangle of the crop area. + * If not provided, a smart default will be computed based on viewport size and aspect ratio. + */ + initialCrop?: Rect + /** + * The minimum width of the crop area + * @default 40 + */ + minWidth?: number + /** + * The minimum height of the crop area + * @default 40 + */ + minHeight?: number + /** + * The maximum width of the crop area + * @default Infinity + */ + maxWidth?: number + /** + * The maximum height of the crop area + * @default Infinity + */ + maxHeight?: number + /** + * The aspect ratio to maintain for the crop area (width / height). + * For example, an aspect ratio of 16 / 9 will maintain a width to height ratio of 16:9. + * If not provided, the crop area can be freely resized. + */ + aspectRatio?: number + /** + * The shape of the crop area. + * @default "rectangle" + */ + cropShape?: 'rectangle' | 'circle' + /** + * The controlled zoom level of the image. + */ + zoom?: number + /** + * The controlled rotation of the image in degrees (0 - 360). + */ + rotation?: number + /** + * The controlled flip state of the image. + */ + flip?: imageCropper.FlipState + /** + * The initial zoom factor to apply to the image. + * @default 1 + */ + defaultZoom?: number + /** + * The initial rotation to apply to the image in degrees. + * @default 0 + */ + defaultRotation?: number + /** + * The initial flip state to apply to the image. + * @default { horizontal: false, vertical: false } + */ + defaultFlip?: imageCropper.FlipState + /** + * The amount of zoom applied per wheel step. + * @default 0.1 + */ + zoomStep?: number + /** + * Controls how responsive pinch-to-zoom is. + * @default 2 + */ + zoomSensitivity?: number + /** + * The minimum zoom factor allowed. + * @default 1 + */ + minZoom?: number + /** + * The maximum zoom factor allowed. + * @default 5 + */ + maxZoom?: number + /** + * The base nudge step for keyboard arrow keys (in pixels). + * @default 1 + */ + nudgeStep?: number + /** + * The nudge step when Shift key is held (in pixels). + * @default 10 + */ + nudgeStepShift?: number + /** + * The nudge step when Ctrl/Cmd key is held (in pixels). + * @default 50 + */ + nudgeStepCtrl?: number + /** + * Whether the crop area is fixed in size and position. + * @default false + */ + fixedCropArea?: boolean +} + +export type RootEmits = { + /** + * Callback fired when the zoom level changes. + */ + zoomChange: [details: imageCropper.ZoomChangeDetails] + /** + * Callback fired when the zoom level changes. + */ + 'update:zoom': [zoom: number] + /** + * Callback fired when the rotation changes. + */ + rotationChange: [details: imageCropper.RotationChangeDetails] + /** + * Callback fired when the rotation changes. + */ + 'update:rotation': [rotation: number] + /** + * Callback fired when the flip state changes. + */ + flipChange: [details: imageCropper.FlipChangeDetails] + /** + * Callback fired when the flip state changes. + */ + 'update:flip': [flip: imageCropper.FlipState] + /** + * Callback fired when the crop area changes. + */ + cropChange: [details: imageCropper.CropChangeDetails] + /** + * Callback fired when the crop area changes. + */ + 'update:crop': [crop: Rect] +} diff --git a/packages/vue/src/components/image-cropper/index.ts b/packages/vue/src/components/image-cropper/index.ts new file mode 100644 index 0000000000..01e2fbe19a --- /dev/null +++ b/packages/vue/src/components/image-cropper/index.ts @@ -0,0 +1,50 @@ +export type { + CropChangeDetails as ImageCropperCropChangeDetails, + FlipChangeDetails as ImageCropperFlipChangeDetails, + FlipState as ImageCropperFlipState, + HandlePosition as ImageCropperHandlePosition, + RotationChangeDetails as ImageCropperRotationChangeDetails, + ZoomChangeDetails as ImageCropperZoomChangeDetails, +} from '@zag-js/image-cropper' +export { default as ImageCropperContext, type ImageCropperContextProps } from './image-cropper-context.vue' +export { + default as ImageCropperGrid, + type ImageCropperGridProps, + type ImageCropperGridBaseProps, +} from './image-cropper-grid.vue' +export { + default as ImageCropperHandle, + type ImageCropperHandleProps, + type ImageCropperHandleBaseProps, +} from './image-cropper-handle.vue' +export { + default as ImageCropperImage, + type ImageCropperImageProps, + type ImageCropperImageBaseProps, +} from './image-cropper-image.vue' +export { + default as ImageCropperRoot, + type ImageCropperRootEmits, + type ImageCropperRootBaseProps, + type ImageCropperRootProps, +} from './image-cropper-root.vue' +export { + default as ImageCropperRootProvider, + type ImageCropperRootProviderBaseProps, + type ImageCropperRootProviderProps, +} from './image-cropper-root-provider.vue' +export { + default as ImageCropperSelection, + type ImageCropperSelectionProps, + type ImageCropperSelectionBaseProps, +} from './image-cropper-selection.vue' +export { + default as ImageCropperViewport, + type ImageCropperViewportProps, + type ImageCropperViewportBaseProps, +} from './image-cropper-viewport.vue' +export { useImageCropper, type UseImageCropperProps, type UseImageCropperReturn } from './use-image-cropper' +export { useImageCropperContext, type UseImageCropperContext } from './use-image-cropper-context' +export { imageCropperAnatomy } from './image-cropper.anatomy' + +export * as ImageCropper from './image-cropper' diff --git a/packages/vue/src/components/image-cropper/use-image-cropper-context.ts b/packages/vue/src/components/image-cropper/use-image-cropper-context.ts new file mode 100644 index 0000000000..380658295a --- /dev/null +++ b/packages/vue/src/components/image-cropper/use-image-cropper-context.ts @@ -0,0 +1,8 @@ +import type { connect } from '@zag-js/image-cropper' +import type { ComputedRef } from 'vue' +import { createContext } from '../../utils/create-context' + +export interface UseImageCropperContext extends ComputedRef> {} + +export const [ImageCropperProvider, useImageCropperContext] = + createContext('ImageCropperContext') diff --git a/packages/vue/src/components/image-cropper/use-image-cropper.ts b/packages/vue/src/components/image-cropper/use-image-cropper.ts new file mode 100644 index 0000000000..aefa89bf8e --- /dev/null +++ b/packages/vue/src/components/image-cropper/use-image-cropper.ts @@ -0,0 +1,50 @@ +import * as imageCropper from '@zag-js/image-cropper' +import { type PropTypes, normalizeProps, useMachine } from '@zag-js/vue' +import { type ComputedRef, type MaybeRef, computed, toValue, useId } from 'vue' +import { DEFAULT_ENVIRONMENT, DEFAULT_LOCALE, useEnvironmentContext, useLocaleContext } from '../../providers' +import type { EmitFn, Optional } from '../../types' +import { cleanProps } from '../../utils/clean-props' +import type { RootEmits } from './image-cropper.types' + +export interface UseImageCropperProps extends Optional, 'id'> {} +export interface UseImageCropperReturn extends ComputedRef> {} + +export const useImageCropper = (props: MaybeRef = {}, emit?: EmitFn) => { + const id = useId() + const env = useEnvironmentContext(DEFAULT_ENVIRONMENT) + const locale = useLocaleContext(DEFAULT_LOCALE) + + const context = computed(() => { + const localProps = toValue(props) + + return { + id, + dir: locale.value.dir, + getRootNode: env?.value.getRootNode, + ...cleanProps(localProps), + onZoomChange(details) { + emit?.('zoomChange', details) + emit?.('update:zoom', details.zoom) + localProps.onZoomChange?.(details) + }, + onRotationChange(details) { + emit?.('rotationChange', details) + emit?.('update:rotation', details.rotation) + localProps.onRotationChange?.(details) + }, + onFlipChange(details) { + emit?.('flipChange', details) + emit?.('update:flip', details.flip) + localProps.onFlipChange?.(details) + }, + onCropChange(details) { + emit?.('cropChange', details) + emit?.('update:crop', details.crop) + localProps.onCropChange?.(details) + }, + } + }) + + const service = useMachine(imageCropper.machine, context) + return computed(() => imageCropper.connect(service, normalizeProps)) +} diff --git a/packages/vue/src/components/index.ts b/packages/vue/src/components/index.ts index f2b9d9ca96..e13f4f993c 100644 --- a/packages/vue/src/components/index.ts +++ b/packages/vue/src/components/index.ts @@ -24,6 +24,7 @@ export * from './format' export * from './frame' export * from './highlight' export * from './hover-card' +export * from './image-cropper' export * from './json-tree-view' export * from './listbox' export * from './marquee'