diff --git a/README.md b/README.md
index 5eadc0b..3200b8b 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,22 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
UIAble is an open-source collection of reusable UI components designed for developers who want clean, practical, and fully customizable building blocks for modern frontend projects, without lock-in, without unnecessary abstraction, and without rebuilding the same UI patterns from scratch every time.
-
+
---
@@ -79,101 +76,198 @@ The entire component library is transparent and open for contribution. No gated
## Components
-UIAble v1.0 ships with the following components:
-
### Form Controls
-- `Button`
-- `Button Group`
-- `Checkbox`
-- `Combobox`
-- `Command Palette`
-- `Date Picker`
-- `Input`
-- `Input Group`
-- `Input OTP`
-- `Native Select`
-- `Radio`
-- `Radio Group`
-- `Select`
-- `Slider`
-- `Switch`
-- `Textarea`
-- `Toggle`
-- `Toggle Group`
+
### Data Display
-- `Avatar`
-- `Badge`
-- `Card`
-- `Carousel`
-- `Chart`
-- `Data Table`
-- `Empty State`
-- `Hover Card`
-- `KBD`
-- `Label`
-- `List Group`
-- `Table`
-- `Tooltip`
-- `Skeleton`
-- `Calendar`
+
### Feedback & Overlays
-- `Alert`
-- `Alert Dialog`
-- `Dialog`
-- `Drawer`
-- `Progress`
-- `Sheet`
-- `Sonner`
-- `Spinner`
+
### Navigation
-- `Breadcrumb`
-- `Dropdown Menu`
-- `Menubar`
-- `Navbar`
-- `Navigation Menu`
-- `Pagination`
-- `Tabs`
-- `Sidebar`
+
### Layout & Interaction
-- `Accordion`
-- `Collapsible`
-- `Context Menu`
-- `Item`
-- `Popover`
+
-> Components are added based on practical frontend needs, not trend-driven requests. If you need something that isn't here, open a discussion or a PR.
+### Other Components
+
+
---
-## Installation
+## Blocks
+
+Pre-built page sections ready to drop into your project.
+
+### Contact
+
+
+
+### Content
+
+
+
+### CTA
+
+
+
+### Faq
-Clone the repository from Github:
+
+
+### Feature
+
+
+
+### Footer
+
+
+
+### Gallery
+
+
-```bash
-git clone https://github.com/codedthemes/uiable.git
-```
+### Hero
-Navigate into the directory and install dependencies:
+
+
+### Portfolio
+
+
+
+### Landing
-```bash
-cd uiable
-npm install
-```
+
+
+### Portfolio
-Start the Next.js development server:
+
-```bash
-npm run dev
-```
+
+
+> Components are added based on practical frontend needs, not trend-driven requests. If you need something that isn't here, open a discussion or a PR.
---
diff --git a/package-lock.json b/package-lock.json
index 714fcc0..8251b22 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "UIAble",
- "version": "1.2.0",
+ "version": "1.3.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "UIAble",
- "version": "1.2.0",
+ "version": "1.3.0",
"dependencies": {
"@ai-sdk/react": "4.0.19",
"@base-ui/react": "1.6.0",
@@ -1275,743 +1275,194 @@
"node": ">=18"
}
},
- "node_modules/@img/sharp-darwin-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
- "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-darwin-x64": {
+ "node_modules/@img/sharp-win32-x64": {
"version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
- "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
+ "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
"cpu": [
"x64"
],
- "license": "Apache-2.0",
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
- "darwin"
+ "win32"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.2.4"
}
},
- "node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
- "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
- "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
- "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
- "cpu": [
- "arm"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
- "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
},
- "node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
- "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
- "cpu": [
- "ppc64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@img/sharp-libvips-linux-riscv64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
- "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
- "cpu": [
- "riscv64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node_modules/@modelcontextprotocol/sdk": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz",
+ "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@hono/node-server": "^1.19.9",
+ "ajv": "^8.17.1",
+ "ajv-formats": "^3.0.1",
+ "content-type": "^1.0.5",
+ "cors": "^2.8.5",
+ "cross-spawn": "^7.0.5",
+ "eventsource": "^3.0.2",
+ "eventsource-parser": "^3.0.0",
+ "express": "^5.2.1",
+ "express-rate-limit": "^8.2.1",
+ "hono": "^4.11.4",
+ "jose": "^6.1.3",
+ "json-schema-typed": "^8.0.2",
+ "pkce-challenge": "^5.0.0",
+ "raw-body": "^3.0.0",
+ "zod": "^3.25 || ^4.0",
+ "zod-to-json-schema": "^3.25.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@cfworker/json-schema": "^4.1.1",
+ "zod": "^3.25 || ^4.0"
+ },
+ "peerDependenciesMeta": {
+ "@cfworker/json-schema": {
+ "optional": true
+ },
+ "zod": {
+ "optional": false
+ }
}
},
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
- "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
- "cpu": [
- "s390x"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
+ "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
"funding": {
- "url": "https://opencollective.com/libvips"
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
- "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
+ "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
+ "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
+ "dev": true,
+ "license": "MIT",
"optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.3"
+ },
"funding": {
- "url": "https://opencollective.com/libvips"
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1",
+ "@emnapi/runtime": "^1.7.1"
}
},
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
- "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node_modules/@next/env": {
+ "version": "16.2.10",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.10.tgz",
+ "integrity": "sha512-zLPxg9M0MEHmygpj5OuxjQ+vHMiy/K7cSp74G8ecYolmgUWw0RwN02tF56npup/+qaI8JB97hQgS/r2Hb6QwVA==",
+ "license": "MIT"
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "16.2.10",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.10.tgz",
+ "integrity": "sha512-Gs8D2m21VnJeFo9qvYIIqJH94frWerWYu41BprU1pLtRVF7PCQNLiFZZ3fG+iPuj3K83Cwv/rt+msLOy8Qgu3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-glob": "3.3.1"
}
},
- "node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
- "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "16.2.10",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.10.tgz",
+ "integrity": "sha512-0JXq3b85Jk9Jg4ntLUbXSPvoDw3gpZou7twuKdoFG2jOw635v7+IiXfTaa0TxVMyx78pUjnrVYwLgjKfX4e6/A==",
"cpu": [
"x64"
],
- "license": "LGPL-3.0-or-later",
+ "license": "MIT",
"optional": true,
"os": [
- "linux"
+ "win32"
],
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "engines": {
+ "node": ">= 10"
}
},
- "node_modules/@img/sharp-linux-arm": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
- "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
},
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
- "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-ppc64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
- "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
- "cpu": [
- "ppc64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-ppc64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-riscv64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
- "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
- "cpu": [
- "riscv64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-riscv64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-s390x": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
- "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
- "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
- "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
- "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-wasm32": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
- "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
- "cpu": [
- "wasm32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.7.0"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
- "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-ia32": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
- "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
- "cpu": [
- "ia32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
- "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
- "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/remapping": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
- "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.31",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
- "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@modelcontextprotocol/sdk": {
- "version": "1.29.0",
- "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz",
- "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==",
- "license": "MIT",
- "dependencies": {
- "@hono/node-server": "^1.19.9",
- "ajv": "^8.17.1",
- "ajv-formats": "^3.0.1",
- "content-type": "^1.0.5",
- "cors": "^2.8.5",
- "cross-spawn": "^7.0.5",
- "eventsource": "^3.0.2",
- "eventsource-parser": "^3.0.0",
- "express": "^5.2.1",
- "express-rate-limit": "^8.2.1",
- "hono": "^4.11.4",
- "jose": "^6.1.3",
- "json-schema-typed": "^8.0.2",
- "pkce-challenge": "^5.0.0",
- "raw-body": "^3.0.0",
- "zod": "^3.25 || ^4.0",
- "zod-to-json-schema": "^3.25.1"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@cfworker/json-schema": "^4.1.1",
- "zod": "^3.25 || ^4.0"
- },
- "peerDependenciesMeta": {
- "@cfworker/json-schema": {
- "optional": true
- },
- "zod": {
- "optional": false
- }
- }
- },
- "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
- "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
- "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@tybys/wasm-util": "^0.10.3"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- },
- "peerDependencies": {
- "@emnapi/core": "^1.7.1",
- "@emnapi/runtime": "^1.7.1"
- }
- },
- "node_modules/@next/env": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.10.tgz",
- "integrity": "sha512-zLPxg9M0MEHmygpj5OuxjQ+vHMiy/K7cSp74G8ecYolmgUWw0RwN02tF56npup/+qaI8JB97hQgS/r2Hb6QwVA==",
- "license": "MIT"
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.10.tgz",
- "integrity": "sha512-Gs8D2m21VnJeFo9qvYIIqJH94frWerWYu41BprU1pLtRVF7PCQNLiFZZ3fG+iPuj3K83Cwv/rt+msLOy8Qgu3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-glob": "3.3.1"
- }
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.10.tgz",
- "integrity": "sha512-v9IdJCa0H0mbo+8z5zwUpOk1Vj7RjkcI5uNYf5Ws1y6szf/p3Mzl9hLaST8SCt6L9h8NGnruZcd2+o0NTNwDhA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.10.tgz",
- "integrity": "sha512-17IS0jJRViROGmA9uGdNR8VPJpfbnaVG7E9qhso5jDLkmyd0lSDORWxbcKINzcFqzZqGwGtMSnrFRxBpuUYjLQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.10.tgz",
- "integrity": "sha512-GRQRsRtuciNJvB54AvvuQTiq0oZtFwa1owQqtZD8wwnGpM2L39MV22kpI72YSXLKIyY40LC66EiLFv4PiicXxg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.10.tgz",
- "integrity": "sha512-zkN9MQYS7UQBro+FnISUq1itaQjXI9xqISzuQ+2bc921NcJ1x4yPCqrn77tVN6/dOOXaaWVX3k6/bR07pPwK+A==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.10.tgz",
- "integrity": "sha512-iCVJnwvrPYECvA6WM/7+oo+OiTvedIKLxtCLAZP4xZR3nXa1zmzZyLPbYCmWvpd4CvMYF1EMTafd0ii3DygLvA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.10.tgz",
- "integrity": "sha512-ov2g4H0dHY9bPoOU83m91hWT7Iq5qy13bUnyyshLU3HGR1Ownn0X9QpmDPc5iIUaahTp7f7LeGAhV4DSFtackw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.10.tgz",
- "integrity": "sha512-DwAnhLX76HQiFFQNgWlcK+JzlnD1rZ+UK/WY0ZMI/deXpvgnesjNYrqcfo1JzBuz4Kf7o3brIBL0glI1junatA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "16.2.10",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.10.tgz",
- "integrity": "sha512-0JXq3b85Jk9Jg4ntLUbXSPvoDw3gpZou7twuKdoFG2jOw635v7+IiXfTaa0TxVMyx78pUjnrVYwLgjKfX4e6/A==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
+ "engines": {
+ "node": ">= 8"
}
},
"node_modules/@nodelib/fs.stat": {
@@ -2606,220 +2057,20 @@
"license": "MIT",
"engines": {
"node": ">= 20"
- },
- "optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.3.2",
- "@tailwindcss/oxide-darwin-arm64": "4.3.2",
- "@tailwindcss/oxide-darwin-x64": "4.3.2",
- "@tailwindcss/oxide-freebsd-x64": "4.3.2",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.2",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.3.2",
- "@tailwindcss/oxide-linux-arm64-musl": "4.3.2",
- "@tailwindcss/oxide-linux-x64-gnu": "4.3.2",
- "@tailwindcss/oxide-linux-x64-musl": "4.3.2",
- "@tailwindcss/oxide-wasm32-wasi": "4.3.2",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.3.2",
- "@tailwindcss/oxide-win32-x64-msvc": "4.3.2"
- }
- },
- "node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.2.tgz",
- "integrity": "sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.2.tgz",
- "integrity": "sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.2.tgz",
- "integrity": "sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.2.tgz",
- "integrity": "sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.2.tgz",
- "integrity": "sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.2.tgz",
- "integrity": "sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.2.tgz",
- "integrity": "sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.2.tgz",
- "integrity": "sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.2.tgz",
- "integrity": "sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.2.tgz",
- "integrity": "sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==",
- "bundleDependencies": [
- "@napi-rs/wasm-runtime",
- "@emnapi/core",
- "@emnapi/runtime",
- "@tybys/wasm-util",
- "@emnapi/wasi-threads",
- "tslib"
- ],
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.11.1",
- "@emnapi/runtime": "^1.11.1",
- "@emnapi/wasi-threads": "^1.2.2",
- "@napi-rs/wasm-runtime": "^1.1.4",
- "@tybys/wasm-util": "^0.10.2",
- "tslib": "^2.8.1"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.2.tgz",
- "integrity": "sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 20"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.3.2",
+ "@tailwindcss/oxide-darwin-arm64": "4.3.2",
+ "@tailwindcss/oxide-darwin-x64": "4.3.2",
+ "@tailwindcss/oxide-freebsd-x64": "4.3.2",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.2",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.3.2",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.3.2",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.3.2",
+ "@tailwindcss/oxide-linux-x64-musl": "4.3.2",
+ "@tailwindcss/oxide-wasm32-wasi": "4.3.2",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.3.2",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.3.2"
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
@@ -3334,395 +2585,85 @@
},
"engines": {
"node": "18 || 20 || >=22"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.5"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz",
- "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.63.0",
- "@typescript-eslint/types": "8.63.0",
- "@typescript-eslint/typescript-estree": "8.63.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
- "typescript": ">=4.8.4 <6.1.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz",
- "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.63.0",
- "eslint-visitor-keys": "^5.0.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
- "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
- "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/@unrs/resolver-binding-android-arm-eabi": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz",
- "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-android-arm64": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz",
- "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-arm64": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz",
- "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-x64": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz",
- "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-freebsd-x64": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz",
- "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz",
- "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz",
- "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz",
- "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz",
- "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-loong64-gnu": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz",
- "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-loong64-musl": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz",
- "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz",
- "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz",
- "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz",
- "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz",
- "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz",
- "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz",
- "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-openharmony-arm64": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz",
- "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==",
- "cpu": [
- "arm64"
- ],
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ]
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.5"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
- "node_modules/@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz",
- "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==",
- "cpu": [
- "wasm32"
- ],
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz",
+ "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==",
"dev": true,
"license": "MIT",
- "optional": true,
"dependencies": {
- "@emnapi/core": "1.10.0",
- "@emnapi/runtime": "1.10.0",
- "@napi-rs/wasm-runtime": "^1.1.4"
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.63.0",
+ "@typescript-eslint/types": "8.63.0",
+ "@typescript-eslint/typescript-estree": "8.63.0"
},
"engines": {
- "node": ">=14.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
}
},
- "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/runtime": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
- "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz",
+ "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==",
"dev": true,
"license": "MIT",
- "optional": true,
"dependencies": {
- "tslib": "^2.4.0"
+ "@typescript-eslint/types": "8.63.0",
+ "eslint-visitor-keys": "^5.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz",
- "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
},
- "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz",
- "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==",
- "cpu": [
- "ia32"
- ],
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
+ "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "license": "ISC"
},
"node_modules/@unrs/resolver-binding-win32-x64-msvc": {
"version": "1.12.2",
@@ -7843,216 +6784,6 @@
"lightningcss-win32-x64-msvc": "1.32.0"
}
},
- "node_modules/lightningcss-android-arm64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
- "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
- "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-x64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
- "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-freebsd-x64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
- "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
- "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
- "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
- "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
- "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-musl": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
- "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
- "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
"node_modules/lightningcss-win32-x64-msvc": {
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
diff --git a/package.json b/package.json
index 867464a..d93f3c9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "UIAble",
- "version": "1.2.0",
+ "version": "1.3.0",
"private": true,
"scripts": {
"dev": "next dev",
diff --git a/src/category-counts.json b/src/category-counts.json
index 0c98c4e..187b657 100644
--- a/src/category-counts.json
+++ b/src/category-counts.json
@@ -3,15 +3,13 @@
"alert": 32,
"alert-dialog": 5,
"aspect-ratio": 2,
- "attachment": 5,
- "avatar": 8,
- "badge": 32,
+ "avatar": 12,
+ "badge": 36,
"breadcrumb": 8,
"button": 46,
"button-group": 14,
- "bubble": 8,
- "calendar": 10,
- "card": 18,
+ "calendar": 11,
+ "card": 22,
"carousel": 6,
"chart": 6,
"checkbox": 11,
@@ -32,9 +30,6 @@
"item": 15,
"kbd": 4,
"list-group": 10,
- "marker": 7,
- "message": 5,
- "message-scroller": 9,
"menubar": 4,
"native-select": 3,
"pagination": 7,
@@ -43,28 +38,39 @@
"radio": 1,
"radio-group": 9,
"resizable": 2,
- "select": 5,
+ "select": 9,
"separator": 3,
"sheet": 2,
"sidebar": 3,
"skeleton": 5,
- "slider": 5,
+ "slider": 6,
"sonner": 3,
"spinner": 22,
- "switch": 5,
+ "switch": 9,
"table": 2,
"tabs": 7,
- "textarea": 4,
- "toggle": 4,
- "toggle-group": 6,
+ "textarea": 8,
+ "toggle": 6,
+ "toggle-group": 7,
"tooltip": 3,
"typography": 15,
"navigation-menu": 1,
"label": 1,
"scroll-area": 1,
"data-table": 1,
+ "attachment": 5,
+ "bubble": 8,
+ "marker": 7,
+ "message": 5,
+ "message-scroller": 9,
+ "landing": 7,
"cta": 2,
"contact": 1,
"content": 1,
- "faq": 1
-}
+ "faq": 1,
+ "feature": 2,
+ "footer": 3,
+ "gallery": 4,
+ "hero": 2,
+ "portfolio": 4
+}
\ No newline at end of file
diff --git a/src/components-grid.ts b/src/components-grid.ts
index 3ad51c5..4f080af 100644
--- a/src/components-grid.ts
+++ b/src/components-grid.ts
@@ -350,6 +350,31 @@ export const NAV_BLOCKS: NavSection[] = [
slug: "faq",
breakpoints: { xl: 1, lg: 1, md: 1, sm: 1, xs: 1 },
},
+ {
+ title: "Feature",
+ slug: "feature",
+ breakpoints: { xl: 1, lg: 1, md: 1, sm: 1, xs: 1 },
+ },
+ {
+ title: "Footer",
+ slug: "footer",
+ breakpoints: { xl: 1, lg: 1, md: 1, sm: 1, xs: 1 },
+ },
+ {
+ title: "Gallery",
+ slug: "gallery",
+ breakpoints: { xl: 1, lg: 1, md: 1, sm: 1, xs: 1 },
+ },
+ {
+ title: "Hero",
+ slug: "hero",
+ breakpoints: { xl: 1, lg: 1, md: 1, sm: 1, xs: 1 },
+ },
+ {
+ title: "Portfolio",
+ slug: "portfolio",
+ breakpoints: { xl: 1, lg: 1, md: 1, sm: 1, xs: 1 },
+ },
],
},
]
diff --git a/src/components/uiable/avatar/avatar-border-radius.tsx b/src/components/uiable/avatar/avatar-border-radius.tsx
new file mode 100644
index 0000000..6730e1f
--- /dev/null
+++ b/src/components/uiable/avatar/avatar-border-radius.tsx
@@ -0,0 +1,42 @@
+// shadcn
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
+
+// ------------------------------ | AVATAR - BORDER RADIUS | ------------------------------ //
+
+export function AvatarBorderRadius() {
+ return (
+
+
+
+ PP
+
+
+
+ ER
+
+
+
+ ML
+
+
+
+ CN
+
+
+ )
+}
diff --git a/src/components/uiable/avatar/avatar-counter-indicator.tsx b/src/components/uiable/avatar/avatar-counter-indicator.tsx
new file mode 100644
index 0000000..1cdcb25
--- /dev/null
+++ b/src/components/uiable/avatar/avatar-counter-indicator.tsx
@@ -0,0 +1,48 @@
+// shadcn
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
+import { Badge } from "@/components/ui/badge"
+
+// ------------------------------ | AVATAR - COUNTER INDICATOR | ------------------------------ //
+
+export function AvatarCounterIndicator() {
+ return (
+
+ )
+}
diff --git a/src/components/uiable/avatar/avatar-fallback.tsx b/src/components/uiable/avatar/avatar-fallback.tsx
new file mode 100644
index 0000000..2e001d8
--- /dev/null
+++ b/src/components/uiable/avatar/avatar-fallback.tsx
@@ -0,0 +1,31 @@
+// shadcn
+import { Avatar, AvatarFallback } from "@/components/ui/avatar"
+
+// ------------------------------ | AVATAR - FALLBACK | ------------------------------ //
+
+export function AvatarFallbackDemo() {
+ return (
+
+
+
+ AB
+
+
+
+
+ JD
+
+
+
+
+ MK
+
+
+
+
+ ST
+
+
+
+ )
+}
diff --git a/src/components/uiable/avatar/avatar-placeholder-icon.tsx b/src/components/uiable/avatar/avatar-placeholder-icon.tsx
new file mode 100644
index 0000000..54d1c95
--- /dev/null
+++ b/src/components/uiable/avatar/avatar-placeholder-icon.tsx
@@ -0,0 +1,34 @@
+// assets
+import { BotIcon, BuildingIcon, SparklesIcon, UserIcon } from "lucide-react"
+
+// shadcn
+import { Avatar, AvatarFallback } from "@/components/ui/avatar"
+
+// ------------------------------ | AVATAR - PLACEHOLDER ICON | ------------------------------ //
+
+export function AvatarPlaceholderIcon() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/badge/badge-avatar.tsx b/src/components/uiable/badge/badge-avatar.tsx
new file mode 100644
index 0000000..0b0f5c8
--- /dev/null
+++ b/src/components/uiable/badge/badge-avatar.tsx
@@ -0,0 +1,40 @@
+// shadcn
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
+import { Badge } from "@/components/ui/badge"
+
+// ------------------------------ | BADGE - WITH AVATAR | ------------------------------ //
+
+export function BadgeWithAvatar() {
+ return (
+
+
+
+
+ OM
+
+ Olivia Martin
+
+
+
+
+ AR
+
+ Alex Rivera
+
+
+
+
+ JD
+
+
+ John Doe
+
+
+ )
+}
diff --git a/src/components/uiable/badge/badge-gradient.tsx b/src/components/uiable/badge/badge-gradient.tsx
new file mode 100644
index 0000000..0aa331e
--- /dev/null
+++ b/src/components/uiable/badge/badge-gradient.tsx
@@ -0,0 +1,26 @@
+// shadcn
+import { Badge } from "@/components/ui/badge"
+
+// ------------------------------ | BADGE - GRADIENT VARIANT | ------------------------------ //
+
+export function BadgeGradient() {
+ return (
+
+
+ Spectrum
+
+
+ Ocean
+
+
+ Sunset
+
+
+ Aurora
+
+
+ Subtle Glass
+
+
+ )
+}
diff --git a/src/components/uiable/badge/badge-sizes.tsx b/src/components/uiable/badge/badge-sizes.tsx
new file mode 100644
index 0000000..1a0877f
--- /dev/null
+++ b/src/components/uiable/badge/badge-sizes.tsx
@@ -0,0 +1,15 @@
+// shadcn
+import { Badge } from "@/components/ui/badge"
+
+// ------------------------------ | BADGE - SIZES | ------------------------------ //
+
+export function BadgeSizes() {
+ return (
+
+ Small
+ Default
+ Large
+ Extra Large
+
+ )
+}
diff --git a/src/components/uiable/badge/badge-status.tsx b/src/components/uiable/badge/badge-status.tsx
new file mode 100644
index 0000000..310e2ff
--- /dev/null
+++ b/src/components/uiable/badge/badge-status.tsx
@@ -0,0 +1,43 @@
+// shadcn
+import { Badge } from "@/components/ui/badge"
+
+// ------------------------------ | BADGE - WITH STATUS | ------------------------------ //
+
+export function BadgeWithStatus() {
+ return (
+
+
+
+ Online
+
+
+
+ Away
+
+
+
+ Busy
+
+
+
+ Offline
+
+
+
+
+
+
+ Live Status
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/feature/feature-1/feature-1.tsx b/src/components/uiable/blocks/feature/feature-1/feature-1.tsx
new file mode 100644
index 0000000..a495f34
--- /dev/null
+++ b/src/components/uiable/blocks/feature/feature-1/feature-1.tsx
@@ -0,0 +1,102 @@
+// ------------------------------ | FEATURE - 1 | ------------------------------ //
+
+export default function Feature1() {
+ const features = [
+ {
+ title: "Easy Setup",
+ subtitle: "Get Started in Minutes",
+ colorClass: "bg-pink-500",
+ description:
+ "Quickly configure your app with simple onboarding and intuitive tools, allowing teams to become productive.",
+ },
+ {
+ title: "Smart Automation",
+ subtitle: "Reduce Manual Work",
+ colorClass: "bg-violet-500",
+ description:
+ "Automate repetitive tasks and workflows to save time, improve efficiency, and focus on what matters most.",
+ },
+ {
+ title: "Real-Time Analytics",
+ subtitle: "Make Data-Driven Decisions",
+ colorClass: "bg-blue-500",
+ description:
+ "Access detailed insights and performance metrics instantly to track growth and identify opportunities.",
+ },
+ {
+ title: "Team Collaboration",
+ subtitle: "Work Better Together",
+ colorClass: "bg-cyan-500",
+ description:
+ "Enable seamless teamwork with real-time updates, shared workspaces, and efficient communication tools.",
+ },
+ {
+ title: "Enterprise Security",
+ subtitle: "Protect Your Data",
+ colorClass: "bg-lime-500",
+ description:
+ "Keep sensitive information secure with advanced encryption, role-based access controls, and continuous monitoring.",
+ },
+ {
+ title: "Seamless Integrations",
+ subtitle: "Connect Your Favorite Tools",
+ colorClass: "bg-amber-500",
+ description:
+ "Integrate effortlessly with popular platforms and services to create a unified and efficient workflow.",
+ },
+ ]
+ return (
+
+
+
+
+
+ Powerful Features for Modern Apps
+
+
+ Built for modern teams, our platform combines powerful
+ functionality with an intuitive user experience to help you
+ organize projects, automate processes, collaborate effectively,
+ and make data-driven decisions that accelerate success.
+
+
+
+ {features.map((feature, idx) => (
+
+
+
+
+ 0{idx + 1}
+
+
+
+
+
+ {feature.title}
+
+
+ {feature.subtitle}
+
+
+
+ {feature.description}
+
+
+
+
+ ))}
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/feature/feature-2/feature-2.tsx b/src/components/uiable/blocks/feature/feature-2/feature-2.tsx
new file mode 100644
index 0000000..fe6aca6
--- /dev/null
+++ b/src/components/uiable/blocks/feature/feature-2/feature-2.tsx
@@ -0,0 +1,106 @@
+import { Blocks, Cpu, Rocket, Shield, TrendingUp, Users } from "lucide-react"
+
+// ------------------------------ | FEATURE - 2 | ------------------------------ //
+
+export default function Feature2() {
+ const features = [
+ {
+ title: "Easy Setup",
+ colorClass:
+ "bg-pink-500/5 text-pink-500 group-hover:bg-pink-500 group-hover:text-white",
+ icon: Rocket,
+ description:
+ "Quickly configure your app with simple onboarding and intuitive tools, allowing teams to become productive.",
+ },
+ {
+ title: "Smart Automation",
+ colorClass:
+ "bg-violet-500/5 text-violet-500 group-hover:bg-violet-500 group-hover:text-white",
+ icon: Cpu,
+ description:
+ "Automate repetitive tasks and workflows to save time, improve efficiency, and focus on what matters most.",
+ },
+ {
+ title: "Real-Time Analytics",
+ colorClass:
+ "bg-blue-500/5 text-blue-500 group-hover:bg-blue-500 group-hover:text-white",
+ icon: TrendingUp,
+ description:
+ "Access detailed insights and performance metrics instantly to track growth and identify opportunities.",
+ },
+ {
+ title: "Team Collaboration",
+ colorClass:
+ "bg-cyan-500/5 text-cyan-500 group-hover:bg-cyan-500 group-hover:text-white",
+ icon: Users,
+ description:
+ "Enable seamless teamwork with real-time updates, shared workspaces, and efficient communication tools.",
+ },
+ {
+ title: "Enterprise Security",
+ colorClass:
+ "bg-lime-500/5 text-lime-500 group-hover:bg-lime-500 group-hover:text-white",
+ icon: Shield,
+ description:
+ "Keep sensitive information secure with advanced encryption, role-based access controls, and continuous monitoring.",
+ },
+ {
+ title: "Seamless Integrations",
+ colorClass:
+ "bg-amber-500/5 text-amber-500 group-hover:bg-amber-500 group-hover:text-white",
+ icon: Blocks,
+ description:
+ "Integrate effortlessly with popular platforms and services to create a unified and efficient workflow.",
+ },
+ ]
+ return (
+
+
+
+
+
+ Powerful Features for Modern Apps
+
+
+ Built for modern teams, our platform combines powerful
+ functionality with an intuitive user experience to help you
+ organize projects, automate processes, collaborate effectively,
+ and make data-driven decisions that accelerate success.
+
+
+
+
+
+ {features.map((feature, idx) => (
+
+
+
+
+
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+
+
+ ))}
+
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/footer/footer-1/footer-1.tsx b/src/components/uiable/blocks/footer/footer-1/footer-1.tsx
new file mode 100644
index 0000000..81709aa
--- /dev/null
+++ b/src/components/uiable/blocks/footer/footer-1/footer-1.tsx
@@ -0,0 +1,302 @@
+// shadcn
+
+// assets
+import { ChevronRight } from "lucide-react"
+
+import { Button } from "@/components/ui/button"
+import { Input } from "@/components/ui/input"
+
+// constants
+const footerColumns = [
+ {
+ title: "About Us",
+ links: ["Our Story", "Our Team", "Careers", "Press & Media", "Contact Us"],
+ },
+ {
+ title: "Services",
+ links: [
+ "Web Design",
+ "App Development",
+ "SaaS Solutions",
+ "UI/UX Consultations",
+ "Digital Marketing",
+ ],
+ },
+ {
+ title: "Extra",
+ links: [
+ "Terms & Conditions",
+ "Privacy Policy",
+ "FAQ",
+ "Support Center",
+ "System Status",
+ ],
+ },
+]
+
+const socialIcons = [
+ {
+ label: "Facebook",
+ bgClass: "bg-[#1877f2]",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "Twitter",
+ bgClass: "bg-[#101411]",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "LinkedIn",
+ bgClass: "bg-[#0072b1]",
+ svg: (
+
+
+
+ ),
+ },
+ {
+ label: "YouTube",
+ bgClass: "bg-[#ff0000]",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "Dribbble",
+ bgClass: "bg-[#ea4c89]",
+ svg: (
+
+
+
+ ),
+ },
+]
+
+// ------------------------------ | FOOTER - 1 | ------------------------------ //
+
+export default function Footer1() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SaaS Products
+
+
+ Built for modern teams to organize projects, automate workflows,
+ and collaborate. Make smarter, data-driven decisions.
+
+
+
+
+
+ {footerColumns.map((col) => (
+
+ ))}
+
+
+
+
+ Follow Us
+
+
+ {socialIcons.map(({ label, bgClass, svg }) => (
+
+ {svg}
+
+ ))}
+
+
+
+
+ Stay Connected
+
+
+
+
+ Get updates, news, and insights delivered to you.
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/footer/footer-2/footer-2.tsx b/src/components/uiable/blocks/footer/footer-2/footer-2.tsx
new file mode 100644
index 0000000..2b35858
--- /dev/null
+++ b/src/components/uiable/blocks/footer/footer-2/footer-2.tsx
@@ -0,0 +1,258 @@
+// assets
+import { ChevronRight } from "lucide-react"
+
+// constants
+const footerColumns = [
+ {
+ title: "About Us",
+ links: ["Our Story", "Our Team", "Careers", "Press & Media", "Contact Us"],
+ },
+ {
+ title: "Services",
+ links: [
+ "Web Design",
+ "App Development",
+ "SaaS Solutions",
+ "UI/UX Consultations",
+ "Digital Marketing",
+ ],
+ },
+ {
+ title: "Resources",
+ links: [
+ "Blog",
+ "Documentation",
+ "Community",
+ "Help Center",
+ "API Reference",
+ ],
+ },
+ {
+ title: "Extra",
+ links: [
+ "Terms & Conditions",
+ "Privacy Policy",
+ "FAQ",
+ "Support Center",
+ "System Status",
+ ],
+ },
+]
+
+const socialIcons = [
+ {
+ label: "Facebook",
+ bgClass: "hover:text-[#1877f2]",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "Twitter",
+ bgClass: "hover:text-[#101411]",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "LinkedIn",
+ bgClass: "hover:text-[#0072b1]",
+ svg: (
+
+
+
+ ),
+ },
+ {
+ label: "YouTube",
+ bgClass: "hover:text-[#ff0000]",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "Dribbble",
+ bgClass: "hover:text-[#ea4c89]",
+ svg: (
+
+
+
+ ),
+ },
+]
+
+// ------------------------------ | FOOTER - 1 | ------------------------------ //
+
+export default function Footer1() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SaaSify
+
+
+
+ Built for modern teams to organize projects, automate workflows,
+ and collaborate. Make smarter, data-driven decisions.
+
+
+
+
+
+ {footerColumns.map((col) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+ Copyright © 2026 SaaSify. All Rights Reserved
+
+
+
+
+ {socialIcons.map(({ label, bgClass, svg }) => (
+
+ {svg}
+
+ ))}
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/footer/footer-3/footer-3.tsx b/src/components/uiable/blocks/footer/footer-3/footer-3.tsx
new file mode 100644
index 0000000..b3111f1
--- /dev/null
+++ b/src/components/uiable/blocks/footer/footer-3/footer-3.tsx
@@ -0,0 +1,177 @@
+// constants
+const footerColumns = [
+ {
+ title: "About Us",
+ links: ["Our Story", "Our Team", "Careers", "Press & Media", "Contact Us"],
+ },
+]
+const socialIcons = [
+ {
+ label: "Facebook",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "Twitter",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "LinkedIn",
+ svg: (
+
+
+
+ ),
+ },
+ {
+ label: "YouTube",
+ svg: (
+
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ label: "Dribbble",
+ svg: (
+
+
+
+ ),
+ },
+]
+// ------------------------------ | FOOTER - 3 | ------------------------------ //
+export default function Footer3() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SaaSify
+
+
+
+ {footerColumns.map((col) => (
+
+ {col.links.map((link) => (
+
+
+ {link}
+
+
+ ))}
+
+ ))}
+
+
+ {socialIcons.map(({ label, svg }) => (
+
+ {svg}
+
+ ))}
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/gallery/gallery-1/gallery-1.tsx b/src/components/uiable/blocks/gallery/gallery-1/gallery-1.tsx
new file mode 100644
index 0000000..bd42008
--- /dev/null
+++ b/src/components/uiable/blocks/gallery/gallery-1/gallery-1.tsx
@@ -0,0 +1,132 @@
+import { useState } from "react"
+
+// constants
+const Gallery = [
+ {
+ title: "Urban Reflections",
+ colorClass: "bg-pink-500",
+ images: "/assets/images/block/img-gallery-1.png",
+ description:
+ "Rain-soaked streets mirror towering skyscrapers, creating dramatic reflections that highlight the beauty and energy of the modern city.",
+ },
+ {
+ title: "Stormy Horizons",
+ colorClass: "bg-violet-500",
+ images: "/assets/images/block/img-gallery-2.png",
+ description:
+ "Dark clouds gather above a bustling highway, capturing the contrast between nature's power and the rhythm of urban life.",
+ },
+ {
+ title: "Golden City",
+ colorClass: "bg-blue-500",
+ images: "/assets/images/block/img-gallery-3.png",
+ description:
+ "Warm evening light paints the skyline with soft colors, showcasing the architectural elegance and atmosphere of a thriving city.",
+ },
+ {
+ title: "Architectural Charm",
+ colorClass: "bg-cyan-500",
+ images: "/assets/images/block/img-gallery-4.png",
+ description:
+ "Historic buildings and unique street corners reveal the character, craftsmanship, and timeless beauty of urban architecture.",
+ },
+ {
+ title: "City Movement",
+ colorClass: "bg-lime-500",
+ images: "/assets/images/block/img-gallery-5.png",
+ description:
+ "Busy streets filled with vehicles and towering buildings capture the constant motion and vibrant pace of city living.",
+ },
+ {
+ title: "Neon Nights",
+ colorClass: "bg-amber-500",
+ images: "/assets/images/block/img-gallery-6.png",
+ description:
+ "Glowing lights, reflections, and long-exposure effects transform the city after dark into a captivating visual experience.",
+ },
+]
+// ------------------------------ | GALLERY 1 | ------------------------------ //
+
+export default function Gallery1() {
+ const [activeIdx, setActiveIdx] = useState
(2)
+
+ return (
+
+
+
+
+
+ Gallery
+
+
+ Through My Lens
+
+
+ A collection of moments, perspectives, and stories captured
+ through my camera. Each image reflects creativity, emotion, and
+ the beauty found in everyday experiences.
+
+
+
+ {Gallery.map((gallery, idx) => (
+
setActiveIdx(idx)}
+ className={`group h-80 cursor-pointer transition-all duration-500 ease-in-out max-md:flex-auto md:h-130 ${
+ activeIdx === idx ? "md:flex-3" : "md:flex-1"
+ }`}
+ >
+
+
+
+
+
+
+
+
+ 0{idx + 1}
+
+
+
+
+ {gallery.title}
+
+
+ {gallery.description}
+
+
+
+
+
+
+
+ ))}
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/gallery/gallery-2/gallery-2.tsx b/src/components/uiable/blocks/gallery/gallery-2/gallery-2.tsx
new file mode 100644
index 0000000..0a6eb45
--- /dev/null
+++ b/src/components/uiable/blocks/gallery/gallery-2/gallery-2.tsx
@@ -0,0 +1,98 @@
+// constants
+const Gallery = [
+ {
+ title: "Traditional Wedding Ceremony",
+ images: "/assets/images/block/img-gal-wed-1.png",
+ description:
+ "A beautifully decorated wedding mandap adorned with floral arrangements, capturing the elegance and traditions of a cultural wedding ceremony.",
+ },
+ {
+ title: "Joyful Wedding Celebration",
+ images: "/assets/images/block/img-gal-wed-2.png",
+ description:
+ "The newlyweds celebrate their special moment with family and friends as balloons fill the sky, creating unforgettable memories.",
+ },
+ {
+ title: "Elegant Ceremony Setup",
+ images: "/assets/images/block/img-gal-wed-3.png",
+ description:
+ "Beautiful floral aisle decorations and seating arrangements create a romantic atmosphere for exchanging vows.",
+ },
+ {
+ title: "Romantic Beach Walk",
+ images: "/assets/images/block/img-gal-wed-4.png",
+ description:
+ "A newly married couple strolls hand in hand along the shoreline, embracing a peaceful and romantic sunset moment.",
+ },
+ {
+ title: "Bridal Bouquet Elegance",
+ images: "/assets/images/block/img-gal-wed-5.png",
+ description:
+ "A stunning bouquet of roses and seasonal flowers symbolizes love, beauty, and the celebration of a new beginning.",
+ },
+ {
+ title: "Wedding Details & Rings",
+ images: "/assets/images/block/img-gal-wed-6.png",
+ description:
+ "Delicate bridal shoes and wedding rings capture the charming details that make the special day truly memorable.",
+ },
+]
+// ------------------------------ | GALLERY 2 | ------------------------------ //
+
+export default function Gallery2() {
+ return (
+
+
+
+
+
+
+
+ Love in Pictures
+
+
+ Moments We Treasure
+
+
+ Take a glimpse into our favorite memories. These photographs
+ celebrate the laughter, love, and experiences that have shaped our
+ relationship and brought us to this exciting new chapter.
+
+
+
+ {Gallery.map((gallery, idx) => (
+
+
+
+
+
+
+
+
+ {gallery.title}
+
+
{gallery.description}
+
+
+
+
+
+ ))}
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/gallery/gallery-3/gallery-3.tsx b/src/components/uiable/blocks/gallery/gallery-3/gallery-3.tsx
new file mode 100644
index 0000000..134c140
--- /dev/null
+++ b/src/components/uiable/blocks/gallery/gallery-3/gallery-3.tsx
@@ -0,0 +1,171 @@
+import { useState } from "react"
+
+// constants
+const Gallery = [
+ {
+ title: "Modern Villa Exterior",
+ images: "/assets/images/block/img-gal-home-1.png",
+ description:
+ "Clean architectural lines, spacious terraces, and a sparkling pool create a refined luxury living experience.",
+ },
+ {
+ title: "Luxury Poolside Living",
+ images: "/assets/images/block/img-gal-home-2.png",
+ description:
+ "A resort-inspired outdoor space designed for relaxation, entertainment, and year-round enjoyment.",
+ },
+ {
+ title: "Elegant Contemporary Design",
+ images: "/assets/images/block/img-gal-home-3.png",
+ description:
+ "Sophisticated architecture blends comfort and style, offering seamless indoor and outdoor living.",
+ },
+ {
+ title: "Infinity Pool Retreat",
+ images: "/assets/images/block/img-gal-home-4.png",
+ description:
+ "A serene pool area surrounded by natural beauty provides the perfect setting to unwind and recharge.",
+ },
+ {
+ title: "Panoramic Hillside Views",
+ images: "/assets/images/block/img-gal-home-5.png",
+ description:
+ "Sweeping landscape views enhance the exclusivity and tranquility of this luxury property.",
+ },
+ {
+ title: "Private Residence",
+ images: "/assets/images/block/img-gal-home-6.png",
+ description:
+ "Premium materials, open spaces, and modern details come together to create an exceptional home.",
+ },
+]
+// ------------------------------ | GALLERY 3 | ------------------------------ //
+
+interface GalleryItem {
+ title: string
+ images: string
+ description: string
+}
+
+interface GalleryCardProps {
+ gallery: GalleryItem
+ isActive: boolean
+}
+
+function GalleryCard({ gallery, isActive }: GalleryCardProps) {
+ return (
+
+
+
+
+
+
+
+
+ {gallery.title}
+
+
{gallery.description}
+
+
+
+
+
+ )
+}
+
+export default function Gallery3() {
+ const [activeIdx, setActiveIdx] = useState(2)
+
+ return (
+
+
+
+
+
+ Modern Architectural Excellence
+
+
+
+ Explore contemporary villas featuring clean lines, open spaces,
+ and breathtaking surroundings that redefine luxury living.
+
+
+
+
+
+
+
setActiveIdx(0)}>
+
+
+
+
+
setActiveIdx(1)}>
+
+
+
+
+
setActiveIdx(2)}>
+
+
+
+
+
+
+
+
+
setActiveIdx(5)}>
+
+
+
+
+
setActiveIdx(3)}>
+
+
+
+
+
setActiveIdx(4)}>
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/gallery/gallery-4/gallery-4.tsx b/src/components/uiable/blocks/gallery/gallery-4/gallery-4.tsx
new file mode 100644
index 0000000..47d5722
--- /dev/null
+++ b/src/components/uiable/blocks/gallery/gallery-4/gallery-4.tsx
@@ -0,0 +1,116 @@
+// shadcn
+import React from "react"
+import Autoplay from "embla-carousel-autoplay"
+
+import {
+ Carousel,
+ CarouselContent,
+ CarouselItem,
+} from "@/components/ui/carousel"
+
+// constants
+const Gallery = [
+ {
+ title: "Urban Reflections",
+ images: "/assets/images/block/img-gallery-1.png",
+ description:
+ "Rain-soaked streets mirror towering skyscrapers, creating dramatic reflections that highlight the beauty and energy of the modern city.",
+ },
+ {
+ title: "Stormy Horizons",
+ images: "/assets/images/block/img-gallery-2.png",
+ description:
+ "Dark clouds gather above a bustling highway, capturing the contrast between nature's power and the rhythm of urban life.",
+ },
+ {
+ title: "Golden City",
+ images: "/assets/images/block/img-gallery-3.png",
+ description:
+ "Warm evening light paints the skyline with soft colors, showcasing the architectural elegance and atmosphere of a thriving city.",
+ },
+ {
+ title: "Architectural Charm",
+ images: "/assets/images/block/img-gallery-4.png",
+ description:
+ "Historic buildings and unique street corners reveal the character, craftsmanship, and timeless beauty of urban architecture.",
+ },
+ {
+ title: "City Movement",
+ images: "/assets/images/block/img-gallery-5.png",
+ description:
+ "Busy streets filled with vehicles and towering buildings capture the constant motion and vibrant pace of city living.",
+ },
+ {
+ title: "Neon Nights",
+ images: "/assets/images/block/img-gallery-6.png",
+ description:
+ "Glowing lights, reflections, and long-exposure effects transform the city after dark into a captivating visual experience.",
+ },
+]
+
+// ------------------------------ | GALLERY 4 | ------------------------------ //
+
+export default function Gallery4() {
+ const plugin = React.useMemo(
+ () => Autoplay({ delay: 2000, stopOnInteraction: true }),
+ []
+ )
+ return (
+
+
+
+
+
+ Portfolio Gallery
+
+
+ Explore a curated collection of projects that showcase creativity,
+ craftsmanship, and attention to detail across a variety of designs
+ and spaces.
+
+
+
plugin.stop()}
+ onMouseLeave={() => plugin.reset()}
+ >
+
+ {Gallery.map((gallery, idx) => (
+
+
+
+
+
+
+
+
+
+ {gallery.title}
+
+
+ {gallery.description}
+
+
+
+
+
+
+
+
+ ))}
+
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/hero/hero-1/hero-1.tsx b/src/components/uiable/blocks/hero/hero-1/hero-1.tsx
new file mode 100644
index 0000000..cd32486
--- /dev/null
+++ b/src/components/uiable/blocks/hero/hero-1/hero-1.tsx
@@ -0,0 +1,192 @@
+"use client"
+
+import { useEffect, useState } from "react"
+import { AnimatePresence, motion } from "framer-motion"
+
+import { Button } from "@/components/ui/button"
+
+const navLinks = [
+ { name: "Home", href: "#" },
+ { name: "Feature", href: "#" },
+ { name: "Pricing", href: "#" },
+ { name: "About", href: "#" },
+ { name: "Contact", href: "#" },
+]
+// ------------------------------ | HERO1 | ------------------------------ //
+
+export default function Hero1() {
+ const [isOpen, setIsOpen] = useState(false)
+
+ useEffect(() => {
+ const handleResize = () => {
+ setIsOpen(false)
+ }
+ window.addEventListener("resize", handleResize)
+ return () => window.removeEventListener("resize", handleResize)
+ }, [])
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SaaSify
+
+
+
+ {isOpen && (
+
+
+
+ )}
+
+
+
+ Buy Now
+
+
+
setIsOpen(!isOpen)}
+ >
+ {isOpen ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
+
+
+
+
+
+
+ Work Better With Powerful Automation
+
+
+ Transform the way your team works with intelligent automation,
+ seamless collaboration, and real-time project visibility.
+ Eliminate bottlenecks, save time, and focus on the work that
+ drives results.
+
+
+
+ Explore Now
+
+
+ Help Center
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/hero/hero-2/hero-2.tsx b/src/components/uiable/blocks/hero/hero-2/hero-2.tsx
new file mode 100644
index 0000000..25aa650
--- /dev/null
+++ b/src/components/uiable/blocks/hero/hero-2/hero-2.tsx
@@ -0,0 +1,368 @@
+"use client"
+
+import { useEffect, useState } from "react"
+import { AnimatePresence, motion } from "framer-motion"
+
+import { Button } from "@/components/ui/button"
+
+const navLinks = [
+ { name: "Home", href: "#" },
+ { name: "Feature", href: "#" },
+ { name: "Pricing", href: "#" },
+ { name: "About", href: "#" },
+ { name: "Contact", href: "#" },
+]
+// ------------------------------ | HERO2 | ------------------------------ //
+export default function Hero2() {
+ const [isOpen, setIsOpen] = useState(false)
+
+ useEffect(() => {
+ const handleResize = () => {
+ setIsOpen(false)
+ }
+ window.addEventListener("resize", handleResize)
+ return () => window.removeEventListener("resize", handleResize)
+ }, [])
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ App
+ lee
+
+
+
+ {isOpen && (
+
+
+
+ )}
+
+
+
+ Buy Now
+
+
+
setIsOpen(!isOpen)}
+ >
+ {isOpen ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+ The Perfect Choice for your Mobile App Presentation
+
+
+ Transform the way your team works with intelligent automation,
+ seamless collaboration, and real-time project visibility.
+ Eliminate bottlenecks, save time, and focus on the work that
+ drives results.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/uiable/blocks/landing/footer/footer.tsx b/src/components/uiable/blocks/landing/footer/footer.tsx
index 8c9a5a6..8b15085 100644
--- a/src/components/uiable/blocks/landing/footer/footer.tsx
+++ b/src/components/uiable/blocks/landing/footer/footer.tsx
@@ -72,7 +72,7 @@ export default function Footer({
- v1.2.0 | Built by{" "}
+ v1.3.0 | Built by{" "}
+