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'