diff --git a/.env.example b/.env.example
index 02c2bfe..b6d46df 100644
--- a/.env.example
+++ b/.env.example
@@ -1,2 +1,2 @@
BASEPATH=
-NEXT_PUBLIC_APP_URL=
+NEXT_PUBLIC_APP_URL=http://localhost:3000${BASEPATH}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3e3fa25..8005177 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,40 @@
All notable changes to this project will be documented in this file.
+## v1.0.0 (2025-11-19)
+
+### Added
+
+- Added blocks
+- Added registries for easier access to component variants, blocks and themes
+- Added navigation pagination inside component pages
+- Added functionality to show component variant name when hover inside a component variant section
+- Added tags to component variants for better categorization and filtering in search
+
+### Updated
+
+- Updated shadcn/ui components
+- Updated component variants to match the latest shadcn/ui components
+- Updated shadcn/ui color theme from zinc to neutral
+- Updated layouts including Sidebar, Header and Footer
+- Updated animated button variant with heartbeat effect so that you can change the animation color via CSS variable. You can update the color of the animation using the `--heartbeat-color` CSS variable or inline styles like `style={{ '--heartbeat-color': 'var(--primary)' }}`
+- Updated meta tags for the pages
+- Updated fonts by removing Gamja Flower font and adding Kalam font
+- Updated introduction docs
+- Updated SVGs (including SVG component and namings) and data assets
+- Updated hooks and utils
+
+### Removed
+
+- Removed unnecessary data assets
+- Removed copy prompt and v0 components
+- Removed `getMode` server utility function
+- Removed roadmap section from the theme generator page as we have moved it to [GitHub](https://github.com/orgs/themeselection/projects/42/views/2)
+
+### Fixed
+
+- Fixed default selected item in theme presets dropdown
+
## v1.0.0-beta.3 (2025-07-04)
### Added
diff --git a/README.md b/README.md
index 42260d4..6be7370 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
-[shadcn/studio](https://shadcnstudio.com) is an open-source collection of copy-and-paste shadcn components, blocks, and templates - paired with a powerful theme generator to craft, customize, and ship faster. 🚀
+[shadcn/studio](https://shadcnstudio.com) is an open-source collection of copy-and-paste shadcn components, blocks, and templates - paired with a powerful theme generator & AI Tools to craft, customize, and ship faster. 🚀
@@ -49,7 +49,7 @@ Building on the solid foundation of the Shadcn components & blocks, we've e
### Not a standard library, but a distribution of components
-Following the philosophy of Shadcn, shadcn/studio isn't a conventional “install-from-NPM” library. Rather, it's an open-source distribution of components designed for maximum adaptability. You can copy the code, modify styles, adjust logic, or integrate it with other tools—free from the limitations of typical libraries. This "open code" model empowers you to customize with confidence and creativity.
+Following the philosophy of Shadcn, shadcn/studio isn't a conventional "install-from-NPM" library. Rather, it's an open-source distribution of components designed for maximum adaptability. You can copy the code, modify styles, adjust logic, or integrate it with other tools—free from the limitations of typical libraries. This "open code" model empowers you to customize with confidence and creativity.
## Why should I use shadcn/studio? 💡
@@ -59,12 +59,23 @@ While this approach offers flexibility and control, it comes with some limitatio
## This is where shadcn/studio shines ✨
-An open-source collection of copy-and-paste shadcn components, blocks, and templates - paired with a powerful theme generator to craft, customize, and ship faster 🚀. It provides a robust toolkit for building stunning, interactive user interfaces with ease.
+An open-source & premium collection of copy-and-paste shadcn components, blocks, and templates - paired with a powerful theme generator to craft, customize, and ship faster 🚀. It provides a robust toolkit for building stunning, interactive user interfaces with ease.
+
+- **Open-source:** Dive into a growing, community-driven collection of copy-and-paste [shadcn/ui components]('https://shadcnstudio.com/components'), shadcn blocks, and templates.
+
+- **Component & Blocks variants:** Access a diverse, collection of customizable [shadcn blocks](https://shadcnstudio.com/blocks) and component variants to quickly build and style your UI with ease.
-- **Open-source:** Dive into a growing, community-driven collection of copy-and-paste components, blocks, and templates.
-- **Component & Blocks variants:** Access a diverse, collection of customizable shadcn component and block variants to quickly build and style your UI with ease.
- **Animated variants with Motion:** Add smooth, modern animations to your components, enhancing user experiences with minimal effort.
-- **Powerful theme generator:** Tailor your UI effortlessly with real-time previews, ensuring consistent, branded designs delivered faster.
+
+- **Landing pages & Dashboards:** Explore 20+ premium & free [Shadcn templates](https://shadcnstudio.com/templates) for dashboards, landing pages & more. Fully customizable & easy to use.
+
+- **shadcn/ui for Figma:** Speed up your workflow with [Shadcn Figma](https://shadcnstudio.com/figma) UI components, blocks & templates — a full design library inspired by shadcn/ui.
+
+- **Powerful theme generator:** Customize your UI instantly with [Shadcn Theme Generator](https://shadcnstudio.com/theme-generator). Preview changes in real time and create consistent, on-brand designs faster.
+
+- **shadcn/studio MCP:** Integrate [shadcn/studio MCP](https://shadcnstudio.com/mcp) Server directly into your favorite IDE and craft stunning shadcn/ui Components, Blocks and Pages inspired by shadcn/studio.
+
+- **Shadcn Figma To Code Plugin:** Convert your Figma designs into production-ready code instantly with the [Shadcn Figma Plugin](https://shadcnstudio.com/figma-plugin).
## Features ✨
@@ -110,7 +121,7 @@ shadcn/studio provides an open-source collection of copy-and-paste Shadcn Compon
-[Explore all components](https://shadcnstudio.com/docs/components/avatar)
+[Explore all components](https://shadcnstudio.com/components)
## Community 🤝
diff --git a/package.json b/package.json
index 1419158..34e3344 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"lint:fix": "next lint --fix",
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,md,mdx}\"",
"check-types": "tsc --noEmit",
+ "registry:build": "shadcn build",
"clean": "rm -rf .next *.tsbuildinfo",
"clean:node_modules": "rm -rf .next node_modules *.tsbuildinfo"
},
@@ -74,6 +75,7 @@
"react-use": "^17.6.0",
"recharts": "^2.15.3",
"server-only": "^0.0.1",
+ "shadcn": "^3.3.1",
"shepherd.js": "^14.5.0",
"sonner": "^2.0.5",
"tailwind-merge": "^3.3.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 712187f..3311bf7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -142,7 +142,7 @@ importers:
version: 12.18.1(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next:
specifier: ^15.3.3
- version: 15.3.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 15.3.4(@babel/core@7.28.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -179,6 +179,9 @@ importers:
server-only:
specifier: ^0.0.1
version: 0.0.1
+ shadcn:
+ specifier: ^3.3.1
+ version: 3.3.1(@types/node@22.15.32)(typescript@5.5.4)
shepherd.js:
specifier: ^14.5.0
version: 14.5.0
@@ -269,10 +272,149 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
+ '@antfu/ni@25.0.0':
+ resolution: {integrity: sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==}
+ hasBin: true
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.28.4':
+ resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.28.4':
+ resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.28.3':
+ resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.28.3':
+ resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-member-expression-to-functions@7.27.1':
+ resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.3':
+ resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.27.1':
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-replace-supers@7.27.1':
+ resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.4':
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.4':
+ resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-syntax-jsx@7.27.1':
+ resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.27.1':
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-commonjs@7.27.1':
+ resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.28.0':
+ resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-typescript@7.27.1':
+ resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/runtime@7.27.6':
resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
engines: {node: '>=6.9.0'}
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.28.4':
+ resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.28.4':
+ resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@bundled-es-modules/cookie@2.0.1':
+ resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==}
+
+ '@bundled-es-modules/statuses@1.0.1':
+ resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==}
+
'@date-fns/tz@1.2.0':
resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==}
@@ -304,6 +446,16 @@ packages:
peerDependencies:
react: '>=16.8.0'
+ '@dotenvx/dotenvx@1.51.0':
+ resolution: {integrity: sha512-CbMGzyOYSyFF7d4uaeYwO9gpSBzLTnMmSmTVpCZjvpJFV69qYbjYPpzNnCz1mb2wIvEhjWjRwQWuBzTO0jITww==}
+ hasBin: true
+
+ '@ecies/ciphers@0.2.4':
+ resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==}
+ engines: {bun: '>=1', deno: '>=2', node: '>=16'}
+ peerDependencies:
+ '@noble/ciphers': ^1.0.0
+
'@emnapi/core@1.4.3':
resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}
@@ -504,6 +656,41 @@ packages:
cpu: [x64]
os: [win32]
+ '@inquirer/ansi@1.0.0':
+ resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==}
+ engines: {node: '>=18'}
+
+ '@inquirer/confirm@5.1.18':
+ resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/core@10.2.2':
+ resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/figures@1.0.13':
+ resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==}
+ engines: {node: '>=18'}
+
+ '@inquirer/type@3.0.8':
+ resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@internationalized/date@3.8.2':
resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==}
@@ -516,14 +703,28 @@ packages:
'@internationalized/string@3.2.7':
resolution: {integrity: sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A==}
+ '@isaacs/balanced-match@4.0.1':
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/brace-expansion@5.0.0':
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
+
'@isaacs/fs-minipass@4.0.1':
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'}
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
'@jridgewell/gen-mapping@0.3.8':
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
engines: {node: '>=6.0.0'}
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
@@ -538,6 +739,17 @@ packages:
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@modelcontextprotocol/sdk@1.19.1':
+ resolution: {integrity: sha512-3Y2h3MZKjec1eAqSTBclATlX+AbC6n1LgfVzRMJLt3v6w0RCYgwLrjbxPDbhsYHt6Wdqc/aCceNJYgj448ELQQ==}
+ engines: {node: '>=18'}
+
+ '@mswjs/interceptors@0.39.7':
+ resolution: {integrity: sha512-sURvQbbKsq5f8INV54YJgJEdk8oxBanqkTiXXd33rKmofFCwZLhLRszPduMZ9TA9b8/1CHc/IJmOlBHJk2Q5AQ==}
+ engines: {node: '>=18'}
+
'@napi-rs/wasm-runtime@0.2.11':
resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==}
@@ -595,6 +807,18 @@ packages:
cpu: [x64]
os: [win32]
+ '@noble/ciphers@1.3.0':
+ resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/curves@1.9.7':
+ resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.8.0':
+ resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+ engines: {node: ^14.21.3 || >=16}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -611,6 +835,15 @@ packages:
resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
engines: {node: '>=12.4.0'}
+ '@open-draft/deferred-promise@2.2.0':
+ resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
+
+ '@open-draft/logger@0.3.0':
+ resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==}
+
+ '@open-draft/until@2.1.0':
+ resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
+
'@radix-ui/number@1.1.1':
resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
@@ -1818,6 +2051,9 @@ packages:
'@scarf/scarf@1.4.0':
resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==}
+ '@sec-ant/readable-stream@0.4.1':
+ resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
+
'@shikijs/core@3.7.0':
resolution: {integrity: sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==}
@@ -1839,6 +2075,10 @@ packages:
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+ '@sindresorhus/merge-streams@4.0.0':
+ resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
+ engines: {node: '>=18'}
+
'@standard-schema/utils@0.3.0':
resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
@@ -1950,12 +2190,18 @@ packages:
resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
engines: {node: '>=12'}
+ '@ts-morph/common@0.27.0':
+ resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==}
+
'@tybys/wasm-util@0.9.0':
resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
'@types/chroma-js@3.1.1':
resolution: {integrity: sha512-SFCr4edNkZ1bGaLzGz7rgR1bRzVX4MmMxwsIa3/Bh6ose8v+hRpneoizHv0KChdjxaXyjRtaMq7sCuZSzPomQA==}
+ '@types/cookie@0.6.0':
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+
'@types/d3-array@3.2.1':
resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==}
@@ -2030,6 +2276,9 @@ packages:
'@types/react@19.1.8':
resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==}
+ '@types/statuses@2.0.6':
+ resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
+
'@types/stylis@4.2.5':
resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==}
@@ -2198,6 +2447,10 @@ packages:
'@xobotyi/scrollbar-width@1.9.5':
resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==}
+ accepts@2.0.0:
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -2212,6 +2465,10 @@ packages:
resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==}
engines: {node: '>=0.8'}
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
+
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -2219,10 +2476,18 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
+ ansis@4.2.0:
+ resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
+ engines: {node: '>=14'}
+
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -2273,6 +2538,10 @@ packages:
ast-types-flow@0.0.8:
resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
+ ast-types@0.16.1:
+ resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+ engines: {node: '>=4'}
+
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -2292,6 +2561,14 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ baseline-browser-mapping@2.8.10:
+ resolution: {integrity: sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA==}
+ hasBin: true
+
+ body-parser@2.2.0:
+ resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
+ engines: {node: '>=18'}
+
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
@@ -2302,10 +2579,19 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ browserslist@4.26.3:
+ resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
busboy@1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -2328,6 +2614,9 @@ packages:
caniuse-lite@1.0.30001724:
resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==}
+ caniuse-lite@1.0.30001747:
+ resolution: {integrity: sha512-mzFa2DGIhuc5490Nd/G31xN1pnBnYMadtkyTjefPI7wzypqgCEpeWu9bJr0OnDsyKrW75zA9ZAt7pbQFmwLsQg==}
+
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -2339,6 +2628,10 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
@@ -2365,9 +2658,25 @@ packages:
class-variance-authority@0.7.1:
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
+ cli-cursor@5.0.0:
+ resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+ engines: {node: '>=18'}
+
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+
+ cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
+
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
@@ -2378,6 +2687,9 @@ packages:
react: ^18 || ^19 || ^19.0.0-rc
react-dom: ^18 || ^19 || ^19.0.0-rc
+ code-block-writer@13.0.3:
+ resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==}
+
codepage@1.15.0:
resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==}
engines: {node: '>=0.8'}
@@ -2399,12 +2711,52 @@ packages:
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ commander@14.0.1:
+ resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==}
+ engines: {node: '>=20'}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ content-disposition@1.0.0:
+ resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
+ engines: {node: '>= 0.6'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cookie-signature@1.2.2:
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
+
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
copy-to-clipboard@3.3.3:
resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
+ cosmiconfig@9.0.0:
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
crc-32@1.2.2:
resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
engines: {node: '>=0.8'}
@@ -2478,6 +2830,10 @@ packages:
damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+ data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+ engines: {node: '>= 12'}
+
data-view-buffer@1.0.2:
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
engines: {node: '>= 0.4'}
@@ -2529,6 +2885,14 @@ packages:
decode-named-character-reference@1.2.0:
resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
+ dedent@1.7.0:
+ resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -2536,6 +2900,10 @@ packages:
resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==}
engines: {node: '>=16.0.0'}
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -2544,6 +2912,10 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
@@ -2558,6 +2930,10 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ diff@8.0.2:
+ resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
+ engines: {node: '>=0.3.1'}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -2573,10 +2949,24 @@ packages:
dom-helpers@5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+ dotenv@17.2.3:
+ resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
+ engines: {node: '>=12'}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ eciesjs@0.4.15:
+ resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==}
+ engines: {bun: '>=1', deno: '>=2', node: '>=16'}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.230:
+ resolution: {integrity: sha512-A6A6Fd3+gMdaed9wX83CvHYJb4UuapPD5X5SLq72VZJzxHSY0/LUweGXRWmQlh2ln7KV7iw7jnwXK7dlPoOnHQ==}
+
embla-carousel-react@8.6.0:
resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==}
peerDependencies:
@@ -2590,13 +2980,30 @@ packages:
embla-carousel@8.6.0:
resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==}
+ emoji-regex@10.5.0:
+ resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
enhanced-resolve@5.18.1:
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
engines: {node: '>=10.13.0'}
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+
error-stack-parser@2.1.4:
resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
@@ -2632,6 +3039,13 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -2734,6 +3148,11 @@ packages:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@@ -2753,9 +3172,39 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
eventemitter3@4.0.7:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+ eventsource-parser@3.0.6:
+ resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==}
+ engines: {node: '>=18.0.0'}
+
+ eventsource@3.0.7:
+ resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==}
+ engines: {node: '>=18.0.0'}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ execa@9.6.0:
+ resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==}
+ engines: {node: ^18.19.0 || >=20.5.0}
+
+ express-rate-limit@7.5.1:
+ resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ express: '>= 4.11'
+
+ express@5.1.0:
+ resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
+ engines: {node: '>= 18'}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2794,6 +3243,14 @@ packages:
picomatch:
optional: true
+ fetch-blob@3.2.0:
+ resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+ engines: {node: ^12.20 || >= 14.13}
+
+ figures@6.1.0:
+ resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==}
+ engines: {node: '>=18'}
+
file-entry-cache@6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -2802,6 +3259,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ finalhandler@2.1.0:
+ resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
+ engines: {node: '>= 0.8'}
+
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@@ -2817,6 +3278,14 @@ packages:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
+ formdata-polyfill@4.0.10:
+ resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+ engines: {node: '>=12.20.0'}
+
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
frac@1.1.2:
resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==}
engines: {node: '>=0.8'}
@@ -2835,6 +3304,14 @@ packages:
react-dom:
optional: true
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
+ fs-extra@11.3.2:
+ resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
+ engines: {node: '>=14.14'}
+
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -2848,6 +3325,24 @@ packages:
functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ fuzzysort@3.1.0:
+ resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==}
+
+ fzf@0.5.2:
+ resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.4.0:
+ resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
+ engines: {node: '>=18'}
+
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -2856,10 +3351,22 @@ packages:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
engines: {node: '>=6'}
+ get-own-enumerable-keys@1.0.0:
+ resolution: {integrity: sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==}
+ engines: {node: '>=14.16'}
+
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ get-stream@9.0.1:
+ resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
+ engines: {node: '>=18'}
+
get-symbol-description@1.1.0:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
@@ -2901,6 +3408,10 @@ packages:
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ graphql@16.11.0:
+ resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==}
+ engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+
has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
@@ -2937,12 +3448,39 @@ packages:
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+ headers-polyfill@4.0.3:
+ resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
+
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ human-signals@8.0.1:
+ resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==}
+ engines: {node: '>=18.18.0'}
+
hyphenate-style-name@1.1.0:
resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ iconv-lite@0.7.0:
+ resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
+ engines: {node: '>=0.10.0'}
+
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@@ -2985,6 +3523,10 @@ packages:
intl-messageformat@10.7.16:
resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==}
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
@@ -2995,6 +3537,9 @@ packages:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
is-arrayish@0.3.2:
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
@@ -3040,6 +3585,10 @@ packages:
resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
engines: {node: '>= 0.4'}
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
is-generator-function@1.1.0:
resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
engines: {node: '>= 0.4'}
@@ -3051,6 +3600,10 @@ packages:
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+ is-interactive@2.0.0:
+ resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
+ engines: {node: '>=12'}
+
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -3059,6 +3612,9 @@ packages:
resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
engines: {node: '>= 0.4'}
+ is-node-process@1.2.0:
+ resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
+
is-number-object@1.1.1:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines: {node: '>= 0.4'}
@@ -3067,14 +3623,29 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-obj@3.0.0:
+ resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==}
+ engines: {node: '>=12'}
+
is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
+ is-regexp@3.1.0:
+ resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==}
+ engines: {node: '>=12'}
+
is-set@2.0.3:
resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
engines: {node: '>= 0.4'}
@@ -3083,6 +3654,14 @@ packages:
resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
engines: {node: '>= 0.4'}
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-stream@4.0.1:
+ resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
+ engines: {node: '>=18'}
+
is-string@1.1.1:
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
engines: {node: '>= 0.4'}
@@ -3095,6 +3674,14 @@ packages:
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines: {node: '>= 0.4'}
+ is-unicode-supported@1.3.0:
+ resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
+ engines: {node: '>=12'}
+
+ is-unicode-supported@2.1.0:
+ resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
+ engines: {node: '>=18'}
+
is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
@@ -3113,6 +3700,10 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ isexe@3.1.1:
+ resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
+ engines: {node: '>=16'}
+
iterator.prototype@1.1.5:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
@@ -3131,9 +3722,17 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -3144,6 +3743,14 @@ packages:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'}
@@ -3151,6 +3758,14 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
language-subtag-registry@0.3.23:
resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
@@ -3226,6 +3841,9 @@ packages:
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
engines: {node: '>= 12.0.0'}
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
little-date@1.0.0:
resolution: {integrity: sha512-41T/ktcwPzxC0OJ8E3wmaK0E1DL/QNR3n30kB9Dw6Ni6Eud24It8LZm70jK8lvDd+Mg+961fzKDcF6SQRL25cQ==}
engines: {node: '>=10'}
@@ -3240,6 +3858,10 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ log-symbols@6.0.0:
+ resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
+ engines: {node: '>=18'}
+
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
@@ -3247,6 +3869,9 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
lucide-react@0.516.0:
resolution: {integrity: sha512-aybBJzLHcw1CIn3rUcRkztB37dsJATtpffLNX+0/w+ws2p21nYIlOwX/B5fqxq8F/BjqVemnJX8chKwRidvROg==}
peerDependencies:
@@ -3286,6 +3911,17 @@ packages:
mdn-data@2.0.14:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+ media-typer@1.1.0:
+ resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ engines: {node: '>= 0.8'}
+
+ merge-descriptors@2.0.0:
+ resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+ engines: {node: '>=18'}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
@@ -3357,6 +3993,26 @@ packages:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@3.0.1:
+ resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
+ engines: {node: '>= 0.6'}
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ minimatch@10.0.3:
+ resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
+ engines: {node: 20 || >=22}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -3403,6 +4059,20 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ msw@2.11.3:
+ resolution: {integrity: sha512-878imp8jxIpfzuzxYfX0qqTq1IFQz/1/RBHs/PyirSjzi+xKM/RRfIpIqHSCWjH0GxidrjhgiiXC+DWXNDvT9w==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>= 4.8.x'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ mute-stream@2.0.0:
+ resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
nano-css@5.6.2:
resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==}
peerDependencies:
@@ -3422,6 +4092,10 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
next-themes@0.4.6:
resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
peerDependencies:
@@ -3449,6 +4123,26 @@ packages:
sass:
optional: true
+ node-domexception@1.0.0:
+ resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+ engines: {node: '>=10.5.0'}
+ deprecated: Use your platform's native DOMException instead
+
+ node-fetch@3.3.2:
+ resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ node-releases@2.0.21:
+ resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ npm-run-path@6.0.0:
+ resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
+ engines: {node: '>=18'}
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -3461,6 +4155,10 @@ packages:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
+ object-treeify@1.1.33:
+ resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==}
+ engines: {node: '>= 10'}
+
object.assign@4.1.7:
resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
engines: {node: '>= 0.4'}
@@ -3481,9 +4179,21 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ onetime@7.0.0:
+ resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+ engines: {node: '>=18'}
+
oniguruma-parser@0.12.1:
resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
@@ -3494,6 +4204,13 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
+ ora@8.2.0:
+ resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==}
+ engines: {node: '>=18'}
+
+ outvariant@1.4.3:
+ resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==}
+
own-keys@1.0.1:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
@@ -3506,6 +4223,9 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
+ package-manager-detector@1.3.0:
+ resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
+
papaparse@5.5.3:
resolution: {integrity: sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==}
@@ -3516,6 +4236,21 @@ packages:
parse-entities@4.0.2:
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse-ms@4.0.0:
+ resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
+ engines: {node: '>=18'}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -3528,9 +4263,19 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-to-regexp@6.3.0:
+ resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
+
+ path-to-regexp@8.3.0:
+ resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -3546,6 +4291,10 @@ packages:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
+ pkce-challenge@5.0.0:
+ resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
+ engines: {node: '>=16.20.0'}
+
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
@@ -3629,19 +4378,43 @@ packages:
engines: {node: '>=14'}
hasBin: true
+ pretty-ms@9.3.0:
+ resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==}
+ engines: {node: '>=18'}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ qs@6.14.0:
+ resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
+ engines: {node: '>=0.6'}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@3.0.1:
+ resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==}
+ engines: {node: '>= 0.10'}
+
react-aria-components@1.10.1:
resolution: {integrity: sha512-Mllbk2pQax2EwlOJsXG4oTp6P7P33m82/47M9Os+zaGhSCqo2EilFvThxCFxhLa7ncjLV0ka6wFIYLmZiOcWxw==}
peerDependencies:
@@ -3752,6 +4525,10 @@ packages:
resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
engines: {node: '>=0.10.0'}
+ recast@0.23.11:
+ resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
+ engines: {node: '>= 4'}
+
recharts-scale@0.4.5:
resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==}
@@ -3779,6 +4556,10 @@ packages:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
resize-observer-polyfill@1.5.1:
resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
@@ -3798,6 +4579,13 @@ packages:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
+ rettime@0.7.0:
+ resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==}
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -3807,6 +4595,10 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
+ router@2.2.0:
+ resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
+ engines: {node: '>= 18'}
+
rtl-css-js@1.16.1:
resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==}
@@ -3817,6 +4609,9 @@ packages:
resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
engines: {node: '>=0.4'}
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
safe-push-apply@1.0.0:
resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
engines: {node: '>= 0.4'}
@@ -3825,6 +4620,9 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
scheduler@0.26.0:
resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
@@ -3841,6 +4639,14 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ send@1.2.0:
+ resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
+ engines: {node: '>= 18'}
+
+ serve-static@2.2.0:
+ resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
+ engines: {node: '>= 18'}
+
server-only@0.0.1:
resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
@@ -3860,6 +4666,13 @@ packages:
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
engines: {node: '>= 0.4'}
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ shadcn@3.3.1:
+ resolution: {integrity: sha512-sgai5gahy/TiyTiqJEwIFpAuPhmkpt7sGVdRfcmNH53Yc3yI57+zFVmIaqbTST0jP/7tSqZuI0aSllXL2HIw5w==}
+ hasBin: true
+
shallowequal@1.1.0:
resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
@@ -3898,9 +4711,19 @@ packages:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
simple-swizzle@0.2.2:
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
@@ -3945,6 +4768,18 @@ packages:
stacktrace-js@2.0.2:
resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==}
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
+ stdin-discarder@0.2.2:
+ resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
+ engines: {node: '>=18'}
+
stop-iteration-iterator@1.1.0:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
@@ -3953,6 +4788,17 @@ packages:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
+ strict-event-emitter@0.5.1:
+ resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
string.prototype.includes@2.0.1:
resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
engines: {node: '>= 0.4'}
@@ -3979,14 +4825,30 @@ packages:
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+ stringify-object@5.0.0:
+ resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==}
+ engines: {node: '>=14.16'}
+
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
+
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ strip-final-newline@4.0.0:
+ resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
+ engines: {node: '>=18'}
+
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -4055,10 +4917,20 @@ packages:
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+ tinyexec@1.0.1:
+ resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
+
tinyglobby@0.2.14:
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
engines: {node: '>=12.0.0'}
+ tldts-core@7.0.16:
+ resolution: {integrity: sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA==}
+
+ tldts@7.0.16:
+ resolution: {integrity: sha512-5bdPHSwbKTeHmXrgecID4Ljff8rQjv7g8zKQPkCozRo2HWWni+p310FSn5ImI+9kWw9kK4lzOB5q/a6iv0IJsw==}
+ hasBin: true
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -4066,6 +4938,14 @@ packages:
toggle-selection@1.0.6:
resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ tough-cookie@6.0.0:
+ resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==}
+ engines: {node: '>=16'}
+
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
@@ -4078,9 +4958,16 @@ packages:
ts-easing@0.2.0:
resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==}
+ ts-morph@26.0.0:
+ resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==}
+
tsconfig-paths@3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+ tsconfig-paths@4.2.0:
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
+
tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
@@ -4098,6 +4985,14 @@ packages:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
+ type-fest@4.41.0:
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+ engines: {node: '>=16'}
+
+ type-is@2.0.1:
+ resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+ engines: {node: '>= 0.6'}
+
typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
@@ -4126,6 +5021,10 @@ packages:
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ unicorn-magic@0.3.0:
+ resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
+ engines: {node: '>=18'}
+
unist-util-is@6.0.0:
resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
@@ -4141,9 +5040,26 @@ packages:
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
unrs-resolver@1.9.1:
resolution: {integrity: sha512-4AZVxP05JGN6DwqIkSP4VKLOcwQa5l37SWHF/ahcuqBMbfxbpN1L1QKafEhWCziHhzKex9H/AR09H0OuVyU+9g==}
+ until-async@3.0.2:
+ resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==}
+
+ update-browserslist-db@1.1.3:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -4179,6 +5095,10 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
vaul@1.1.2:
resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==}
peerDependencies:
@@ -4194,6 +5114,10 @@ packages:
victory-vendor@36.9.2:
resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==}
+ web-streams-polyfill@3.3.3:
+ resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
+ engines: {node: '>= 8'}
+
which-boxed-primitive@1.1.1:
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines: {node: '>= 0.4'}
@@ -4215,6 +5139,11 @@ packages:
engines: {node: '>= 8'}
hasBin: true
+ which@4.0.0:
+ resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
+ engines: {node: ^16.13.0 || >=18.0.0}
+ hasBin: true
+
wmf@1.0.2:
resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==}
engines: {node: '>=0.8'}
@@ -4227,6 +5156,14 @@ packages:
resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==}
engines: {node: '>=0.8'}
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -4235,14 +5172,42 @@ packages:
engines: {node: '>=0.8'}
hasBin: true
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
yallist@5.0.0:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
+ yoctocolors-cjs@2.1.3:
+ resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
+ engines: {node: '>=18'}
+
+ yoctocolors@2.1.2:
+ resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
+ engines: {node: '>=18'}
+
+ zod-to-json-schema@3.24.6:
+ resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==}
+ peerDependencies:
+ zod: ^3.24.1
+
zod@3.25.67:
resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==}
@@ -4258,8 +5223,209 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
+ '@antfu/ni@25.0.0':
+ dependencies:
+ ansis: 4.2.0
+ fzf: 0.5.2
+ package-manager-detector: 1.3.0
+ tinyexec: 1.0.1
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.27.1
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.28.4': {}
+
+ '@babel/core@7.28.4':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.3
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/helpers': 7.28.4
+ '@babel/parser': 7.28.4
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.1
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.28.3':
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ dependencies:
+ '@babel/types': 7.28.4
+
+ '@babel/helper-compilation-targets@7.27.2':
+ dependencies:
+ '@babel/compat-data': 7.28.4
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.26.3
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.28.4
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-member-expression-to-functions@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.28.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ dependencies:
+ '@babel/types': 7.28.4
+
+ '@babel/helper-plugin-utils@7.27.1': {}
+
+ '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.28.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.27.1': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.4':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.4
+
+ '@babel/parser@7.28.4':
+ dependencies:
+ '@babel/types': 7.28.4
+
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4)
+ '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/runtime@7.27.6': {}
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
+
+ '@babel/traverse@7.28.4':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.3
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.4
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.4
+ debug: 4.4.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.28.4':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+
+ '@bundled-es-modules/cookie@2.0.1':
+ dependencies:
+ cookie: 0.7.2
+
+ '@bundled-es-modules/statuses@1.0.1':
+ dependencies:
+ statuses: 2.0.2
+
'@date-fns/tz@1.2.0': {}
'@dnd-kit/accessibility@3.1.1(react@19.1.0)':
@@ -4294,6 +5460,22 @@ snapshots:
react: 19.1.0
tslib: 2.8.1
+ '@dotenvx/dotenvx@1.51.0':
+ dependencies:
+ commander: 11.1.0
+ dotenv: 17.2.3
+ eciesjs: 0.4.15
+ execa: 5.1.1
+ fdir: 6.4.6(picomatch@4.0.2)
+ ignore: 5.3.2
+ object-treeify: 1.1.33
+ picomatch: 4.0.2
+ which: 4.0.0
+
+ '@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)':
+ dependencies:
+ '@noble/ciphers': 1.3.0
+
'@emnapi/core@1.4.3':
dependencies:
'@emnapi/wasi-threads': 1.0.2
@@ -4482,6 +5664,34 @@ snapshots:
'@img/sharp-win32-x64@0.34.2':
optional: true
+ '@inquirer/ansi@1.0.0': {}
+
+ '@inquirer/confirm@5.1.18(@types/node@22.15.32)':
+ dependencies:
+ '@inquirer/core': 10.2.2(@types/node@22.15.32)
+ '@inquirer/type': 3.0.8(@types/node@22.15.32)
+ optionalDependencies:
+ '@types/node': 22.15.32
+
+ '@inquirer/core@10.2.2(@types/node@22.15.32)':
+ dependencies:
+ '@inquirer/ansi': 1.0.0
+ '@inquirer/figures': 1.0.13
+ '@inquirer/type': 3.0.8(@types/node@22.15.32)
+ cli-width: 4.1.0
+ mute-stream: 2.0.0
+ signal-exit: 4.1.0
+ wrap-ansi: 6.2.0
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.15.32
+
+ '@inquirer/figures@1.0.13': {}
+
+ '@inquirer/type@3.0.8(@types/node@22.15.32)':
+ optionalDependencies:
+ '@types/node': 22.15.32
+
'@internationalized/date@3.8.2':
dependencies:
'@swc/helpers': 0.5.17
@@ -4499,16 +5709,32 @@ snapshots:
dependencies:
'@swc/helpers': 0.5.17
+ '@isaacs/balanced-match@4.0.1': {}
+
+ '@isaacs/brace-expansion@5.0.0':
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
+
'@isaacs/fs-minipass@4.0.1':
dependencies:
minipass: 7.1.2
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.31
+
'@jridgewell/gen-mapping@0.3.8':
dependencies:
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/set-array@1.2.1': {}
@@ -4520,6 +5746,37 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@modelcontextprotocol/sdk@1.19.1':
+ dependencies:
+ ajv: 6.12.6
+ content-type: 1.0.5
+ cors: 2.8.5
+ cross-spawn: 7.0.6
+ eventsource: 3.0.7
+ eventsource-parser: 3.0.6
+ express: 5.1.0
+ express-rate-limit: 7.5.1(express@5.1.0)
+ pkce-challenge: 5.0.0
+ raw-body: 3.0.1
+ zod: 3.25.67
+ zod-to-json-schema: 3.24.6(zod@3.25.67)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mswjs/interceptors@0.39.7':
+ dependencies:
+ '@open-draft/deferred-promise': 2.2.0
+ '@open-draft/logger': 0.3.0
+ '@open-draft/until': 2.1.0
+ is-node-process: 1.2.0
+ outvariant: 1.4.3
+ strict-event-emitter: 0.5.1
+
'@napi-rs/wasm-runtime@0.2.11':
dependencies:
'@emnapi/core': 1.4.3
@@ -4557,6 +5814,14 @@ snapshots:
'@next/swc-win32-x64-msvc@15.3.4':
optional: true
+ '@noble/ciphers@1.3.0': {}
+
+ '@noble/curves@1.9.7':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -4571,6 +5836,15 @@ snapshots:
'@nolyfill/is-core-module@1.0.39': {}
+ '@open-draft/deferred-promise@2.2.0': {}
+
+ '@open-draft/logger@0.3.0':
+ dependencies:
+ is-node-process: 1.2.0
+ outvariant: 1.4.3
+
+ '@open-draft/until@2.1.0': {}
+
'@radix-ui/number@1.1.1': {}
'@radix-ui/primitive@1.1.2': {}
@@ -6273,6 +7547,8 @@ snapshots:
'@scarf/scarf@1.4.0': {}
+ '@sec-ant/readable-stream@0.4.1': {}
+
'@shikijs/core@3.7.0':
dependencies:
'@shikijs/types': 3.7.0
@@ -6306,6 +7582,8 @@ snapshots:
'@shikijs/vscode-textmate@10.0.2': {}
+ '@sindresorhus/merge-streams@4.0.0': {}
+
'@standard-schema/utils@0.3.0': {}
'@swc/counter@0.1.3': {}
@@ -6398,6 +7676,12 @@ snapshots:
'@tanstack/table-core@8.21.3': {}
+ '@ts-morph/common@0.27.0':
+ dependencies:
+ fast-glob: 3.3.3
+ minimatch: 10.0.3
+ path-browserify: 1.0.1
+
'@tybys/wasm-util@0.9.0':
dependencies:
tslib: 2.8.1
@@ -6405,6 +7689,8 @@ snapshots:
'@types/chroma-js@3.1.1': {}
+ '@types/cookie@0.6.0': {}
+
'@types/d3-array@3.2.1': {}
'@types/d3-color@3.1.3': {}
@@ -6480,6 +7766,8 @@ snapshots:
dependencies:
csstype: 3.1.3
+ '@types/statuses@2.0.6': {}
+
'@types/stylis@4.2.5': {}
'@types/unist@2.0.11': {}
@@ -6630,6 +7918,11 @@ snapshots:
'@xobotyi/scrollbar-width@1.9.5': {}
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.1
+ negotiator: 1.0.0
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
@@ -6638,6 +7931,8 @@ snapshots:
adler-32@1.3.1: {}
+ agent-base@7.1.4: {}
+
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
@@ -6647,10 +7942,14 @@ snapshots:
ansi-regex@5.0.1: {}
+ ansi-regex@6.2.2: {}
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
+ ansis@4.2.0: {}
+
argparse@2.0.1: {}
aria-hidden@1.2.6:
@@ -6730,6 +8029,10 @@ snapshots:
ast-types-flow@0.0.8: {}
+ ast-types@0.16.1:
+ dependencies:
+ tslib: 2.8.1
+
async-function@1.0.0: {}
available-typed-arrays@1.0.7:
@@ -6742,6 +8045,22 @@ snapshots:
balanced-match@1.0.2: {}
+ baseline-browser-mapping@2.8.10: {}
+
+ body-parser@2.2.0:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 4.4.1
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ on-finished: 2.4.1
+ qs: 6.14.0
+ raw-body: 3.0.1
+ type-is: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
@@ -6755,10 +8074,20 @@ snapshots:
dependencies:
fill-range: 7.1.1
+ browserslist@4.26.3:
+ dependencies:
+ baseline-browser-mapping: 2.8.10
+ caniuse-lite: 1.0.30001747
+ electron-to-chromium: 1.5.230
+ node-releases: 2.0.21
+ update-browserslist-db: 1.1.3(browserslist@4.26.3)
+
busboy@1.6.0:
dependencies:
streamsearch: 1.1.0
+ bytes@3.1.2: {}
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -6782,6 +8111,8 @@ snapshots:
caniuse-lite@1.0.30001724: {}
+ caniuse-lite@1.0.30001747: {}
+
ccount@2.0.1: {}
cfb@1.2.2:
@@ -6794,6 +8125,8 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
+ chalk@5.6.2: {}
+
character-entities-html4@2.1.0: {}
character-entities-legacy@3.0.0: {}
@@ -6814,8 +8147,22 @@ snapshots:
dependencies:
clsx: 2.1.1
+ cli-cursor@5.0.0:
+ dependencies:
+ restore-cursor: 5.1.0
+
+ cli-spinners@2.9.2: {}
+
+ cli-width@4.1.0: {}
+
client-only@0.0.1: {}
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
clsx@2.1.1: {}
cmdk@1.1.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
@@ -6830,6 +8177,8 @@ snapshots:
- '@types/react'
- '@types/react-dom'
+ code-block-writer@13.0.3: {}
+
codepage@1.15.0: {}
color-convert@2.0.1:
@@ -6852,12 +8201,42 @@ snapshots:
comma-separated-tokens@2.0.3: {}
+ commander@11.1.0: {}
+
+ commander@14.0.1: {}
+
concat-map@0.0.1: {}
+ content-disposition@1.0.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-type@1.0.5: {}
+
+ convert-source-map@2.0.0: {}
+
+ cookie-signature@1.2.2: {}
+
+ cookie@0.7.2: {}
+
copy-to-clipboard@3.3.3:
dependencies:
toggle-selection: 1.0.6
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ cosmiconfig@9.0.0(typescript@5.5.4):
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.5.4
+
crc-32@1.2.2: {}
cross-spawn@7.0.6:
@@ -6925,6 +8304,8 @@ snapshots:
damerau-levenshtein@1.0.8: {}
+ data-uri-to-buffer@4.0.1: {}
+
data-view-buffer@1.0.2:
dependencies:
call-bound: 1.0.4
@@ -6969,10 +8350,14 @@ snapshots:
dependencies:
character-entities: 2.0.2
+ dedent@1.7.0: {}
+
deep-is@0.1.4: {}
deepmerge-ts@7.1.5: {}
+ deepmerge@4.3.1: {}
+
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
@@ -6985,6 +8370,8 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ depd@2.0.0: {}
+
dequal@2.0.3: {}
detect-libc@2.0.4: {}
@@ -6995,6 +8382,8 @@ snapshots:
dependencies:
dequal: 2.0.3
+ diff@8.0.2: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -7012,12 +8401,25 @@ snapshots:
'@babel/runtime': 7.27.6
csstype: 3.1.3
+ dotenv@17.2.3: {}
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
+ eciesjs@0.4.15:
+ dependencies:
+ '@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0)
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.7
+ '@noble/hashes': 1.8.0
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.230: {}
+
embla-carousel-react@8.6.0(react@19.1.0):
dependencies:
embla-carousel: 8.6.0
@@ -7030,13 +8432,25 @@ snapshots:
embla-carousel@8.6.0: {}
+ emoji-regex@10.5.0: {}
+
+ emoji-regex@8.0.0: {}
+
emoji-regex@9.2.2: {}
+ encodeurl@2.0.0: {}
+
enhanced-resolve@5.18.1:
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.2
+ env-paths@2.2.1: {}
+
+ error-ex@1.3.4:
+ dependencies:
+ is-arrayish: 0.2.1
+
error-stack-parser@2.1.4:
dependencies:
stackframe: 1.3.4
@@ -7142,6 +8556,10 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
escape-string-regexp@4.0.0: {}
eslint-config-next@15.3.4(eslint@8.57.1)(typescript@5.5.4):
@@ -7191,7 +8609,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
@@ -7213,7 +8631,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -7332,6 +8750,8 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 3.4.3
+ esprima@4.0.1: {}
+
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@@ -7346,8 +8766,79 @@ snapshots:
esutils@2.0.3: {}
+ etag@1.8.1: {}
+
eventemitter3@4.0.7: {}
+ eventsource-parser@3.0.6: {}
+
+ eventsource@3.0.7:
+ dependencies:
+ eventsource-parser: 3.0.6
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ execa@9.6.0:
+ dependencies:
+ '@sindresorhus/merge-streams': 4.0.0
+ cross-spawn: 7.0.6
+ figures: 6.1.0
+ get-stream: 9.0.1
+ 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.3.0
+ signal-exit: 4.1.0
+ strip-final-newline: 4.0.0
+ yoctocolors: 2.1.2
+
+ express-rate-limit@7.5.1(express@5.1.0):
+ dependencies:
+ express: 5.1.0
+
+ express@5.1.0:
+ dependencies:
+ accepts: 2.0.0
+ body-parser: 2.2.0
+ content-disposition: 1.0.0
+ content-type: 1.0.5
+ cookie: 0.7.2
+ cookie-signature: 1.2.2
+ debug: 4.4.1
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 2.1.0
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ merge-descriptors: 2.0.0
+ mime-types: 3.0.1
+ on-finished: 2.4.1
+ once: 1.4.0
+ parseurl: 1.3.3
+ proxy-addr: 2.0.7
+ qs: 6.14.0
+ range-parser: 1.2.1
+ router: 2.2.0
+ send: 1.2.0
+ serve-static: 2.2.0
+ statuses: 2.0.2
+ type-is: 2.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
fast-deep-equal@3.1.3: {}
fast-equals@5.2.2: {}
@@ -7384,6 +8875,15 @@ snapshots:
optionalDependencies:
picomatch: 4.0.2
+ fetch-blob@3.2.0:
+ dependencies:
+ node-domexception: 1.0.0
+ web-streams-polyfill: 3.3.3
+
+ figures@6.1.0:
+ dependencies:
+ is-unicode-supported: 2.1.0
+
file-entry-cache@6.0.1:
dependencies:
flat-cache: 3.2.0
@@ -7392,6 +8892,17 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ finalhandler@2.1.0:
+ dependencies:
+ debug: 4.4.1
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
@@ -7409,6 +8920,12 @@ snapshots:
dependencies:
is-callable: 1.2.7
+ formdata-polyfill@4.0.10:
+ dependencies:
+ fetch-blob: 3.2.0
+
+ forwarded@0.2.0: {}
+
frac@1.1.2: {}
framer-motion@12.18.1(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
@@ -7421,6 +8938,14 @@ snapshots:
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
+ fresh@2.0.0: {}
+
+ fs-extra@11.3.2:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
fs.realpath@1.0.0: {}
function-bind@1.1.2: {}
@@ -7436,6 +8961,16 @@ snapshots:
functions-have-names@1.2.3: {}
+ fuzzysort@3.1.0: {}
+
+ fzf@0.5.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.4.0: {}
+
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -7451,11 +8986,20 @@ snapshots:
get-nonce@1.0.1: {}
+ get-own-enumerable-keys@1.0.0: {}
+
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
+ get-stream@6.0.1: {}
+
+ get-stream@9.0.1:
+ dependencies:
+ '@sec-ant/readable-stream': 0.4.1
+ is-stream: 4.0.1
+
get-symbol-description@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -7507,6 +9051,8 @@ snapshots:
graphemer@1.4.0: {}
+ graphql@16.11.0: {}
+
has-bigints@1.1.0: {}
has-flag@4.0.0: {}
@@ -7567,10 +9113,39 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
+ headers-polyfill@4.0.3: {}
+
html-void-elements@3.0.0: {}
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.1
+ transitivePeerDependencies:
+ - supports-color
+
+ human-signals@2.1.0: {}
+
+ human-signals@8.0.1: {}
+
hyphenate-style-name@1.1.0: {}
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ iconv-lite@0.7.0:
+ dependencies:
+ safer-buffer: 2.1.2
+
ignore@5.3.2: {}
import-fresh@3.3.1:
@@ -7613,6 +9188,8 @@ snapshots:
'@formatjs/icu-messageformat-parser': 2.11.2
tslib: 2.8.1
+ ipaddr.js@1.9.1: {}
+
is-alphabetical@2.0.1: {}
is-alphanumerical@2.0.1:
@@ -7626,6 +9203,8 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
+ is-arrayish@0.2.1: {}
+
is-arrayish@0.3.2:
optional: true
@@ -7675,6 +9254,8 @@ snapshots:
dependencies:
call-bound: 1.0.4
+ is-fullwidth-code-point@3.0.0: {}
+
is-generator-function@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -7688,10 +9269,14 @@ snapshots:
is-hexadecimal@2.0.1: {}
+ is-interactive@2.0.0: {}
+
is-map@2.0.3: {}
is-negative-zero@2.0.3: {}
+ is-node-process@1.2.0: {}
+
is-number-object@1.1.1:
dependencies:
call-bound: 1.0.4
@@ -7699,8 +9284,14 @@ snapshots:
is-number@7.0.0: {}
+ is-obj@3.0.0: {}
+
is-path-inside@3.0.3: {}
+ is-plain-obj@4.1.0: {}
+
+ is-promise@4.0.0: {}
+
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
@@ -7708,12 +9299,18 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
+ is-regexp@3.1.0: {}
+
is-set@2.0.3: {}
is-shared-array-buffer@1.0.4:
dependencies:
call-bound: 1.0.4
+ is-stream@2.0.1: {}
+
+ is-stream@4.0.1: {}
+
is-string@1.1.1:
dependencies:
call-bound: 1.0.4
@@ -7729,6 +9326,10 @@ snapshots:
dependencies:
which-typed-array: 1.1.19
+ is-unicode-supported@1.3.0: {}
+
+ is-unicode-supported@2.1.0: {}
+
is-weakmap@2.0.2: {}
is-weakref@1.1.1:
@@ -7744,6 +9345,8 @@ snapshots:
isexe@2.0.0: {}
+ isexe@3.1.1: {}
+
iterator.prototype@1.1.5:
dependencies:
define-data-property: 1.1.4
@@ -7763,8 +9366,12 @@ snapshots:
dependencies:
argparse: 2.0.1
+ jsesc@3.1.0: {}
+
json-buffer@3.0.1: {}
+ json-parse-even-better-errors@2.3.1: {}
+
json-schema-traverse@0.4.1: {}
json-stable-stringify-without-jsonify@1.0.1: {}
@@ -7773,6 +9380,14 @@ snapshots:
dependencies:
minimist: 1.2.8
+ json5@2.2.3: {}
+
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
jsx-ast-utils@3.3.5:
dependencies:
array-includes: 3.1.9
@@ -7784,6 +9399,10 @@ snapshots:
dependencies:
json-buffer: 3.0.1
+ kleur@3.0.3: {}
+
+ kleur@4.1.5: {}
+
language-subtag-registry@0.3.23: {}
language-tags@1.0.9:
@@ -7840,6 +9459,8 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.30.1
lightningcss-win32-x64-msvc: 1.30.1
+ lines-and-columns@1.2.4: {}
+
little-date@1.0.0:
dependencies:
date-fns: 2.30.0
@@ -7852,12 +9473,21 @@ snapshots:
lodash@4.17.21: {}
+ log-symbols@6.0.0:
+ dependencies:
+ chalk: 5.6.2
+ is-unicode-supported: 1.3.0
+
longest-streak@3.1.0: {}
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
lucide-react@0.516.0(react@19.1.0):
dependencies:
react: 19.1.0
@@ -7959,6 +9589,12 @@ snapshots:
mdn-data@2.0.14: {}
+ media-typer@1.1.0: {}
+
+ merge-descriptors@2.0.0: {}
+
+ merge-stream@2.0.0: {}
+
merge2@1.4.1: {}
micromark-core-commonmark@2.0.3:
@@ -8099,6 +9735,20 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
+ mime-db@1.54.0: {}
+
+ mime-types@3.0.1:
+ dependencies:
+ mime-db: 1.54.0
+
+ mimic-fn@2.1.0: {}
+
+ mimic-function@5.0.1: {}
+
+ minimatch@10.0.3:
+ dependencies:
+ '@isaacs/brace-expansion': 5.0.0
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -8134,6 +9784,34 @@ snapshots:
ms@2.1.3: {}
+ msw@2.11.3(@types/node@22.15.32)(typescript@5.5.4):
+ dependencies:
+ '@bundled-es-modules/cookie': 2.0.1
+ '@bundled-es-modules/statuses': 1.0.1
+ '@inquirer/confirm': 5.1.18(@types/node@22.15.32)
+ '@mswjs/interceptors': 0.39.7
+ '@open-draft/deferred-promise': 2.2.0
+ '@types/cookie': 0.6.0
+ '@types/statuses': 2.0.6
+ graphql: 16.11.0
+ headers-polyfill: 4.0.3
+ is-node-process: 1.2.0
+ outvariant: 1.4.3
+ path-to-regexp: 6.3.0
+ picocolors: 1.1.1
+ rettime: 0.7.0
+ strict-event-emitter: 0.5.1
+ tough-cookie: 6.0.0
+ type-fest: 4.41.0
+ until-async: 3.0.2
+ yargs: 17.7.2
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - '@types/node'
+
+ mute-stream@2.0.0: {}
+
nano-css@5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
@@ -8153,12 +9831,14 @@ snapshots:
natural-compare@1.4.0: {}
+ negotiator@1.0.0: {}
+
next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
- next@15.3.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ next@15.3.4(@babel/core@7.28.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@next/env': 15.3.4
'@swc/counter': 0.1.3
@@ -8168,7 +9848,7 @@ snapshots:
postcss: 8.4.31
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
- styled-jsx: 5.1.6(react@19.1.0)
+ styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.1.0)
optionalDependencies:
'@next/swc-darwin-arm64': 15.3.4
'@next/swc-darwin-x64': 15.3.4
@@ -8183,12 +9863,33 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
+ node-domexception@1.0.0: {}
+
+ node-fetch@3.3.2:
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+
+ node-releases@2.0.21: {}
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ npm-run-path@6.0.0:
+ dependencies:
+ path-key: 4.0.0
+ unicorn-magic: 0.3.0
+
object-assign@4.1.1: {}
object-inspect@1.13.4: {}
object-keys@1.1.1: {}
+ object-treeify@1.1.33: {}
+
object.assign@4.1.7:
dependencies:
call-bind: 1.0.8
@@ -8225,10 +9926,22 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
once@1.4.0:
dependencies:
wrappy: 1.0.2
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ onetime@7.0.0:
+ dependencies:
+ mimic-function: 5.0.1
+
oniguruma-parser@0.12.1: {}
oniguruma-to-es@4.3.3:
@@ -8246,6 +9959,20 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
+ ora@8.2.0:
+ dependencies:
+ chalk: 5.6.2
+ cli-cursor: 5.0.0
+ cli-spinners: 2.9.2
+ is-interactive: 2.0.0
+ is-unicode-supported: 2.1.0
+ log-symbols: 6.0.0
+ stdin-discarder: 0.2.2
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+
+ outvariant@1.4.3: {}
+
own-keys@1.0.1:
dependencies:
get-intrinsic: 1.3.0
@@ -8260,6 +9987,8 @@ snapshots:
dependencies:
p-limit: 3.1.0
+ package-manager-detector@1.3.0: {}
+
papaparse@5.5.3: {}
parent-module@1.0.1:
@@ -8276,14 +10005,33 @@ snapshots:
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse-ms@4.0.0: {}
+
+ parseurl@1.3.3: {}
+
+ path-browserify@1.0.1: {}
+
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
path-key@3.1.1: {}
+ path-key@4.0.0: {}
+
path-parse@1.0.7: {}
+ path-to-regexp@6.3.0: {}
+
+ path-to-regexp@8.3.0: {}
+
path-type@4.0.0: {}
picocolors@1.1.1: {}
@@ -8292,6 +10040,8 @@ snapshots:
picomatch@4.0.2: {}
+ pkce-challenge@5.0.0: {}
+
possible-typed-array-names@1.1.0: {}
postcss-value-parser@4.2.0: {}
@@ -8322,6 +10072,15 @@ snapshots:
prettier@3.5.3: {}
+ pretty-ms@9.3.0:
+ dependencies:
+ parse-ms: 4.0.0
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
@@ -8330,10 +10089,28 @@ snapshots:
property-information@7.1.0: {}
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
punycode@2.3.1: {}
+ qs@6.14.0:
+ dependencies:
+ side-channel: 1.1.0
+
queue-microtask@1.2.3: {}
+ range-parser@1.2.1: {}
+
+ raw-body@3.0.1:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.7.0
+ unpipe: 1.0.0
+
react-aria-components@1.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@internationalized/date': 3.8.2
@@ -8544,6 +10321,14 @@ snapshots:
react@19.1.0: {}
+ recast@0.23.11:
+ dependencies:
+ ast-types: 0.16.1
+ esprima: 4.0.1
+ source-map: 0.6.1
+ tiny-invariant: 1.3.3
+ tslib: 2.8.1
+
recharts-scale@0.4.5:
dependencies:
decimal.js-light: 2.5.1
@@ -8591,6 +10376,8 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
+ require-directory@2.1.1: {}
+
resize-observer-polyfill@1.5.1: {}
resolve-from@4.0.0: {}
@@ -8609,12 +10396,29 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
+ restore-cursor@5.1.0:
+ dependencies:
+ onetime: 7.0.0
+ signal-exit: 4.1.0
+
+ rettime@0.7.0: {}
+
reusify@1.1.0: {}
rimraf@3.0.2:
dependencies:
glob: 7.2.3
+ router@2.2.0:
+ dependencies:
+ debug: 4.4.1
+ depd: 2.0.0
+ is-promise: 4.0.0
+ parseurl: 1.3.3
+ path-to-regexp: 8.3.0
+ transitivePeerDependencies:
+ - supports-color
+
rtl-css-js@1.16.1:
dependencies:
'@babel/runtime': 7.27.6
@@ -8631,6 +10435,8 @@ snapshots:
has-symbols: 1.1.0
isarray: 2.0.5
+ safe-buffer@5.2.1: {}
+
safe-push-apply@1.0.0:
dependencies:
es-errors: 1.3.0
@@ -8642,6 +10448,8 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
+ safer-buffer@2.1.2: {}
+
scheduler@0.26.0: {}
screenfull@5.2.0: {}
@@ -8650,6 +10458,31 @@ snapshots:
semver@7.7.2: {}
+ send@1.2.0:
+ dependencies:
+ debug: 4.4.1
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ mime-types: 3.0.1
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@2.2.0:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.2.0
+ transitivePeerDependencies:
+ - supports-color
+
server-only@0.0.1: {}
set-function-length@1.2.2:
@@ -8676,6 +10509,46 @@ snapshots:
es-errors: 1.3.0
es-object-atoms: 1.1.1
+ setprototypeof@1.2.0: {}
+
+ shadcn@3.3.1(@types/node@22.15.32)(typescript@5.5.4):
+ dependencies:
+ '@antfu/ni': 25.0.0
+ '@babel/core': 7.28.4
+ '@babel/parser': 7.28.4
+ '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4)
+ '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4)
+ '@dotenvx/dotenvx': 1.51.0
+ '@modelcontextprotocol/sdk': 1.19.1
+ browserslist: 4.26.3
+ commander: 14.0.1
+ cosmiconfig: 9.0.0(typescript@5.5.4)
+ dedent: 1.7.0
+ deepmerge: 4.3.1
+ diff: 8.0.2
+ execa: 9.6.0
+ fast-glob: 3.3.3
+ fs-extra: 11.3.2
+ fuzzysort: 3.1.0
+ https-proxy-agent: 7.0.6
+ kleur: 4.1.5
+ msw: 2.11.3(@types/node@22.15.32)(typescript@5.5.4)
+ node-fetch: 3.3.2
+ ora: 8.2.0
+ postcss: 8.5.6
+ prompts: 2.4.2
+ recast: 0.23.11
+ stringify-object: 5.0.0
+ ts-morph: 26.0.0
+ tsconfig-paths: 4.2.0
+ zod: 3.25.67
+ zod-to-json-schema: 3.24.6(zod@3.25.67)
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - typescript
+
shallowequal@1.1.0: {}
sharp@0.34.2:
@@ -8758,11 +10631,17 @@ snapshots:
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
simple-swizzle@0.2.2:
dependencies:
is-arrayish: 0.3.2
optional: true
+ sisteransi@1.0.5: {}
+
slash@3.0.0: {}
sonner@2.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
@@ -8801,6 +10680,12 @@ snapshots:
stack-generator: 2.0.10
stacktrace-gps: 3.1.2
+ statuses@2.0.1: {}
+
+ statuses@2.0.2: {}
+
+ stdin-discarder@0.2.2: {}
+
stop-iteration-iterator@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -8808,6 +10693,20 @@ snapshots:
streamsearch@1.1.0: {}
+ strict-event-emitter@0.5.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.5.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
+
string.prototype.includes@2.0.1:
dependencies:
call-bind: 1.0.8
@@ -8863,12 +10762,26 @@ snapshots:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
+ stringify-object@5.0.0:
+ dependencies:
+ get-own-enumerable-keys: 1.0.0
+ is-obj: 3.0.0
+ is-regexp: 3.1.0
+
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
+ strip-ansi@7.1.2:
+ dependencies:
+ ansi-regex: 6.2.2
+
strip-bom@3.0.0: {}
+ strip-final-newline@2.0.0: {}
+
+ strip-final-newline@4.0.0: {}
+
strip-json-comments@3.1.1: {}
style-to-js@1.1.17:
@@ -8893,10 +10806,12 @@ snapshots:
stylis: 4.3.2
tslib: 2.6.2
- styled-jsx@5.1.6(react@19.1.0):
+ styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.1.0):
dependencies:
client-only: 0.0.1
react: 19.1.0
+ optionalDependencies:
+ '@babel/core': 7.28.4
stylis@4.3.2: {}
@@ -8929,17 +10844,31 @@ snapshots:
tiny-invariant@1.3.3: {}
+ tinyexec@1.0.1: {}
+
tinyglobby@0.2.14:
dependencies:
fdir: 6.4.6(picomatch@4.0.2)
picomatch: 4.0.2
+ tldts-core@7.0.16: {}
+
+ tldts@7.0.16:
+ dependencies:
+ tldts-core: 7.0.16
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
toggle-selection@1.0.6: {}
+ toidentifier@1.0.1: {}
+
+ tough-cookie@6.0.0:
+ dependencies:
+ tldts: 7.0.16
+
trim-lines@3.0.1: {}
ts-api-utils@1.4.3(typescript@5.5.4):
@@ -8948,6 +10877,11 @@ snapshots:
ts-easing@0.2.0: {}
+ ts-morph@26.0.0:
+ dependencies:
+ '@ts-morph/common': 0.27.0
+ code-block-writer: 13.0.3
+
tsconfig-paths@3.15.0:
dependencies:
'@types/json5': 0.0.29
@@ -8955,6 +10889,12 @@ snapshots:
minimist: 1.2.8
strip-bom: 3.0.0
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
tslib@2.6.2: {}
tslib@2.8.1: {}
@@ -8967,6 +10907,14 @@ snapshots:
type-fest@0.20.2: {}
+ type-fest@4.41.0: {}
+
+ type-is@2.0.1:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.1
+
typed-array-buffer@1.0.3:
dependencies:
call-bound: 1.0.4
@@ -9011,6 +10959,8 @@ snapshots:
undici-types@6.21.0: {}
+ unicorn-magic@0.3.0: {}
+
unist-util-is@6.0.0:
dependencies:
'@types/unist': 3.0.3
@@ -9034,6 +10984,10 @@ snapshots:
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
+ universalify@2.0.1: {}
+
+ unpipe@1.0.0: {}
+
unrs-resolver@1.9.1:
dependencies:
napi-postinstall: 0.2.4
@@ -9058,6 +11012,14 @@ snapshots:
'@unrs/resolver-binding-win32-ia32-msvc': 1.9.1
'@unrs/resolver-binding-win32-x64-msvc': 1.9.1
+ until-async@3.0.2: {}
+
+ update-browserslist-db@1.1.3(browserslist@4.26.3):
+ dependencies:
+ browserslist: 4.26.3
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
@@ -9086,6 +11048,8 @@ snapshots:
dependencies:
react: 19.1.0
+ vary@1.1.2: {}
+
vaul@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -9122,6 +11086,8 @@ snapshots:
d3-time: 3.1.0
d3-timer: 3.0.1
+ web-streams-polyfill@3.3.3: {}
+
which-boxed-primitive@1.1.1:
dependencies:
is-bigint: 1.1.0
@@ -9167,12 +11133,28 @@ snapshots:
dependencies:
isexe: 2.0.0
+ which@4.0.0:
+ dependencies:
+ isexe: 3.1.1
+
wmf@1.0.2: {}
word-wrap@1.2.5: {}
word@0.3.0: {}
+ wrap-ansi@6.2.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
wrappy@1.0.2: {}
xlsx@0.18.5:
@@ -9185,10 +11167,34 @@ snapshots:
wmf: 1.0.2
word: 0.3.0
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
yallist@5.0.0: {}
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
yocto-queue@0.1.0: {}
+ yoctocolors-cjs@2.1.3: {}
+
+ yoctocolors@2.1.2: {}
+
+ zod-to-json-schema@3.24.6(zod@3.25.67):
+ dependencies:
+ zod: 3.25.67
+
zod@3.25.67: {}
zwitch@2.0.4: {}
diff --git a/public/r/about-us-page-01.json b/public/r/about-us-page-01.json
new file mode 100644
index 0000000..c8a2f91
--- /dev/null
+++ b/public/r/about-us-page-01.json
@@ -0,0 +1,33 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "about-us-page-01",
+ "type": "registry:block",
+ "title": "About Us 1",
+ "description": "Centered header with video/image section and overlapping stats grid card displaying icons, values, and descriptions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/about-us-page/about-us-page-01/page.tsx",
+ "content": "import { MedalIcon, SparklesIcon, StarIcon, TargetIcon } from 'lucide-react'\n\nimport AboutUs from '@/components/shadcn-studio/blocks/about-us-page-01/about-us-page-01'\n\nconst stats = [\n {\n icon: SparklesIcon,\n value: '20+',\n description: 'Years of Experience'\n },\n {\n icon: TargetIcon,\n value: '70+',\n description: 'Successful Projects'\n },\n {\n icon: StarIcon,\n value: '550+',\n description: 'Customer Reviews'\n },\n {\n icon: MedalIcon,\n value: '25',\n description: 'Achieve Awards'\n }\n]\n\nconst AboutUsPage = () => {\n return \n}\n\nexport default AboutUsPage\n",
+ "type": "registry:page",
+ "target": "app/about-us-page-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/about-us-page-01/about-us-page-01.tsx",
+ "content": "import type { ComponentType } from 'react'\n\nimport { ArrowRightIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\ntype StatItem = {\n icon: ComponentType\n value: string\n description: string\n}[]\n\nconst AboutUs = ({ stats }: { stats: StatItem }) => {\n return (\n \n \n {/* Header */}\n
\n
About Us \n
\n Our achievement story stands as a powerful testament to teamwork and perseverance. United, we have faced\n challenges, celebrated victories, and woven a narrative of growth and success.\n
\n
\n \n Read more\n \n \n \n
\n\n {/* Video player and stats */}\n
\n
\n VIDEO \n
\n\n {/* Stats card overlapping the video section */}\n
\n {stats.map((stat, index) => (\n
\n
\n \n
\n
{stat.value} \n
{stat.description}
\n
\n ))}\n
\n
\n
\n \n )\n}\n\nexport default AboutUs\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/about-us-page-01/about-us-page-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "about-us-page"
+ }
+}
\ No newline at end of file
diff --git a/public/r/accordion-01.json b/public/r/accordion-01.json
new file mode 100644
index 0000000..c51bfed
--- /dev/null
+++ b/public/r/accordion-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-01",
+ "type": "registry:component",
+ "title": "Accordion 1",
+ "description": "Basic accordion with default styling and collapsible FAQ items.",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-01.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n {item.title} \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-02.json b/public/r/accordion-02.json
new file mode 100644
index 0000000..8cf6ece
--- /dev/null
+++ b/public/r/accordion-02.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-02",
+ "type": "registry:component",
+ "title": "Accordion 2",
+ "description": "Card-style accordion with separated items, shadow effects, and rotated chevron icons.",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-02.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionSplitDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n {item.title}\n \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionSplitDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-03.json b/public/r/accordion-03.json
new file mode 100644
index 0000000..8137392
--- /dev/null
+++ b/public/r/accordion-03.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-03",
+ "type": "registry:component",
+ "title": "Accordion 3",
+ "description": "Icon-enhanced accordion with category icons displayed before each item title.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-03.tsx",
+ "content": "import { HeadsetIcon, PackageIcon, RefreshCwIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n icon: PackageIcon,\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n icon: RefreshCwIcon,\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n icon: HeadsetIcon,\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionLeftIconDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n \n \n {item.title} \n \n \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionLeftIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-04.json b/public/r/accordion-04.json
new file mode 100644
index 0000000..3659eed
--- /dev/null
+++ b/public/r/accordion-04.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-04",
+ "type": "registry:component",
+ "title": "Accordion 4",
+ "description": "Plus/minus icon accordion with animated icon transitions for expand/collapse states.",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-04.tsx",
+ "content": "import { PlusIcon } from 'lucide-react'\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionPlusMinusIconDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n \n {item.title}\n \n \n \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionPlusMinusIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-05.json b/public/r/accordion-05.json
new file mode 100644
index 0000000..1f900a9
--- /dev/null
+++ b/public/r/accordion-05.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-05",
+ "type": "registry:component",
+ "title": "Accordion 5",
+ "description": "Active state accordion with amber highlighting for expanded items and borders.",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-05.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionActiveItemDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n {item.title}\n \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionActiveItemDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-06.json b/public/r/accordion-06.json
new file mode 100644
index 0000000..7f842d1
--- /dev/null
+++ b/public/r/accordion-06.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-06",
+ "type": "registry:component",
+ "title": "Accordion 6",
+ "description": "Icon and expand indicator accordion with category icons and plus icon for expand/collapse.",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-06.tsx",
+ "content": "import { HeadsetIcon, PackageIcon, PlusIcon, RefreshCwIcon } from 'lucide-react'\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/ui/accordion'\n\nconst items = [\n {\n icon: PackageIcon,\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n icon: RefreshCwIcon,\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n icon: HeadsetIcon,\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionExpandIconDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n \n \n \n {item.title} \n \n \n \n \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionExpandIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-07.json b/public/r/accordion-07.json
new file mode 100644
index 0000000..0d1fba8
--- /dev/null
+++ b/public/r/accordion-07.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-07",
+ "type": "registry:component",
+ "title": "Accordion 7",
+ "description": "Avatar-based accordion displaying user profiles with avatar images, names, and email addresses.",
+ "registryDependencies": [
+ "accordion",
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-07.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst items = [\n {\n name: 'Richard Payne',\n email: 'pwright@yahoo.com',\n avatarImage: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n content:\n 'Richard Payne is a remarkable individual known for his exceptional skills and expertise in various fields. With a strong background in technology and a passion for innovation, Richard has made significant contributions to the industry.'\n },\n {\n name: 'Jordan Stevenson',\n email: 'wramirez@outlook.com',\n avatarImage: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n content:\n 'Jordan Stevenson is a talented individual with a passion for technology and innovation. Jordan has made significant contributions to various projects and has a deep understanding of programming languages and frameworks.'\n },\n {\n name: 'Nicholas Tanner',\n email: 'snguyen@icloud.com',\n avatarImage: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n content:\n 'Nicholas Tanner is a highly skilled individual with a strong passion for technology and innovation. Nicholas has made significant contributions to numerous projects and possesses a deep understanding of various programming languages and frameworks.'\n }\n]\n\nconst AccordionAvatarDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n \n \n \n \n {item.name.split(/\\s/).reduce((response, word) => (response += word.slice(0, 1)), '')}\n \n \n \n {item.name} \n {item.email} \n \n \n \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionAvatarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-08.json b/public/r/accordion-08.json
new file mode 100644
index 0000000..42c81bd
--- /dev/null
+++ b/public/r/accordion-08.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-08",
+ "type": "registry:component",
+ "title": "Accordion 8",
+ "description": "Enhanced icon accordion with circular icon containers and subtitle descriptions for each item.",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-08.tsx",
+ "content": "import { HeadsetIcon, PackageIcon, PlusIcon, RefreshCwIcon } from 'lucide-react'\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/ui/accordion'\n\nconst items = [\n {\n icon: PackageIcon,\n title: 'How do I track my order?',\n subtitle: 'Shipping & Delivery',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n icon: RefreshCwIcon,\n title: 'What is your return policy?',\n subtitle: 'Returns & Refunds',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n icon: HeadsetIcon,\n title: 'How can I contact customer support?',\n subtitle: 'Help & Support',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionIconSubtitleDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n \n \n \n \n \n \n {item.title} \n {item.subtitle} \n \n \n \n \n \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionIconSubtitleDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-09.json b/public/r/accordion-09.json
new file mode 100644
index 0000000..6177e8d
--- /dev/null
+++ b/public/r/accordion-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-09",
+ "type": "registry:component",
+ "title": "Accordion 9",
+ "description": "Outline-style accordion with bordered items and spacing between each accordion item.",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-09.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionOutlineDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n {item.title} \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-10.json b/public/r/accordion-10.json
new file mode 100644
index 0000000..cdbd83f
--- /dev/null
+++ b/public/r/accordion-10.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-10",
+ "type": "registry:component",
+ "title": "Accordion 10",
+ "description": "Box-style accordion with unified border container around all accordion items.",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-10.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionBoxDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n {item.title} \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionBoxDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-11.json b/public/r/accordion-11.json
new file mode 100644
index 0000000..eef5af6
--- /dev/null
+++ b/public/r/accordion-11.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-11",
+ "type": "registry:component",
+ "title": "Accordion 11",
+ "description": "Tab-style accordion with accent background highlighting for expanded items.",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-11.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionTabsDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n {item.title} \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionTabsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-12.json b/public/r/accordion-12.json
new file mode 100644
index 0000000..bda92b1
--- /dev/null
+++ b/public/r/accordion-12.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-12",
+ "type": "registry:component",
+ "title": "Accordion 12",
+ "description": "Tab with outline accordion featuring bordered highlighting and shadow effects for expanded items.",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-12.tsx",
+ "content": "import { PlusIcon } from 'lucide-react'\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionTabsOutlineDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n \n {item.title}\n \n \n \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionTabsOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-13.json b/public/r/accordion-13.json
new file mode 100644
index 0000000..44349c4
--- /dev/null
+++ b/public/r/accordion-13.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-13",
+ "type": "registry:component",
+ "title": "Accordion 13",
+ "description": "Media content accordion with category icons and embedded images in accordion content.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-13.tsx",
+ "content": "import { HeadsetIcon, PackageIcon, RefreshCwIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n icon: PackageIcon,\n title: 'How do I track my order?',\n content: \"You'll receive tracking information via email once your order ships.\",\n media: 'https://cdn.shadcnstudio.com/ss-assets/components/accordion/image-1.jpg?width=520&format=auto'\n },\n {\n icon: RefreshCwIcon,\n title: 'What is your return policy?',\n content: 'We offer a 30-day return policy for most items.',\n media: 'https://cdn.shadcnstudio.com/ss-assets/components/accordion/image-2.jpg?width=520&format=auto'\n },\n {\n icon: HeadsetIcon,\n title: 'How can I contact customer support?',\n content: 'You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567.',\n media: 'https://cdn.shadcnstudio.com/ss-assets/components/accordion/image-3.jpg?width=520&format=auto'\n }\n]\n\nconst AccordionMediaContentDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n \n \n {item.title} \n \n \n \n {item.content}
\n \n \n \n ))}\n \n )\n}\n\nexport default AccordionMediaContentDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-14.json b/public/r/accordion-14.json
new file mode 100644
index 0000000..571c0a8
--- /dev/null
+++ b/public/r/accordion-14.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-14",
+ "type": "registry:component",
+ "title": "Accordion 14",
+ "description": "Filled header accordion with accent background triggers and separated content sections.",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-14.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\nconst items = [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n }\n]\n\nconst AccordionFilledDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n {item.title} \n {item.content} \n \n ))}\n \n )\n}\n\nexport default AccordionFilledDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-15.json b/public/r/accordion-15.json
new file mode 100644
index 0000000..31d7d38
--- /dev/null
+++ b/public/r/accordion-15.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-15",
+ "type": "registry:component",
+ "title": "Accordion 15",
+ "description": "Multi-level accordion with nested collapsible sections for hierarchical FAQ organization.",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-15.tsx",
+ "content": "import { ChevronDownIcon, HeadsetIcon, PackageIcon, PlusIcon, RefreshCwIcon } from 'lucide-react'\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\n\nimport { Accordion, AccordionContent, AccordionItem } from '@/components/ui/accordion'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\nconst items = [\n {\n category: 'Shipping & Delivery',\n icon: PackageIcon,\n faqs: [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`\n },\n {\n title: 'What are your shipping options?',\n content:\n 'We offer standard shipping (3-5 business days), express shipping (1-2 business days), and overnight shipping. International shipping is also available to select countries. Shipping costs vary based on the destination and selected method.'\n },\n {\n title: 'Do you ship internationally?',\n content:\n 'Yes, we ship to most countries worldwide. International shipping typically takes 7-14 business days, depending on the destination. Please note that customs duties and taxes may apply and are the responsibility of the recipient.'\n }\n ]\n },\n {\n category: 'Returns & Refunds',\n icon: RefreshCwIcon,\n faqs: [\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.'\n },\n {\n title: 'How long do refunds take to process?',\n content:\n 'Once we receive your returned item, refunds are typically processed within 5-7 business days. The refund will be issued to your original payment method. Please note that it may take additional time for your bank or credit card company to reflect the refund in your account.'\n },\n {\n title: 'Do you offer exchanges?',\n content:\n 'Yes, we offer exchanges for different sizes, colors, or styles. You can request an exchange through our return portal or by contacting customer service. The exchange process typically takes 7-10 business days from when we receive your return.'\n }\n ]\n },\n {\n category: 'Help & Support',\n icon: HeadsetIcon,\n faqs: [\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.'\n },\n {\n title: 'What are your business hours?',\n content:\n 'Our customer service team is available 24/7 for online support. Our physical stores are open Monday through Saturday from 9 AM to 9 PM, and Sunday from 10 AM to 6 PM. Store hours may vary during holidays.'\n },\n {\n title: 'How do I report a problem with my order?',\n content:\n 'If you encounter any issues with your order, please contact our customer service team immediately. You can report problems through our website, email, or phone. Please include your order number and a detailed description of the issue for faster resolution.'\n }\n ]\n }\n]\n\nconst AccordionMultilevelDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n \n \n \n {item.category} \n \n \n \n \n {item.faqs.map((faq, i) => (\n \n \n \n {faq.title}\n \n \n {faq.content}\n \n \n ))}\n \n \n ))}\n \n )\n}\n\nexport default AccordionMultilevelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/accordion-16.json b/public/r/accordion-16.json
new file mode 100644
index 0000000..e3b529e
--- /dev/null
+++ b/public/r/accordion-16.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "accordion-16",
+ "type": "registry:component",
+ "title": "Accordion 16",
+ "description": "Simplified multi-level accordion with plus/minus icons for nested FAQ categories and questions.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-16.tsx",
+ "content": "import { PlusIcon } from 'lucide-react'\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\nconst items = [\n {\n category: 'Shipping & Delivery',\n faqs: [\n {\n title: 'How do I track my order?',\n content: `You can track your order by logging into your account and visiting the \"Orders\" section. You'll receive tracking information via email once your order ships. For real-time updates, you can also use the tracking number provided in your shipping confirmation email.`,\n open: true\n },\n {\n title: 'What are your shipping options?',\n content:\n 'We offer standard shipping (3-5 business days), express shipping (1-2 business days), and overnight shipping. International shipping is also available to select countries. Shipping costs vary based on the destination and selected method.'\n },\n {\n title: 'Do you ship internationally?',\n content:\n 'Yes, we ship to most countries worldwide. International shipping typically takes 7-14 business days, depending on the destination. Please note that customs duties and taxes may apply and are the responsibility of the recipient.'\n }\n ]\n },\n {\n category: 'Returns & Refunds',\n faqs: [\n {\n title: 'What is your return policy?',\n content:\n 'We offer a 30-day return policy for most items. Products must be unused and in their original packaging. To initiate a return, please contact our customer service team or use the return portal in your account dashboard.',\n open: true\n },\n {\n title: 'How long do refunds take to process?',\n content:\n 'Once we receive your returned item, refunds are typically processed within 5-7 business days. The refund will be issued to your original payment method. Please note that it may take additional time for your bank or credit card company to reflect the refund in your account.'\n },\n {\n title: 'Do you offer exchanges?',\n content:\n 'Yes, we offer exchanges for different sizes, colors, or styles. You can request an exchange through our return portal or by contacting customer service. The exchange process typically takes 7-10 business days from when we receive your return.'\n }\n ]\n },\n {\n category: 'Help & Support',\n faqs: [\n {\n title: 'How can I contact customer support?',\n content:\n 'Our customer support team is available 24/7. You can reach us via live chat, email at support@example.com, or by phone at 1-800-123-4567. For faster service, please have your order number ready when contacting us.',\n open: true\n },\n {\n title: 'What are your business hours?',\n content:\n 'Our customer service team is available 24/7 for online support. Our physical stores are open Monday through Saturday from 9 AM to 9 PM, and Sunday from 10 AM to 6 PM. Store hours may vary during holidays.'\n },\n {\n title: 'How do I report a problem with my order?',\n content:\n 'If you encounter any issues with your order, please contact our customer service team immediately. You can report problems through our website, email, or phone. Please include your order number and a detailed description of the issue for faster resolution.'\n }\n ]\n }\n]\n\nconst AccordionMultilevelIconDemo = () => {\n return (\n \n {items.map((item, index) => (\n \n {item.category} \n \n {item.faqs.map((faq, index) => (\n \n \n \n {faq.title}\n \n \n {faq.content}\n \n \n ))}\n \n \n ))}\n \n )\n}\n\nexport default AccordionMultilevelIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-01.json b/public/r/alert-01.json
new file mode 100644
index 0000000..fd4fb08
--- /dev/null
+++ b/public/r/alert-01.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-01",
+ "type": "registry:component",
+ "title": "Alert 1",
+ "description": "Basic alert with circle alert icon and simple title message.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-01.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\n\nconst AlertDemo = () => {\n return (\n \n \n New message! \n \n )\n}\n\nexport default AlertDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-02.json b/public/r/alert-02.json
new file mode 100644
index 0000000..0f82409
--- /dev/null
+++ b/public/r/alert-02.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-02",
+ "type": "registry:component",
+ "title": "Alert 2",
+ "description": "Avatar-enhanced alert with user profile image, and alert icon.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-02.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AlertWithAvatarDemo = () => {\n return (\n \n \n \n HR \n \n \n
Sara has replied on the uploaded image. \n
12 unread messages. Tap to see. \n
\n \n \n )\n}\n\nexport default AlertWithAvatarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-03.json b/public/r/alert-03.json
new file mode 100644
index 0000000..8511606
--- /dev/null
+++ b/public/r/alert-03.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-03",
+ "type": "registry:component",
+ "title": "Alert 3",
+ "description": "Closable alert with dismiss functionality using X icon and state management.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-03.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CircleAlertIcon, XIcon } from 'lucide-react'\n\nimport { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'\n\nconst AlertClosableDemo = () => {\n const [isActive, setIsActive] = useState(true)\n\n if (!isActive) return null\n\n return (\n \n \n \n
New message! \n
12 unread messages. Tap to see. \n
\n setIsActive(false)}>\n \n Close \n \n \n )\n}\n\nexport default AlertClosableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-04.json b/public/r/alert-04.json
new file mode 100644
index 0000000..fd52c57
--- /dev/null
+++ b/public/r/alert-04.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-04",
+ "type": "registry:component",
+ "title": "Alert 4",
+ "description": "Interactive alert with link button featuring arrow icon and styled border/text colors.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-04.tsx",
+ "content": "import { ArrowRightIcon, CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\n\nconst AlertWithLinkDemo = () => {\n return (\n \n \n New message! \n \n \n Link\n \n \n \n \n )\n}\n\nexport default AlertWithLinkDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-05.json b/public/r/alert-05.json
new file mode 100644
index 0000000..777bafc
--- /dev/null
+++ b/public/r/alert-05.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-05",
+ "type": "registry:component",
+ "title": "Alert 5",
+ "description": "Attached icon alert with separated icon section and destructive warning styling.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-05.tsx",
+ "content": "import { FileWarningIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\n\nconst AlertAttachedIconDemo = () => {\n return (\n \n \n \n
\n This file contains virus! \n \n )\n}\n\nexport default AlertAttachedIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-06.json b/public/r/alert-06.json
new file mode 100644
index 0000000..c299ec8
--- /dev/null
+++ b/public/r/alert-06.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-06",
+ "type": "registry:component",
+ "title": "Alert 6",
+ "description": "Focused icon alert with avatar-wrapped warning icon and destructive background styling.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-06.tsx",
+ "content": "import { FileWarningIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\n\nconst AlertFocusedIconDemo = () => {\n return (\n \n \n \n \n \n \n This file contains virus! \n \n )\n}\n\nexport default AlertFocusedIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-07.json b/public/r/alert-07.json
new file mode 100644
index 0000000..74920db
--- /dev/null
+++ b/public/r/alert-07.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-07",
+ "type": "registry:component",
+ "title": "Alert 7",
+ "description": "File upload progress alert with animated progress bar, action buttons, and close functionality.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-07.tsx",
+ "content": "'use client'\n\nimport { useState, useEffect } from 'react'\n\nimport { UploadIcon, XIcon } from 'lucide-react'\n\nimport { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Progress } from '@/components/ui/progress'\n\nconst AlertFileUploadDemo = () => {\n const [isActive, setIsActive] = useState(true)\n\n const [progress, setProgress] = useState(0)\n\n useEffect(() => {\n const timer = setTimeout(() => setProgress(50), 100)\n\n return () => clearTimeout(timer)\n }, [])\n\n if (!isActive) return null\n\n return (\n \n \n \n
\n
Uploading your 'Img-234.png' \n
Please wait While we upload your image. \n
\n
\n
\n \n Cancel\n \n \n Upload another\n \n
\n
\n setIsActive(false)}>\n \n Close \n \n \n )\n}\n\nexport default AlertFileUploadDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-08.json b/public/r/alert-08.json
new file mode 100644
index 0000000..fa031cb
--- /dev/null
+++ b/public/r/alert-08.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-08",
+ "type": "registry:component",
+ "title": "Alert 8",
+ "description": "Multi-action alert with primary background, multiple buttons, and dismissible interface.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-08.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CircleAlertIcon, XIcon } from 'lucide-react'\n\nimport { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\n\nconst AlertMultipleActionDemo = () => {\n const [isActive, setIsActive] = useState(true)\n\n if (!isActive) return null\n\n return (\n \n \n \n
\n
A new update is available \n
\n Includes the at new dashboard View. Pages end exports will now load taster\n \n
\n
\n \n Skip this update\n \n \n Install now\n \n
\n
\n setIsActive(false)}>\n \n Close \n \n \n )\n}\n\nexport default AlertMultipleActionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-09.json b/public/r/alert-09.json
new file mode 100644
index 0000000..9e3dbd2
--- /dev/null
+++ b/public/r/alert-09.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-09",
+ "type": "registry:component",
+ "title": "Alert 9",
+ "description": "Task progress alert with user avatar, progress indicator, and task completion tracking.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "avatar",
+ "progress"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-09.tsx",
+ "content": "'use client'\n\nimport { useState, useEffect } from 'react'\n\nimport { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Progress } from '@/components/ui/progress'\n\nconst AlertTaskDemo = () => {\n const [progress, setProgress] = useState(0)\n\n useEffect(() => {\n const timer = setTimeout(() => setProgress(50), 100)\n\n return () => clearTimeout(timer)\n }, [])\n\n return (\n \n \n \n HR \n \n \n
\n
@Rocky \n
this projects task is remaining, deadline is near. \n
\n
\n
\n \n )\n}\n\nexport default AlertTaskDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-10.json b/public/r/alert-10.json
new file mode 100644
index 0000000..81ce0d4
--- /dev/null
+++ b/public/r/alert-10.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-10",
+ "type": "registry:component",
+ "title": "Alert 10",
+ "description": "Gradient background alert with email verification message and gradient styling.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "progress"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-10.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CircleAlertIcon, XIcon } from 'lucide-react'\n\nimport { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'\n\nconst AlertGradientDemo = () => {\n const [isActive, setIsActive] = useState(true)\n\n if (!isActive) return null\n\n return (\n \n \n \n
Verify your email to activate your account \n
\n We've sent a confirmation link to your inbox. Check your email to complete the sign-up.\n \n
\n setIsActive(false)}>\n \n Close \n \n \n )\n}\n\nexport default AlertGradientDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-11.json b/public/r/alert-11.json
new file mode 100644
index 0000000..69ac93d
--- /dev/null
+++ b/public/r/alert-11.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-11",
+ "type": "registry:component",
+ "title": "Alert 11",
+ "description": "Success indicator alert with left border highlight and green success styling.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-11.tsx",
+ "content": "import { UserCheckIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\n\nconst AlertIndicatorSuccessDemo = () => {\n return (\n \n \n Your request to join the team is approved. \n \n )\n}\n\nexport default AlertIndicatorSuccessDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-12.json b/public/r/alert-12.json
new file mode 100644
index 0000000..7ac5172
--- /dev/null
+++ b/public/r/alert-12.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-12",
+ "type": "registry:component",
+ "title": "Alert 12",
+ "description": "Information/error indicator alert with destructive background styling and informational content.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-12.tsx",
+ "content": "import { UserRoundXIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\n\nconst AlertIndicatorDestructiveDemo = () => {\n return (\n \n \n Your request to join the team is denied. \n \n )\n}\n\nexport default AlertIndicatorDestructiveDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-13.json b/public/r/alert-13.json
new file mode 100644
index 0000000..183ce37
--- /dev/null
+++ b/public/r/alert-13.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-13",
+ "type": "registry:component",
+ "title": "Alert 13",
+ "description": "displaying a minimal \"New message!\" notification with an attention icon and an actionable \"Open\" button",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-13.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\n\nconst AlertWithActionDemo = () => {\n return (\n \n \n New message! \n \n Open\n \n \n )\n}\n\nexport default AlertWithActionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-14.json b/public/r/alert-14.json
new file mode 100644
index 0000000..0f05f3b
--- /dev/null
+++ b/public/r/alert-14.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-14",
+ "type": "registry:component",
+ "title": "Alert 14",
+ "description": "Error indicator alert with red styling and destructive error message.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-14.tsx",
+ "content": "import { TriangleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\n\nconst AlertDestructiveDemo = () => {\n return (\n \n \n Something went wrong! \n \n )\n}\n\nexport default AlertDestructiveDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-15.json b/public/r/alert-15.json
new file mode 100644
index 0000000..9002539
--- /dev/null
+++ b/public/r/alert-15.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-15",
+ "type": "registry:component",
+ "title": "Alert 15",
+ "description": "Pure destructive alert using built-in destructive variant with error styling.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-15.tsx",
+ "content": "import { TriangleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\n\nconst AlertPureDestructiveDemo = () => {\n return (\n \n \n Unable to process your payment. \n \n )\n}\n\nexport default AlertPureDestructiveDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-16.json b/public/r/alert-16.json
new file mode 100644
index 0000000..322fbc1
--- /dev/null
+++ b/public/r/alert-16.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-16",
+ "type": "registry:component",
+ "title": "Alert 16",
+ "description": "Minimal alert without icon displaying simple message text only.",
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-16.tsx",
+ "content": "import { Alert, AlertTitle } from '@/components/ui/alert'\n\nconst AlertWithoutIconDemo = () => {\n return (\n \n New message! \n \n )\n}\n\nexport default AlertWithoutIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-17.json b/public/r/alert-17.json
new file mode 100644
index 0000000..0c2192c
--- /dev/null
+++ b/public/r/alert-17.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-17",
+ "type": "registry:component",
+ "title": "Alert 17",
+ "description": "Standard alert with both title and description text providing detailed information.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-17.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertDescriptionDemo = () => {\n return (\n \n \n Creating your account \n Fill in your details to get started. \n \n )\n}\n\nexport default AlertDescriptionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-18.json b/public/r/alert-18.json
new file mode 100644
index 0000000..1033d11
--- /dev/null
+++ b/public/r/alert-18.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-18",
+ "type": "registry:component",
+ "title": "Alert 18",
+ "description": "Outline info alert with blue border and text styling for informational messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-18.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertOutlineInfoDemo = () => {\n return (\n \n \n Verify your email to activate your account \n \n We've sent a confirmation link to your inbox. Check your email to complete the sign-up.\n \n \n )\n}\n\nexport default AlertOutlineInfoDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-19.json b/public/r/alert-19.json
new file mode 100644
index 0000000..cf293db
--- /dev/null
+++ b/public/r/alert-19.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-19",
+ "type": "registry:component",
+ "title": "Alert 19",
+ "description": "Outline success alert with green border and text for success messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-19.tsx",
+ "content": "import { CheckCheckIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertOutlineSuccessDemo = () => {\n return (\n \n \n Account created successfully \n \n You are all set! You can now log in and start exploring your dashboard.\n \n \n )\n}\n\nexport default AlertOutlineSuccessDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-20.json b/public/r/alert-20.json
new file mode 100644
index 0000000..87b1e83
--- /dev/null
+++ b/public/r/alert-20.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-20",
+ "type": "registry:component",
+ "title": "Alert 20",
+ "description": "Outline warning alert with amber border and text for warning messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-20.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertOutlineWarningDemo = () => {\n return (\n \n \n Your password is too weak \n \n Try using a mix of uppercase letters, numbers, and symbols for better security.\n \n \n )\n}\n\nexport default AlertOutlineWarningDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-21.json b/public/r/alert-21.json
new file mode 100644
index 0000000..0a615a3
--- /dev/null
+++ b/public/r/alert-21.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-21",
+ "type": "registry:component",
+ "title": "Alert 21",
+ "description": "Soft primary alert with subtle background and text styling for secondary messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-21.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSoftDemo = () => {\n return (\n \n \n File Should be PDF,DOCX,JPG, or PNG. \n If the file type is not one of this than we can't get your files \n \n )\n}\n\nexport default AlertSoftDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-22.json b/public/r/alert-22.json
new file mode 100644
index 0000000..322918a
--- /dev/null
+++ b/public/r/alert-22.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-22",
+ "type": "registry:component",
+ "title": "Alert 22",
+ "description": "Soft info alert with blue background and subtle styling for information.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-22.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSoftInfoDemo = () => {\n return (\n \n \n Only certain file types are allowed \n \n You can upload PDF, DOCX, JPG, or PNG files up to 20MB.\n \n \n )\n}\n\nexport default AlertSoftInfoDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-22.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-23.json b/public/r/alert-23.json
new file mode 100644
index 0000000..d3b0fd6
--- /dev/null
+++ b/public/r/alert-23.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-23",
+ "type": "registry:component",
+ "title": "Alert 23",
+ "description": "Soft success alert with green background and subtle styling for success messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-23.tsx",
+ "content": "import { CheckCheckIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSoftSuccessDemo = () => {\n return (\n \n \n File uploaded successfully \n \n Your document has been saved and is now available in your files.\n \n \n )\n}\n\nexport default AlertSoftSuccessDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-23.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-24.json b/public/r/alert-24.json
new file mode 100644
index 0000000..cc50af4
--- /dev/null
+++ b/public/r/alert-24.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-24",
+ "type": "registry:component",
+ "title": "Alert 24",
+ "description": "Soft warning alert with amber background and subtle styling for warnings.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-24.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSoftWarningDemo = () => {\n return (\n \n \n This file might be too large \n \n Uploading large files may take longer or fail. Consider compressing it first.\n \n \n )\n}\n\nexport default AlertSoftWarningDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-24.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-25.json b/public/r/alert-25.json
new file mode 100644
index 0000000..8409372
--- /dev/null
+++ b/public/r/alert-25.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-25",
+ "type": "registry:component",
+ "title": "Alert 25",
+ "description": "Soft destructive alert with red background and subtle styling for errors.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-25.tsx",
+ "content": "import { TriangleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSoftDestructiveDemo = () => {\n return (\n \n \n Upload failed \n \n Something went wrong. Please try again or use a different file format.\n \n \n )\n}\n\nexport default AlertSoftDestructiveDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-25.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-26.json b/public/r/alert-26.json
new file mode 100644
index 0000000..ee33557
--- /dev/null
+++ b/public/r/alert-26.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-26",
+ "type": "registry:component",
+ "title": "Alert 26",
+ "description": "Solid info alert with full primary background for prominent informational messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-26.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSolidDemo = () => {\n return (\n \n \n Editing your profile \n \n Changes won't be saved until you click "Update."\n \n \n )\n}\n\nexport default AlertSolidDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-26.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-27.json b/public/r/alert-27.json
new file mode 100644
index 0000000..ee6f01c
--- /dev/null
+++ b/public/r/alert-27.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-27",
+ "type": "registry:component",
+ "title": "Alert 27",
+ "description": "Solid success alert with full green background for prominent success messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-27.tsx",
+ "content": "import { CheckCheckIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSolidSuccessDemo = () => {\n return (\n \n \n Profile updated \n Your changes have been saved successfully. \n \n )\n}\n\nexport default AlertSolidSuccessDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-27.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-28.json b/public/r/alert-28.json
new file mode 100644
index 0000000..93b96f4
--- /dev/null
+++ b/public/r/alert-28.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-28",
+ "type": "registry:component",
+ "title": "Alert 28",
+ "description": "Solid warning alert with full amber background for prominent warning messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-28.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSolidWarningDemo = () => {\n return (\n \n \n Some details are missing \n Complete your profile to get the best experience. \n \n )\n}\n\nexport default AlertSolidWarningDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-28.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-29.json b/public/r/alert-29.json
new file mode 100644
index 0000000..8cfcd51
--- /dev/null
+++ b/public/r/alert-29.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-29",
+ "type": "registry:component",
+ "title": "Alert 29",
+ "description": "Solid info alert with full blue background for prominent informational messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-29.tsx",
+ "content": "import { CircleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSolidInfoDemo = () => {\n return (\n \n \n Your profile is visible \n Anyone can view your basic information. \n \n )\n}\n\nexport default AlertSolidInfoDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-29.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/alert-30.json b/public/r/alert-30.json
new file mode 100644
index 0000000..8e09c94
--- /dev/null
+++ b/public/r/alert-30.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "alert-30",
+ "type": "registry:component",
+ "title": "Alert 30",
+ "description": "Solid destructive alert with full red background for prominent error messages.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-30.tsx",
+ "content": "import { TriangleAlertIcon } from 'lucide-react'\n\nimport { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert'\n\nconst AlertSolidDestructiveDemo = () => {\n return (\n \n \n Couldn't save changes \n Please try again or reload the page. \n \n )\n}\n\nexport default AlertSolidDestructiveDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-30.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/app-integration-01.json b/public/r/app-integration-01.json
new file mode 100644
index 0000000..3862b69
--- /dev/null
+++ b/public/r/app-integration-01.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "app-integration-01",
+ "type": "registry:block",
+ "title": "App Integration 1",
+ "description": "Two-column layout with integration cards featuring tool logos, names, descriptions, and call-to-action for conversion-focused app showcases",
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/app-integration/app-integration-01/page.tsx",
+ "content": "import AppIntegration from '@/components/shadcn-studio/blocks/app-integration-01/app-integration-01'\n\nconst integrations = [\n {\n name: 'Microsoft',\n description: 'Empowering Innovation and Connectivity',\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/microsoft-icon.png',\n alt: 'Microsoft'\n },\n {\n name: 'Spotify',\n description: 'Your soundtrack to every moment.',\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/spotify-icon.png',\n alt: 'Spotify'\n },\n {\n name: 'Github',\n description: 'Your Hub for Open Source Innovation',\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/github-white.png',\n alt: 'Github'\n }\n]\n\nconst AppIntegrationPage = () => {\n return \n}\n\nexport default AppIntegrationPage\n",
+ "type": "registry:page",
+ "target": "app/app-integration-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/app-integration-01/app-integration-01.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardTitle } from '@/components/ui/card'\n\ntype Integration = {\n name: string\n description: string\n image: string\n alt: string\n}[]\n\nconst AppIntegration = ({ integrations }: { integrations: Integration }) => {\n return (\n \n \n
\n
\n
\n Connects with your favourite tools to boost conversions!\n \n
\n Harness the potential of seamless integration to boost your sales performance! Discover how connecting\n your tools can lead to greater efficiency and impressive results.\n
\n
\n Check all app\n \n
\n\n
\n {integrations.map((integration, index) => (\n
\n \n \n
\n
\n \n {integration.name} \n {integration.description} \n
\n \n \n ))}\n
\n
\n
\n \n )\n}\n\nexport default AppIntegration\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/app-integration-01/app-integration-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "app-integration"
+ }
+}
\ No newline at end of file
diff --git a/public/r/application-shell-01.json b/public/r/application-shell-01.json
new file mode 100644
index 0000000..60e6319
--- /dev/null
+++ b/public/r/application-shell-01.json
@@ -0,0 +1,43 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "application-shell-01",
+ "type": "registry:block",
+ "title": "Application Shell 1",
+ "description": "Classic sidebar application shell with navigation menu, user profile, and language selector for traditional dashboard layouts.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "separator",
+ "sidebar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/application-shell/application-shell-01/page.tsx",
+ "content": "import {\n ArrowRightLeftIcon,\n CalendarClockIcon,\n ChartNoAxesCombinedIcon,\n ChartPieIcon,\n ChartSplineIcon,\n ClipboardListIcon,\n Clock9Icon,\n CrownIcon,\n FacebookIcon,\n HashIcon,\n InstagramIcon,\n LanguagesIcon,\n LinkedinIcon,\n SettingsIcon,\n SquareActivityIcon,\n TwitterIcon,\n Undo2Icon,\n UsersIcon\n} from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Separator } from '@/components/ui/separator'\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger\n} from '@/components/ui/sidebar'\n\nimport LanguageDropdown from '@/components/shadcn-studio/blocks/dropdown-language'\nimport ProfileDropdown from '@/components/shadcn-studio/blocks/dropdown-profile'\n\nconst ApplicationShell = () => {\n return (\n
\n )\n}\n\nexport default ApplicationShell\n",
+ "type": "registry:page",
+ "target": "app/application-shell-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-language.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\nimport type { ReactNode } from 'react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n align?: 'start' | 'center' | 'end'\n}\n\nconst LanguageDropdown = ({ defaultOpen, align, trigger }: Props) => {\n const [language, setLanguage] = useState('english')\n\n return (\n \n {trigger} \n \n \n \n English\n \n \n Deutsch\n \n \n Española\n \n \n Português\n \n \n 한국인\n \n \n \n \n )\n}\n\nexport default LanguageDropdown\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-language.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-profile.tsx",
+ "content": "import type { ReactNode } from 'react'\n\nimport {\n UserIcon,\n SettingsIcon,\n CreditCardIcon,\n UsersIcon,\n SquarePenIcon,\n CirclePlusIcon,\n LogOutIcon\n} from 'lucide-react'\n\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n align?: 'start' | 'center' | 'end'\n}\n\nconst ProfileDropdown = ({ trigger, defaultOpen, align = 'end' }: Props) => {\n return (\n \n {trigger} \n \n \n \n \n John Doe \n john.doe@example.com \n
\n \n\n \n\n \n \n \n My account \n \n \n \n Settings \n \n \n \n Billing \n \n \n\n \n\n \n \n \n Manage team \n \n \n \n Customization \n \n \n \n Add team account \n \n \n\n \n\n \n \n Logout \n \n \n \n )\n}\n\nexport default ProfileDropdown\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-profile.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "application-shell"
+ }
+}
\ No newline at end of file
diff --git a/public/r/art-deco.json b/public/r/art-deco.json
new file mode 100644
index 0000000..42be91a
--- /dev/null
+++ b/public/r/art-deco.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "art-deco",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Delius Swash Caps",
+ "font-mono": "Delius Swash Caps",
+ "font-serif": "Delius Swash Caps",
+ "radius": "0.625rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.96 0.03 106.92)",
+ "foreground": "oklch(0.40 0.07 90.80)",
+ "card": "oklch(0.98 0.04 97.73)",
+ "card-foreground": "oklch(0.32 0 0)",
+ "popover": "oklch(0.98 0.04 97.73)",
+ "popover-foreground": "oklch(0.32 0 0)",
+ "primary": "oklch(0.77 0.14 91.27)",
+ "primary-foreground": "oklch(0 0 0)",
+ "secondary": "oklch(0.67 0.13 61.58)",
+ "secondary-foreground": "oklch(0 0 0)",
+ "muted": "oklch(0.93 0.03 106.94)",
+ "muted-foreground": "oklch(0.32 0 0)",
+ "accent": "oklch(0.89 0.18 95.47)",
+ "accent-foreground": "oklch(0.32 0 0)",
+ "destructive": "oklch(0.69 0.20 32.29)",
+ "border": "oklch(0.83 0.11 93.01)",
+ "input": "oklch(0.65 0.13 81.66)",
+ "ring": "oklch(0.75 0.15 84.05)",
+ "chart-1": "oklch(0.89 0.18 95.47)",
+ "chart-2": "oklch(0.67 0.13 61.58)",
+ "chart-3": "oklch(0.65 0.13 81.66)",
+ "chart-4": "oklch(0.75 0.15 84.05)",
+ "chart-5": "oklch(0.77 0.14 91.27)",
+ "sidebar": "oklch(0.96 0.03 106.92)",
+ "sidebar-foreground": "oklch(0.32 0 0)",
+ "sidebar-primary": "oklch(0.77 0.14 91.27)",
+ "sidebar-primary-foreground": "oklch(0.32 0 0)",
+ "sidebar-accent": "oklch(0.89 0.18 95.47)",
+ "sidebar-accent-foreground": "oklch(0.32 0 0)",
+ "sidebar-border": "oklch(0.65 0.13 81.66)",
+ "sidebar-ring": "oklch(0.75 0.15 84.05)",
+ "font-sans": "Delius Swash Caps",
+ "font-serif": "Delius Swash Caps",
+ "font-mono": "Delius Swash Caps",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0.70 0.17 28.12 / 30%)",
+ "shadow-opacity": "0.05",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-md": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 2px 4px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 4px 6px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 8px 10px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.13)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.32 0 0)",
+ "foreground": "oklch(0.96 0.03 106.92)",
+ "card": "oklch(0.41 0 0)",
+ "card-foreground": "oklch(0.96 0.03 106.92)",
+ "popover": "oklch(0.41 0 0)",
+ "popover-foreground": "oklch(0.96 0.03 106.92)",
+ "primary": "oklch(0.84 0.17 83.07)",
+ "primary-foreground": "oklch(0 0 0)",
+ "secondary": "oklch(0.47 0.11 50.64)",
+ "secondary-foreground": "oklch(0.96 0.03 106.92)",
+ "muted": "oklch(0.44 0 0)",
+ "muted-foreground": "oklch(0.96 0.03 106.92)",
+ "accent": "oklch(0.66 0.14 79.74)",
+ "accent-foreground": "oklch(0 0 0)",
+ "destructive": "oklch(0.66 0.23 35.22)",
+ "border": "oklch(0.47 0.11 50.64)",
+ "input": "oklch(0.47 0.11 50.64)",
+ "ring": "oklch(0.65 0.13 81.66)",
+ "chart-1": "oklch(0.75 0.15 84.05)",
+ "chart-2": "oklch(0.47 0.11 50.64)",
+ "chart-3": "oklch(0.65 0.13 81.66)",
+ "chart-4": "oklch(0.75 0.15 84.05)",
+ "chart-5": "oklch(0.65 0.13 81.66)",
+ "sidebar": "oklch(0.32 0 0)",
+ "sidebar-foreground": "oklch(1.00 0 0)",
+ "sidebar-primary": "oklch(0.61 0.13 79.65)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.75 0.15 84.05)",
+ "sidebar-accent-foreground": "oklch(0.96 0.03 106.92)",
+ "sidebar-border": "oklch(0.47 0.11 50.64)",
+ "sidebar-ring": "oklch(0.65 0.13 81.66)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0.00 0 0 / 0.05)",
+ "shadow-opacity": "0.05",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.03)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.03)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 1px 2px -1px oklch(0 0 0 / 0.05)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 1px 2px -1px oklch(0 0 0 / 0.05)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 2px 4px -1px oklch(0 0 0 / 0.05)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 4px 6px -1px oklch(0 0 0 / 0.05)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 8px 10px -1px oklch(0 0 0 / 0.05)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.13)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/avatar-01.json b/public/r/avatar-01.json
new file mode 100644
index 0000000..2af10a0
--- /dev/null
+++ b/public/r/avatar-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-01",
+ "type": "registry:component",
+ "title": "Avatar 1",
+ "description": "Basic avatar with profile image and fallback initials.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-01.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarDemo = () => {\n return (\n \n \n HR \n \n )\n}\n\nexport default AvatarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-02.json b/public/r/avatar-02.json
new file mode 100644
index 0000000..53f5dea
--- /dev/null
+++ b/public/r/avatar-02.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-02",
+ "type": "registry:component",
+ "title": "Avatar 2",
+ "description": "Avatar with ring border highlighting for active or selected states.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-02.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarRingDemo = () => {\n return (\n \n \n HR \n \n )\n}\n\nexport default AvatarRingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-03.json b/public/r/avatar-03.json
new file mode 100644
index 0000000..96097e9
--- /dev/null
+++ b/public/r/avatar-03.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-03",
+ "type": "registry:component",
+ "title": "Avatar 3",
+ "description": "Small sized avatar variant with compact dimensions.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-03.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarRoundedDemo = () => {\n return (\n \n \n HR \n \n )\n}\n\nexport default AvatarRoundedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-04.json b/public/r/avatar-04.json
new file mode 100644
index 0000000..b42af2c
--- /dev/null
+++ b/public/r/avatar-04.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-04",
+ "type": "registry:component",
+ "title": "Avatar 4",
+ "description": "Large sized avatar variant with expanded dimensions.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-04.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarSizeDemo = () => {\n return (\n \n \n HR \n \n )\n}\n\nexport default AvatarSizeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-05.json b/public/r/avatar-05.json
new file mode 100644
index 0000000..be01c77
--- /dev/null
+++ b/public/r/avatar-05.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-05",
+ "type": "registry:component",
+ "title": "Avatar 5",
+ "description": "Circular avatar with fallback initials.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-05.tsx",
+ "content": "import { Avatar, AvatarFallback } from '@/components/ui/avatar'\n\nconst AvatarFallbackDemo = () => {\n return (\n \n HR \n \n )\n}\n\nexport default AvatarFallbackDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-06.json b/public/r/avatar-06.json
new file mode 100644
index 0000000..b05f047
--- /dev/null
+++ b/public/r/avatar-06.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-06",
+ "type": "registry:component",
+ "title": "Avatar 6",
+ "description": "Icon avatar using Lucide icon with colored background.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-06.tsx",
+ "content": "import { HomeIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\n\nconst AvatarIconDemo = () => {\n return (\n \n \n \n \n \n )\n}\n\nexport default AvatarIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-07.json b/public/r/avatar-07.json
new file mode 100644
index 0000000..3a96255
--- /dev/null
+++ b/public/r/avatar-07.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-07",
+ "type": "registry:component",
+ "title": "Avatar 7",
+ "description": "Status avatar with busy indicator showing red status dot.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-07.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarStatusBusyDemo = () => {\n return (\n \n
\n \n HR \n \n
\n Busy \n \n
\n )\n}\n\nexport default AvatarStatusBusyDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-08.json b/public/r/avatar-08.json
new file mode 100644
index 0000000..719e1ae
--- /dev/null
+++ b/public/r/avatar-08.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-08",
+ "type": "registry:component",
+ "title": "Avatar 8",
+ "description": "Status avatar with online indicator showing green status dot.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-08.tsx",
+ "content": "import { CheckIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarStatusRingDemo = () => {\n return (\n \n
\n \n HR \n \n
\n \n \n
\n )\n}\n\nexport default AvatarStatusRingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-09.json b/public/r/avatar-09.json
new file mode 100644
index 0000000..9910cd9
--- /dev/null
+++ b/public/r/avatar-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-09",
+ "type": "registry:component",
+ "title": "Avatar 9",
+ "description": "Status avatar with away indicator showing amber status dot for absent/away state.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-09.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarStatusAwayDemo = () => {\n return (\n \n
\n \n HR \n \n
\n Away \n \n
\n )\n}\n\nexport default AvatarStatusAwayDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-10.json b/public/r/avatar-10.json
new file mode 100644
index 0000000..17db60b
--- /dev/null
+++ b/public/r/avatar-10.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-10",
+ "type": "registry:component",
+ "title": "Avatar 10",
+ "description": "Avatar with plus icon overlay for adding or editing profile functionality.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-10.tsx",
+ "content": "import { PlusCircleIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarPlusDemo = () => {\n return (\n \n
\n \n HR \n \n
\n \n Add \n \n
\n )\n}\n\nexport default AvatarPlusDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-11.json b/public/r/avatar-11.json
new file mode 100644
index 0000000..7238b5d
--- /dev/null
+++ b/public/r/avatar-11.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-11",
+ "type": "registry:component",
+ "title": "Avatar 11",
+ "description": "Avatar with notification badge showing count number for alerts and messages.",
+ "registryDependencies": [
+ "avatar",
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-11.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Badge } from '@/components/ui/badge'\n\nconst AvatarNotificationBadgeDemo = () => {\n return (\n \n )\n}\n\nexport default AvatarNotificationBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-12.json b/public/r/avatar-12.json
new file mode 100644
index 0000000..b631785
--- /dev/null
+++ b/public/r/avatar-12.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-12",
+ "type": "registry:component",
+ "title": "Avatar 12",
+ "description": "Avatar with verified badge showing check mark icon for verified accounts.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-12.tsx",
+ "content": "import { BadgeCheckIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst AvatarVerifiedDemo = () => {\n return (\n \n
\n \n HR \n \n
\n Verified \n \n \n
\n )\n}\n\nexport default AvatarVerifiedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-13.json b/public/r/avatar-13.json
new file mode 100644
index 0000000..0421e04
--- /dev/null
+++ b/public/r/avatar-13.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-13",
+ "type": "registry:component",
+ "title": "Avatar 13",
+ "description": "Avatar group displaying multiple overlapping users with ring borders.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-13.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst AvatarGroupDemo = () => {\n return (\n \n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n )\n}\n\nexport default AvatarGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-14.json b/public/r/avatar-14.json
new file mode 100644
index 0000000..40eaa39
--- /dev/null
+++ b/public/r/avatar-14.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-14",
+ "type": "registry:component",
+ "title": "Avatar 14",
+ "description": "Avatar group with count indicator showing additional users (+9) in overflow.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-14.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n }\n]\n\nconst AvatarGroupMaxDemo = () => {\n return (\n \n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n +9 \n \n
\n )\n}\n\nexport default AvatarGroupMaxDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-15.json b/public/r/avatar-15.json
new file mode 100644
index 0000000..b342c4e
--- /dev/null
+++ b/public/r/avatar-15.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-15",
+ "type": "registry:component",
+ "title": "Avatar 15",
+ "description": "Large-sized avatar group with bigger dimensions for prominent display.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-15.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst AvatarGroupSizeDemo = () => {\n return (\n \n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n )\n}\n\nexport default AvatarGroupSizeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-16.json b/public/r/avatar-16.json
new file mode 100644
index 0000000..5a27200
--- /dev/null
+++ b/public/r/avatar-16.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-16",
+ "type": "registry:component",
+ "title": "Avatar 16",
+ "description": "Avatar group with tooltip hover effects and elevation animation.",
+ "registryDependencies": [
+ "avatar",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-16.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst AvatarGroupTooltipDemo = () => {\n return (\n \n {avatars.map((avatar, index) => (\n
\n \n \n \n {avatar.fallback} \n \n \n {avatar.name} \n \n ))}\n
\n )\n}\n\nexport default AvatarGroupTooltipDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-17.json b/public/r/avatar-17.json
new file mode 100644
index 0000000..a56ddca
--- /dev/null
+++ b/public/r/avatar-17.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-17",
+ "type": "registry:component",
+ "title": "Avatar 17",
+ "description": "Avatar group with smooth spacing transition on hover interaction.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-17.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst AvatarGroupTransitionDemo = () => {\n return (\n \n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n )\n}\n\nexport default AvatarGroupTransitionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-18.json b/public/r/avatar-18.json
new file mode 100644
index 0000000..ed2aada
--- /dev/null
+++ b/public/r/avatar-18.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-18",
+ "type": "registry:component",
+ "title": "Avatar 18",
+ "description": "Avatar group with tooltip transitions and hover spacing effects.",
+ "registryDependencies": [
+ "avatar",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-18.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst AvatarGroupTooltipTransitionDemo = () => {\n return (\n \n {avatars.map((avatar, index) => (\n
\n \n \n \n {avatar.fallback} \n \n \n {avatar.name} \n \n ))}\n
\n )\n}\n\nexport default AvatarGroupTooltipTransitionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-19.json b/public/r/avatar-19.json
new file mode 100644
index 0000000..1798db2
--- /dev/null
+++ b/public/r/avatar-19.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-19",
+ "type": "registry:component",
+ "title": "Avatar 19",
+ "description": "Avatar group with dropdown menu showing additional users and actions.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-19.tsx",
+ "content": "import { PlusIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n fallback: 'DR',\n name: 'Darlene Robertson'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n fallback: 'LA',\n name: 'Leslie Alexander'\n }\n]\n\nconst AvatarGroupDropdownDemo = () => {\n return (\n \n {avatars.slice(0, 3).map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n \n \n \n Add \n \n \n \n {avatars.slice(3).map((avatar, index) => (\n \n \n \n {avatar.fallback} \n \n {avatar.name} \n \n ))}\n \n \n
\n )\n}\n\nexport default AvatarGroupDropdownDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-20.json b/public/r/avatar-20.json
new file mode 100644
index 0000000..5799dfc
--- /dev/null
+++ b/public/r/avatar-20.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-20",
+ "type": "registry:component",
+ "title": "Avatar 20",
+ "description": "Avatar group with outlined container and background styling.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-20.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst AvatarGroupOutlineDemo = () => {\n return (\n \n
\n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n
\n +3\n \n
\n )\n}\n\nexport default AvatarGroupOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/avatar-21.json b/public/r/avatar-21.json
new file mode 100644
index 0000000..7a3530c
--- /dev/null
+++ b/public/r/avatar-21.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "avatar-21",
+ "type": "registry:component",
+ "title": "Avatar 21",
+ "description": "Avatar group with popularity indicator styling and text showcasing community trust.",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-21.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst AvatarGroupPopularityIndicatorDemo = () => {\n return (\n \n
\n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n
\n Loved by 10K+ developers.\n
\n
\n )\n}\n\nexport default AvatarGroupPopularityIndicatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-01.json b/public/r/badge-01.json
new file mode 100644
index 0000000..a76a3d2
--- /dev/null
+++ b/public/r/badge-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-01",
+ "type": "registry:component",
+ "title": "Badge 1",
+ "description": "Default badge demonstrating basic styling with standard text display",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-01.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeDemo = () => {\n return Default \n}\n\nexport default BadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-02.json b/public/r/badge-02.json
new file mode 100644
index 0000000..de18bae
--- /dev/null
+++ b/public/r/badge-02.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-02",
+ "type": "registry:component",
+ "title": "Badge 2",
+ "description": "Secondary variant badge with muted styling for less prominent labels",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-02.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeSecondaryDemo = () => {\n return Secondary \n}\n\nexport default BadgeSecondaryDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-03.json b/public/r/badge-03.json
new file mode 100644
index 0000000..cdc0749
--- /dev/null
+++ b/public/r/badge-03.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-03",
+ "type": "registry:component",
+ "title": "Badge 3",
+ "description": "Destructive variant badge with red styling for error or warning states",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-03.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeDestructiveDemo = () => {\n return Destructive \n}\n\nexport default BadgeDestructiveDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-04.json b/public/r/badge-04.json
new file mode 100644
index 0000000..4b62492
--- /dev/null
+++ b/public/r/badge-04.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-04",
+ "type": "registry:component",
+ "title": "Badge 4",
+ "description": "Outline variant badge with bordered styling for subtle emphasis",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-04.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeOutlineDemo = () => {\n return Outline \n}\n\nexport default BadgeOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-05.json b/public/r/badge-05.json
new file mode 100644
index 0000000..758c8aa
--- /dev/null
+++ b/public/r/badge-05.json
@@ -0,0 +1,15 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-05",
+ "type": "registry:component",
+ "title": "Badge 5",
+ "description": "Dot indicator badge with colored circle for compact status representation",
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-05.tsx",
+ "content": "const BadgeDotDemo = () => {\n return (\n \n \n Dot Badge\n \n )\n}\n\nexport default BadgeDotDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-06.json b/public/r/badge-06.json
new file mode 100644
index 0000000..72e796c
--- /dev/null
+++ b/public/r/badge-06.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-06",
+ "type": "registry:component",
+ "title": "Badge 6",
+ "description": "Rounded badge with full border radius for pill-shaped appearance",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-06.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeRoundedDemo = () => {\n return Rounded \n}\n\nexport default BadgeRoundedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-07.json b/public/r/badge-07.json
new file mode 100644
index 0000000..fdb53c9
--- /dev/null
+++ b/public/r/badge-07.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-07",
+ "type": "registry:component",
+ "title": "Badge 7",
+ "description": "Number badge with circular design for count and notification displays",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-07.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeNumberDemo = () => {\n return 8 \n}\n\nexport default BadgeNumberDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-08.json b/public/r/badge-08.json
new file mode 100644
index 0000000..ca4ad50
--- /dev/null
+++ b/public/r/badge-08.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-08",
+ "type": "registry:component",
+ "title": "Badge 8",
+ "description": "Large size badge with increased padding for prominence",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-08.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeLargeDemo = () => {\n return Large \n}\n\nexport default BadgeLargeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-09.json b/public/r/badge-09.json
new file mode 100644
index 0000000..ebc436f
--- /dev/null
+++ b/public/r/badge-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-09",
+ "type": "registry:component",
+ "title": "Badge 9",
+ "description": "Small size badge with reduced padding for compact display areas",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-09.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeSmallDemo = () => {\n return Small \n}\n\nexport default BadgeSmallDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-10.json b/public/r/badge-10.json
new file mode 100644
index 0000000..c5fe8bd
--- /dev/null
+++ b/public/r/badge-10.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-10",
+ "type": "registry:component",
+ "title": "Badge 10",
+ "description": "Badge with icon integration for enhanced visual context",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-10.tsx",
+ "content": "import { StarIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\n\nconst BadgeWithIconDemo = () => {\n return (\n \n \n With Icon\n \n )\n}\n\nexport default BadgeWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-11.json b/public/r/badge-11.json
new file mode 100644
index 0000000..582da55
--- /dev/null
+++ b/public/r/badge-11.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-11",
+ "type": "registry:component",
+ "title": "Badge 11",
+ "description": "Link badge that can be used as clickable navigation element",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-11.tsx",
+ "content": "import { ArrowRightIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\n\nconst BadgeLinkDemo = () => {\n return (\n \n \n Link \n \n \n )\n}\n\nexport default BadgeLinkDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-12.json b/public/r/badge-12.json
new file mode 100644
index 0000000..0cf94ec
--- /dev/null
+++ b/public/r/badge-12.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-12",
+ "type": "registry:component",
+ "title": "Badge 12",
+ "description": "Closable badge with X button for dismissible notifications",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-12.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { XIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\n\nconst BadgeClosableDemo = () => {\n const [isActive, setIsActive] = useState(true)\n\n if (!isActive) return null\n\n return (\n \n Closable\n setIsActive(false)}\n >\n \n \n \n )\n}\n\nexport default BadgeClosableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-13.json b/public/r/badge-13.json
new file mode 100644
index 0000000..00f13fc
--- /dev/null
+++ b/public/r/badge-13.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-13",
+ "type": "registry:component",
+ "title": "Badge 13",
+ "description": "Selectable badge with checkbox functionality for interactive selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "checkbox"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-13.tsx",
+ "content": "'use client'\n\nimport { useState, useId } from 'react'\n\nimport { CheckCircleIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Checkbox } from '@/components/ui/checkbox'\n\nconst BadgeSelectableDemo = () => {\n const [selected, setSelected] = useState(false)\n\n const id = useId()\n\n return (\n \n setSelected(!!checked)}\n />\n \n \n {selected ? 'Selected' : 'Selectable'}\n \n \n )\n}\n\nexport default BadgeSelectableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-14.json b/public/r/badge-14.json
new file mode 100644
index 0000000..d1a0c64
--- /dev/null
+++ b/public/r/badge-14.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-14",
+ "type": "registry:component",
+ "title": "Badge 14",
+ "description": "Gradient styled badge with vibrant indigo-to-pink color transition",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-14.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeGradientDemo = () => {\n return (\n \n Gradient\n \n )\n}\n\nexport default BadgeGradientDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-15.json b/public/r/badge-15.json
new file mode 100644
index 0000000..7a44656
--- /dev/null
+++ b/public/r/badge-15.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-15",
+ "type": "registry:component",
+ "title": "Badge 15",
+ "description": "Gradient outline badge with bordered gradient effect",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-15.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeGradientOutlineDemo = () => {\n return (\n \n Gradient Outline \n
\n )\n}\n\nexport default BadgeGradientOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-16.json b/public/r/badge-16.json
new file mode 100644
index 0000000..10609f8
--- /dev/null
+++ b/public/r/badge-16.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-16",
+ "type": "registry:component",
+ "title": "Badge 16",
+ "description": "In-progress status badge with amber color and dot indicator",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-16.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeInProgressDemo = () => {\n return (\n \n \n In Progress\n \n )\n}\n\nexport default BadgeInProgressDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-17.json b/public/r/badge-17.json
new file mode 100644
index 0000000..61fdb2a
--- /dev/null
+++ b/public/r/badge-17.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-17",
+ "type": "registry:component",
+ "title": "Badge 17",
+ "description": "Blocked status badge with destructive color and dot indicator",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-17.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeBlockedDemo = () => {\n return (\n \n \n Blocked\n \n )\n}\n\nexport default BadgeBlockedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-18.json b/public/r/badge-18.json
new file mode 100644
index 0000000..278d4bd
--- /dev/null
+++ b/public/r/badge-18.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-18",
+ "type": "registry:component",
+ "title": "Badge 18",
+ "description": "Completed status badge with green color and dot indicator",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-18.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeCompletedDemo = () => {\n return (\n \n \n Completed\n \n )\n}\n\nexport default BadgeCompletedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-19.json b/public/r/badge-19.json
new file mode 100644
index 0000000..b673559
--- /dev/null
+++ b/public/r/badge-19.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-19",
+ "type": "registry:component",
+ "title": "Badge 19",
+ "description": "Pending status badge with amber outline and alert icon",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-19.tsx",
+ "content": "import { AlertCircleIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\n\nconst BadgePendingDemo = () => {\n return (\n \n \n Pending\n \n )\n}\n\nexport default BadgePendingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-20.json b/public/r/badge-20.json
new file mode 100644
index 0000000..1d1c908
--- /dev/null
+++ b/public/r/badge-20.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-20",
+ "type": "registry:component",
+ "title": "Badge 20",
+ "description": "Failed status badge with destructive outline and ban icon",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-20.tsx",
+ "content": "import { BanIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\n\nconst BadgeFailedDemo = () => {\n return (\n \n \n Failed\n \n )\n}\n\nexport default BadgeFailedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-21.json b/public/r/badge-21.json
new file mode 100644
index 0000000..624f080
--- /dev/null
+++ b/public/r/badge-21.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-21",
+ "type": "registry:component",
+ "title": "Badge 21",
+ "description": "Successful status badge with green outline and check icon",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-21.tsx",
+ "content": "import { CheckCircleIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\n\nconst BadgeSuccessfulDemo = () => {\n return (\n \n \n Successful\n \n )\n}\n\nexport default BadgeSuccessfulDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-22.json b/public/r/badge-22.json
new file mode 100644
index 0000000..9109084
--- /dev/null
+++ b/public/r/badge-22.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-22",
+ "type": "registry:component",
+ "title": "Badge 22",
+ "description": "Avatar badge combining user profile image with label text",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-22.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\n\nconst BadgeAvatarDemo = () => {\n return (\n \n \n Avatar\n \n )\n}\n\nexport default BadgeAvatarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-22.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-23.json b/public/r/badge-23.json
new file mode 100644
index 0000000..365b54b
--- /dev/null
+++ b/public/r/badge-23.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-23",
+ "type": "registry:component",
+ "title": "Badge 23",
+ "description": "Cart notification badge with count display over shopping icon",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-23.tsx",
+ "content": "import { ShoppingCartIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\nimport { Badge } from '@/components/ui/badge'\n\nconst BadgeCartDemo = () => {\n return (\n \n )\n}\n\nexport default BadgeCartDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-23.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/badge-24.json b/public/r/badge-24.json
new file mode 100644
index 0000000..a56bee4
--- /dev/null
+++ b/public/r/badge-24.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "badge-24",
+ "type": "registry:component",
+ "title": "Badge 24",
+ "description": "Online status indicator badge with green dot over avatar",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-24.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nconst BadgeStatusOnlineDemo = () => {\n return (\n \n
\n \n HR \n \n
\n Online \n \n
\n )\n}\n\nexport default BadgeStatusOnlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-24.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/blog-component-01.json b/public/r/blog-component-01.json
new file mode 100644
index 0000000..ab05445
--- /dev/null
+++ b/public/r/blog-component-01.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "blog-component-01",
+ "type": "registry:block",
+ "title": "Blog 1",
+ "description": "Three-column blog grid with featured images, titles, descriptions, and read more buttons for journey and destination content",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/blog-component/blog-component-01/page.tsx",
+ "content": "import Blog from '@/components/shadcn-studio/blocks/blog-component-01/blog-component-01'\n\nconst blogCards = [\n {\n img: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/blog/image-1.png',\n alt: 'Modern house',\n title: 'Laws of Transfer of Immovable Property',\n description:\n 'Experience the charm of this lovely and cozy apartment, featuring warm decor and inviting spaces, perfect for relaxation and comfort, ideal for your next getaway.',\n blogLink: '#'\n },\n {\n img: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/blog/image-2.png',\n alt: 'Traditional house',\n title: 'Thane Development Plan 2026 & Master Plan',\n description:\n 'Discover a unique nook in the heart of the city, offering convenience and access to attractions. Stylishly designed, it provides a comfortable retreat.',\n blogLink: '#'\n },\n {\n img: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/blog/image-3.png',\n alt: 'Modern house with pool',\n title: 'What is a Property Sale Agreement?',\n description:\n 'Welcome to this charming independent house bedroom, featuring a spacious layout and cozy furnishings. Enjoy abundant natural light and peaceful.',\n blogLink: '#'\n }\n]\n\nconst BlogPage = () => {\n return \n}\n\nexport default BlogPage\n",
+ "type": "registry:page",
+ "target": "app/blog-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/blog-component-01/blog-component-01.tsx",
+ "content": "import { ArrowRightIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardTitle, CardDescription, CardHeader, CardFooter } from '@/components/ui/card'\n\ntype BlogCard = {\n img: string\n alt: string\n title: string\n description: string\n blogLink: string\n}[]\n\nconst Blog = ({ blogCards }: { blogCards: BlogCard }) => {\n return (\n \n \n {/* Header */}\n
\n
Blog list
\n
Plan your upcoming journey. \n
\n Explore new destinations, indulge in local cuisines, and immerse yourself in diverse cultures.\n
\n
\n\n
\n
\n \n )\n}\n\nexport default Blog\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/blog-component-01/blog-component-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "blog-component"
+ }
+}
\ No newline at end of file
diff --git a/public/r/breadcrumb-01.json b/public/r/breadcrumb-01.json
new file mode 100644
index 0000000..4c3e7b9
--- /dev/null
+++ b/public/r/breadcrumb-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "breadcrumb-01",
+ "type": "registry:component",
+ "title": "Breadcrumb 1",
+ "description": "Basic breadcrumb navigation with standard separators for page hierarchy",
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-01.tsx",
+ "content": "import {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\n\nconst BreadcrumbDemo = () => {\n return (\n \n \n \n Home \n \n \n \n Documents \n \n \n \n Add Document \n \n \n \n )\n}\n\nexport default BreadcrumbDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/breadcrumb-02.json b/public/r/breadcrumb-02.json
new file mode 100644
index 0000000..40c5bc1
--- /dev/null
+++ b/public/r/breadcrumb-02.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "breadcrumb-02",
+ "type": "registry:component",
+ "title": "Breadcrumb 2",
+ "description": "Breadcrumb with home icon and slash separators for enhanced navigation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-02.tsx",
+ "content": "import { HomeIcon } from 'lucide-react'\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\n\nconst BreadcrumbSlashSeparatorDemo = () => {\n return (\n \n \n \n \n \n Home\n \n \n / \n \n Documents \n \n / \n \n Add Document \n \n \n \n )\n}\n\nexport default BreadcrumbSlashSeparatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/breadcrumb-03.json b/public/r/breadcrumb-03.json
new file mode 100644
index 0000000..906a031
--- /dev/null
+++ b/public/r/breadcrumb-03.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "breadcrumb-03",
+ "type": "registry:component",
+ "title": "Breadcrumb 3",
+ "description": "Breadcrumb with folder icons and chevron separators for file system navigation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-03.tsx",
+ "content": "import { ChevronsRightIcon, FileIcon, FolderIcon, HomeIcon } from 'lucide-react'\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\n\nconst BreadcrumbChevronsSeparatorDemo = () => {\n return (\n \n \n \n \n \n Home \n \n \n \n \n \n \n \n \n Documents\n \n \n \n \n \n \n \n \n Add Document\n \n \n \n \n )\n}\n\nexport default BreadcrumbChevronsSeparatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/breadcrumb-04.json b/public/r/breadcrumb-04.json
new file mode 100644
index 0000000..6d3d5bd
--- /dev/null
+++ b/public/r/breadcrumb-04.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "breadcrumb-04",
+ "type": "registry:component",
+ "title": "Breadcrumb 4",
+ "description": "Breadcrumb with dot icon separators for minimal visual hierarchy",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-04.tsx",
+ "content": "import { DotIcon } from 'lucide-react'\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\n\nconst BreadcrumbDotSeparatorDemo = () => {\n return (\n \n \n \n Home \n \n \n \n \n \n Documents \n \n \n \n \n \n Add Document \n \n \n \n )\n}\n\nexport default BreadcrumbDotSeparatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/breadcrumb-05.json b/public/r/breadcrumb-05.json
new file mode 100644
index 0000000..482f7bc
--- /dev/null
+++ b/public/r/breadcrumb-05.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "breadcrumb-05",
+ "type": "registry:component",
+ "title": "Breadcrumb 5",
+ "description": "Breadcrumb styled with outlined badge components for modern tab-like appearance",
+ "registryDependencies": [
+ "badge",
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-05.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\n\nconst BreadcrumbTabsOutlineDemo = () => {\n return (\n \n \n \n \n \n Home\n \n \n \n \n \n \n \n Documents\n \n \n \n \n \n \n \n Add Document\n \n \n \n \n \n )\n}\n\nexport default BreadcrumbTabsOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/breadcrumb-06.json b/public/r/breadcrumb-06.json
new file mode 100644
index 0000000..5288552
--- /dev/null
+++ b/public/r/breadcrumb-06.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "breadcrumb-06",
+ "type": "registry:component",
+ "title": "Breadcrumb 6",
+ "description": "Breadcrumb with dropdown menu integration for compact nested navigation and outlined badge components for modern tab-like appearance",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "breadcrumb",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-06.tsx",
+ "content": "import { ChevronDownIcon, HomeIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\n\nconst BreadcrumbWithDropdownDemo = () => {\n return (\n \n \n \n \n \n \n Home\n \n \n \n / \n \n \n \n Documents\n \n \n \n / \n \n \n \n \n Add Document\n \n \n \n Documentation \n Themes \n GitHub \n \n \n \n \n \n \n )\n}\n\nexport default BreadcrumbWithDropdownDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/breadcrumb-07.json b/public/r/breadcrumb-07.json
new file mode 100644
index 0000000..f289d4f
--- /dev/null
+++ b/public/r/breadcrumb-07.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "breadcrumb-07",
+ "type": "registry:component",
+ "title": "Breadcrumb 7",
+ "description": "Interactive breadcrumb with folder state icons and dropdown functionality",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-07.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronsRightIcon, FolderIcon, FolderOpenIcon, HomeIcon } from 'lucide-react'\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\n\nconst BreadcrumbWithIconDemo = () => {\n const [open, setOpen] = useState(false)\n\n return (\n \n \n \n \n \n Home \n \n \n \n \n \n \n \n \n {open ? : }\n {open ? 'Open' : 'Close'} \n \n \n Documentation \n Themes \n GitHub \n \n \n \n \n \n \n \n Add Document \n \n \n \n )\n}\n\nexport default BreadcrumbWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/breadcrumb-08.json b/public/r/breadcrumb-08.json
new file mode 100644
index 0000000..bca0914
--- /dev/null
+++ b/public/r/breadcrumb-08.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "breadcrumb-08",
+ "type": "registry:component",
+ "title": "Breadcrumb 8",
+ "description": "Outlined breadcrumb with bordered container styling for defined boundaries",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-08.tsx",
+ "content": "import { HomeIcon } from 'lucide-react'\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\n\nconst BreadcrumbOutlineDemo = () => {\n return (\n \n \n \n \n \n Home \n \n \n \n \n Documents \n \n \n \n Add Document \n \n \n \n )\n}\n\nexport default BreadcrumbOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-01.json b/public/r/button-01.json
new file mode 100644
index 0000000..e30ba5e
--- /dev/null
+++ b/public/r/button-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-01",
+ "type": "registry:component",
+ "title": "Button 1",
+ "description": "A basic button component with default styling",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-01.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonDemo = () => {\n return Button \n}\n\nexport default ButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-02.json b/public/r/button-02.json
new file mode 100644
index 0000000..d8186e6
--- /dev/null
+++ b/public/r/button-02.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-02",
+ "type": "registry:component",
+ "title": "Button 2",
+ "description": "A button component in disabled state",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-02.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonDisabledDemo = () => {\n return Verify Email \n}\n\nexport default ButtonDisabledDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-03.json b/public/r/button-03.json
new file mode 100644
index 0000000..bb40262
--- /dev/null
+++ b/public/r/button-03.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-03",
+ "type": "registry:component",
+ "title": "Button 3",
+ "description": "A rounded button with icon and text content",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-03.tsx",
+ "content": "import { StarIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonRoundedDemo = () => {\n return (\n \n \n Star\n \n )\n}\n\nexport default ButtonRoundedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-04.json b/public/r/button-04.json
new file mode 100644
index 0000000..d8c82aa
--- /dev/null
+++ b/public/r/button-04.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-04",
+ "type": "registry:component",
+ "title": "Button 4",
+ "description": "A button with animated icon that moves on hover",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-04.tsx",
+ "content": "import { ArrowRightIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonIconHoverDemo = () => {\n return (\n \n Get In Touch\n \n \n )\n}\n\nexport default ButtonIconHoverDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-05.json b/public/r/button-05.json
new file mode 100644
index 0000000..4aa4a2f
--- /dev/null
+++ b/public/r/button-05.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-05",
+ "type": "registry:component",
+ "title": "Button 5",
+ "description": "Outline buttons with icons positioned before and after text",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-05.tsx",
+ "content": "import { Redo2Icon, Undo2Icon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonIconDemo = () => {\n return (\n \n \n \n Undo\n \n \n Redo\n \n \n
\n )\n}\n\nexport default ButtonIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-06.json b/public/r/button-06.json
new file mode 100644
index 0000000..4c065a3
--- /dev/null
+++ b/public/r/button-06.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-06",
+ "type": "registry:component",
+ "title": "Button 6",
+ "description": "Grouped action buttons for Cancel and Save operations",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-06.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonActionsDemo = () => {\n return (\n \n Cancel \n Save Changes \n
\n )\n}\n\nexport default ButtonActionsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-07.json b/public/r/button-07.json
new file mode 100644
index 0000000..118062d
--- /dev/null
+++ b/public/r/button-07.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-07",
+ "type": "registry:component",
+ "title": "Button 7",
+ "description": "A button component with large size variant",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-07.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonLargeDemo = () => {\n return Large \n}\n\nexport default ButtonLargeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-08.json b/public/r/button-08.json
new file mode 100644
index 0000000..ee15a46
--- /dev/null
+++ b/public/r/button-08.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-08",
+ "type": "registry:component",
+ "title": "Button 8",
+ "description": "A button component with small size variant",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-08.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonSmallDemo = () => {\n return Small \n}\n\nexport default ButtonSmallDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-09.json b/public/r/button-09.json
new file mode 100644
index 0000000..08012ab
--- /dev/null
+++ b/public/r/button-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-09",
+ "type": "registry:component",
+ "title": "Button 9",
+ "description": "A button component with custom extra small sizing",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-09.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonExtraSmallDemo = () => {\n return Extra Small \n}\n\nexport default ButtonExtraSmallDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-10.json b/public/r/button-10.json
new file mode 100644
index 0000000..79fd54f
--- /dev/null
+++ b/public/r/button-10.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-10",
+ "type": "registry:component",
+ "title": "Button 10",
+ "description": "A destructive button with gradient background for delete actions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-10.tsx",
+ "content": "import { TrashIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonDeleteDemo = () => {\n return (\n \n \n Delete\n \n )\n}\n\nexport default ButtonDeleteDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-11.json b/public/r/button-11.json
new file mode 100644
index 0000000..62998e8
--- /dev/null
+++ b/public/r/button-11.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-11",
+ "type": "registry:component",
+ "title": "Button 11",
+ "description": "A Primary Button with gradient background effect for primary action",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-11.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonGradientDemo = () => {\n return (\n \n Get Started\n \n )\n}\n\nexport default ButtonGradientDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-12.json b/public/r/button-12.json
new file mode 100644
index 0000000..90066a8
--- /dev/null
+++ b/public/r/button-12.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-12",
+ "type": "registry:component",
+ "title": "Button 12",
+ "description": "Upgrade button with amber gradient and icon",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-12.tsx",
+ "content": "import { ZapIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonUpgradeDemo = () => {\n return (\n \n Upgrade \n \n )\n}\n\nexport default ButtonUpgradeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-13.json b/public/r/button-13.json
new file mode 100644
index 0000000..2297f49
--- /dev/null
+++ b/public/r/button-13.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-13",
+ "type": "registry:component",
+ "title": "Button 13",
+ "description": "Outline button with sky blue theme for duplicate action",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-13.tsx",
+ "content": "import { CopyIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonDuplicateDemo = () => {\n return (\n \n \n Duplicate\n \n )\n}\n\nexport default ButtonDuplicateDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-14.json b/public/r/button-14.json
new file mode 100644
index 0000000..2c8dabf
--- /dev/null
+++ b/public/r/button-14.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-14",
+ "type": "registry:component",
+ "title": "Button 14",
+ "description": "Outline button with dashed border for download action",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-14.tsx",
+ "content": "import { DownloadIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonDownloadDemo = () => {\n return (\n \n \n Download\n \n )\n}\n\nexport default ButtonDownloadDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-15.json b/public/r/button-15.json
new file mode 100644
index 0000000..e2fd047
--- /dev/null
+++ b/public/r/button-15.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-15",
+ "type": "registry:component",
+ "title": "Button 15",
+ "description": "Destructive outline button for discard/delete actions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-15.tsx",
+ "content": "import { Trash2Icon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonDiscardDemo = () => {\n return (\n \n \n Discard\n \n )\n}\n\nexport default ButtonDiscardDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-16.json b/public/r/button-16.json
new file mode 100644
index 0000000..44cafd6
--- /dev/null
+++ b/public/r/button-16.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-16",
+ "type": "registry:component",
+ "title": "Button 16",
+ "description": "Ghost button with animated arrow on hover",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-16.tsx",
+ "content": "import { ArrowLeftIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGhostDemo = () => {\n return (\n \n \n Go to settings\n \n )\n}\n\nexport default ButtonGhostDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-17.json b/public/r/button-17.json
new file mode 100644
index 0000000..ee77d2f
--- /dev/null
+++ b/public/r/button-17.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-17",
+ "type": "registry:component",
+ "title": "Button 17",
+ "description": "Loading button with spinning icon in disabled state",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-17.tsx",
+ "content": "import { LoaderCircleIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonLoadingDemo = () => {\n return (\n \n \n Loading\n \n )\n}\n\nexport default ButtonLoadingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-18.json b/public/r/button-18.json
new file mode 100644
index 0000000..0593ec0
--- /dev/null
+++ b/public/r/button-18.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-18",
+ "type": "registry:component",
+ "title": "Button 18",
+ "description": "Link button with animated underline effect on hover",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-18.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonAnimatedLinkDemo = () => {\n return (\n \n Contact Us \n \n )\n}\n\nexport default ButtonAnimatedLinkDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-19.json b/public/r/button-19.json
new file mode 100644
index 0000000..a1ad8c2
--- /dev/null
+++ b/public/r/button-19.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-19",
+ "type": "registry:component",
+ "title": "Button 19",
+ "description": "Publish button with circular icon badge and rounded outline styling",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-19.tsx",
+ "content": "import { ShareIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonPublishDemo = () => {\n return (\n \n \n \n \n Publish\n \n )\n}\n\nexport default ButtonPublishDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-20.json b/public/r/button-20.json
new file mode 100644
index 0000000..833edeb
--- /dev/null
+++ b/public/r/button-20.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-20",
+ "type": "registry:component",
+ "title": "Button 20",
+ "description": "Copy button UI displaying a truncated URL with a rounded \"Copy\" icon for quick copying.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-20.tsx",
+ "content": "import { CopyIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonCopyDemo = () => {\n return (\n \n
\n https://shadcnstudio.com/docs/components/button\n
\n
\n \n Copy \n \n
\n )\n}\n\nexport default ButtonCopyDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-21.json b/public/r/button-21.json
new file mode 100644
index 0000000..ccc8f70
--- /dev/null
+++ b/public/r/button-21.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-21",
+ "type": "registry:component",
+ "title": "Button 21",
+ "description": "Button with badge indicator showing unread message count",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-21.tsx",
+ "content": "import { MailCheckIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\n\nconst ButtonMessagesBadgeDemo = () => {\n return (\n \n \n Messages\n \n 99+\n \n \n )\n}\n\nexport default ButtonMessagesBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-22.json b/public/r/button-22.json
new file mode 100644
index 0000000..cbc5ed6
--- /dev/null
+++ b/public/r/button-22.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-22",
+ "type": "registry:component",
+ "title": "Button 22",
+ "description": "caution button with a warning icon and soft amber styling to indicate alerts or risks.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-22.tsx",
+ "content": "import { AlertTriangleIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonCautionDemo = () => {\n return (\n \n \n Caution\n \n )\n}\n\nexport default ButtonCautionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-22.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-23.json b/public/r/button-23.json
new file mode 100644
index 0000000..8982f81
--- /dev/null
+++ b/public/r/button-23.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-23",
+ "type": "registry:component",
+ "title": "Button 23",
+ "description": "Save button with a floppy disk icon and soft blue background for non-intrusive actions.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-23.tsx",
+ "content": "import { SaveIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonSaveDemo = () => {\n return (\n \n \n Save\n \n )\n}\n\nexport default ButtonSaveDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-23.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-24.json b/public/r/button-24.json
new file mode 100644
index 0000000..8649f19
--- /dev/null
+++ b/public/r/button-24.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-24",
+ "type": "registry:component",
+ "title": "Button 24",
+ "description": "Action buttons styled for “Reject” and “Approve” with colored shield icons to indicate decision-based actions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-24.tsx",
+ "content": "import { ShieldCheckIcon, ShieldXIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonPermissionsDemo = () => {\n return (\n \n \n Reject\n \n \n \n Approve\n \n \n
\n )\n}\n\nexport default ButtonPermissionsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-24.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-25.json b/public/r/button-25.json
new file mode 100644
index 0000000..bbe33a9
--- /dev/null
+++ b/public/r/button-25.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-25",
+ "type": "registry:component",
+ "title": "Button 25",
+ "description": "Notifications button with bell icon and red notification badge counter",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-25.tsx",
+ "content": "import { BellIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\n\nconst ButtonNotificationsBadgeDemo = () => {\n return (\n \n \n Notifications\n \n 8\n \n \n )\n}\n\nexport default ButtonNotificationsBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-25.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-26.json b/public/r/button-26.json
new file mode 100644
index 0000000..4faa119
--- /dev/null
+++ b/public/r/button-26.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-26",
+ "type": "registry:component",
+ "title": "Button 26",
+ "description": "Promise-based button with loading spinner and success/error state transitions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-26.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { LoaderCircleIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nimport { cn } from '@/lib/utils'\n\nconst ButtonPromiseDemo = () => {\n const [isLoading, setIsLoading] = useState(false)\n const [status, setStatus] = useState(undefined)\n\n const handleClick = async () => {\n setIsLoading(true)\n setStatus(undefined)\n\n try {\n await new Promise(resolve => setTimeout(resolve, 1000))\n\n setStatus(Math.random() > 0.5 ? 'Submitted!' : 'Rejected!')\n } catch (error) {\n setStatus('Rejected!')\n console.error(error)\n } finally {\n setIsLoading(false)\n }\n }\n\n return (\n \n {isLoading ? (\n <>\n \n Loading\n >\n ) : status ? (\n status\n ) : (\n 'Click me'\n )}\n \n )\n}\n\nexport default ButtonPromiseDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-26.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-27.json b/public/r/button-27.json
new file mode 100644
index 0000000..574c5ea
--- /dev/null
+++ b/public/r/button-27.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-27",
+ "type": "registry:component",
+ "title": "Button 27",
+ "description": "User profile button with avatar image and username display",
+ "registryDependencies": [
+ "avatar",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-27.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\n\nconst ButtonAvatarDemo = () => {\n return (\n \n \n \n HR \n \n @hallierichards\n \n )\n}\n\nexport default ButtonAvatarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-27.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-28.json b/public/r/button-28.json
new file mode 100644
index 0000000..5b516cf
--- /dev/null
+++ b/public/r/button-28.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-28",
+ "type": "registry:component",
+ "title": "Button 28",
+ "description": "Copy button with state transition animation between copy and check icons",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-28.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CheckIcon, CopyIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nimport { cn } from '@/lib/utils'\n\nconst ButtonCopyStateDemo = () => {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText('Thank you for using Shadcn Studio!')\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n } catch (err) {\n console.error('Failed to copy text: ', err)\n }\n }\n\n return (\n \n \n \n \n \n \n \n {copied ? 'Copied!' : 'Copy'}\n \n )\n}\n\nexport default ButtonCopyStateDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-28.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-29.json b/public/r/button-29.json
new file mode 100644
index 0000000..7c0b5cf
--- /dev/null
+++ b/public/r/button-29.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-29",
+ "type": "registry:component",
+ "title": "Button 29",
+ "description": "Social media icon buttons for Google, X/Twitter, Facebook, and GitHub",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-29.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonSocialIconsDemo = () => {\n return (\n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n )\n}\n\nexport default ButtonSocialIconsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-29.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-30.json b/public/r/button-30.json
new file mode 100644
index 0000000..8e47fb4
--- /dev/null
+++ b/public/r/button-30.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-30",
+ "type": "registry:component",
+ "title": "Button 30",
+ "description": "Social authentication buttons with branded colors and \"Continue with\" text",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-30.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonSocialDemo = () => {\n return (\n \n
\n \n Continue with Google \n \n
\n \n Continue with X \n \n
\n \n Continue with Facebook \n \n
\n \n Continue with GitHub \n \n
\n )\n}\n\nexport default ButtonSocialDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-30.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-31.json b/public/r/button-31.json
new file mode 100644
index 0000000..1a5edff
--- /dev/null
+++ b/public/r/button-31.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-31",
+ "type": "registry:component",
+ "title": "Button 31",
+ "description": "Icon-only button with bookmark icon and screen reader accessibility",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-31.tsx",
+ "content": "import { BookmarkIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst IconButtonDemo = () => {\n return (\n \n \n Bookmark \n \n )\n}\n\nexport default IconButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-31.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-32.json b/public/r/button-32.json
new file mode 100644
index 0000000..b137c72
--- /dev/null
+++ b/public/r/button-32.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-32",
+ "type": "registry:component",
+ "title": "Button 32",
+ "description": "Circular icon button with plus icon and tooltip for enhanced UX",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-32.tsx",
+ "content": "import { PlusIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst IconButtonTooltipDemo = () => {\n return (\n \n \n \n \n Add new item \n \n \n Add new item \n \n )\n}\n\nexport default IconButtonTooltipDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-32.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-33.json b/public/r/button-33.json
new file mode 100644
index 0000000..1e5d0a5
--- /dev/null
+++ b/public/r/button-33.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-33",
+ "type": "registry:component",
+ "title": "Button 33",
+ "description": "Toggle icon button that switches between menu and close icons",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-33.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { MenuIcon, XIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst IconButtonToggleDemo = () => {\n const [isOpen, setIsOpen] = useState(false)\n\n return (\n setIsOpen(!isOpen)} aria-label='Toggle menu'>\n {isOpen ? : }\n \n )\n}\n\nexport default IconButtonToggleDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-33.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-34.json b/public/r/button-34.json
new file mode 100644
index 0000000..de52dbe
--- /dev/null
+++ b/public/r/button-34.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-34",
+ "type": "registry:component",
+ "title": "Button 34",
+ "description": "Theme toggle button switching between sun and moon icons with colored styling",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-34.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { SunIcon, MoonIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nimport { cn } from '@/lib/utils'\n\nconst IconButtonModeDemo = () => {\n const [isDark, setIsDark] = useState(false)\n\n return (\n setIsDark(!isDark)}\n aria-label='Toggle dark mode'\n className={cn(\n isDark\n ? 'border-sky-600 text-sky-600! hover:bg-sky-600/10 focus-visible:border-sky-600 focus-visible:ring-sky-600/20 dark:border-sky-400 dark:text-sky-400! dark:hover:bg-sky-400/10 dark:focus-visible:border-sky-400 dark:focus-visible:ring-sky-400/40'\n : 'border-amber-600 text-amber-600! hover:bg-amber-600/10 focus-visible:border-amber-600 focus-visible:ring-amber-600/20 dark:border-amber-400 dark:text-amber-400! dark:hover:bg-amber-400/10 dark:focus-visible:border-amber-400 dark:focus-visible:ring-amber-400/40'\n )}\n >\n {isDark ? : }\n \n )\n}\n\nexport default IconButtonModeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-34.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-35.json b/public/r/button-35.json
new file mode 100644
index 0000000..cbc298a
--- /dev/null
+++ b/public/r/button-35.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-35",
+ "type": "registry:component",
+ "title": "Button 35",
+ "description": "Mail icon button with notification badge counter for unread messages",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-35.tsx",
+ "content": "import { MailCheckIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\n\nconst IconButtonBadgeDemo = () => {\n return (\n \n \n Messages \n \n 8\n \n \n )\n}\n\nexport default IconButtonBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-35.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-36.json b/public/r/button-36.json
new file mode 100644
index 0000000..5609781
--- /dev/null
+++ b/public/r/button-36.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-36",
+ "type": "registry:component",
+ "title": "Button 36",
+ "description": "Security icon button with destructive gradient background effect",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-36.tsx",
+ "content": "import { ShieldAlertIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst IconButtonGradientDemo = () => {\n return (\n \n \n Security \n \n )\n}\n\nexport default IconButtonGradientDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-36.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-37.json b/public/r/button-37.json
new file mode 100644
index 0000000..e7ec710
--- /dev/null
+++ b/public/r/button-37.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-37",
+ "type": "registry:component",
+ "title": "Button 37",
+ "description": "Success icon button with soft green background and check icon",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-37.tsx",
+ "content": "import { CheckCheckIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst IconButtonSoftDemo = () => {\n return (\n \n \n Check \n \n )\n}\n\nexport default IconButtonSoftDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-37.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-38.json b/public/r/button-38.json
new file mode 100644
index 0000000..064bbd5
--- /dev/null
+++ b/public/r/button-38.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-38",
+ "type": "registry:component",
+ "title": "Button 38",
+ "description": "Notification icon button with animated blue dot indicator",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-38.tsx",
+ "content": "import { BellIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst IconButtonNotificationDotDemo = () => {\n return (\n \n \n \n Notifications \n \n )\n}\n\nexport default IconButtonNotificationDotDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-38.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-39.json b/public/r/button-39.json
new file mode 100644
index 0000000..0e76832
--- /dev/null
+++ b/public/r/button-39.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-39",
+ "type": "registry:component",
+ "title": "Button 39",
+ "description": "Animated button with ripple effect on click",
+ "dependencies": [
+ "class-variance-authority",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-39.tsx",
+ "content": "import { RippleButton } from '@/components/ui/ripple-button'\n\nconst ButtonRippleEffectDemo = () => {\n return Ripple Effect \n}\n\nexport default ButtonRippleEffectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-39.tsx"
+ },
+ {
+ "path": "src/components/ui/ripple-button.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { motion, type HTMLMotionProps, type Transition } from 'motion/react'\nimport type { VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { buttonVariants } from '@/components/ui/button'\n\ninterface Ripple {\n id: number\n x: number\n y: number\n}\n\ninterface RippleButtonProps extends HTMLMotionProps<'button'>, VariantProps {\n children: React.ReactNode\n scale?: number\n transition?: Transition\n}\n\nfunction RippleButton({\n ref,\n children,\n onClick,\n className,\n variant,\n size,\n scale = 10,\n transition = { duration: 0.6, ease: 'easeOut' },\n ...props\n}: RippleButtonProps) {\n const [ripples, setRipples] = React.useState([])\n const buttonRef = React.useRef(null)\n\n React.useImperativeHandle(ref, () => buttonRef.current as HTMLButtonElement)\n\n const createRipple = React.useCallback((event: React.MouseEvent) => {\n const button = buttonRef.current\n\n if (!button) return\n\n const rect = button.getBoundingClientRect()\n const x = event.clientX - rect.left\n const y = event.clientY - rect.top\n\n const newRipple: Ripple = {\n id: Date.now(),\n x,\n y\n }\n\n setRipples(prev => [...prev, newRipple])\n\n setTimeout(() => {\n setRipples(prev => prev.filter(r => r.id !== newRipple.id))\n }, 600)\n }, [])\n\n const handleClick = React.useCallback(\n (event: React.MouseEvent) => {\n createRipple(event)\n\n if (onClick) {\n onClick(event)\n }\n },\n [createRipple, onClick]\n )\n\n return (\n \n {children}\n {ripples.map(ripple => (\n \n ))}\n \n )\n}\n\nexport { RippleButton, type RippleButtonProps }\n",
+ "type": "registry:ui",
+ "target": "components/ui/ripple-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-40.json b/public/r/button-40.json
new file mode 100644
index 0000000..784f86a
--- /dev/null
+++ b/public/r/button-40.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-40",
+ "type": "registry:component",
+ "title": "Button 40",
+ "description": "Button with ring hover effect that shows animated border on hover",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-40.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonRingHoverDemo = () => {\n return (\n \n Ring Hover\n \n )\n}\n\nexport default ButtonRingHoverDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-40.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-41.json b/public/r/button-41.json
new file mode 100644
index 0000000..33ab2ab
--- /dev/null
+++ b/public/r/button-41.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-41",
+ "type": "registry:component",
+ "title": "Button 41",
+ "description": "Button with shine hover effect using gradient animation",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-41.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonShineHoverDemo = () => {\n return (\n \n Shine Hover\n \n )\n}\n\nexport default ButtonShineHoverDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-41.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-42.json b/public/r/button-42.json
new file mode 100644
index 0000000..ac7fa48
--- /dev/null
+++ b/public/r/button-42.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-42",
+ "type": "registry:component",
+ "title": "Button 42",
+ "description": "Button with tap scale animation using Framer Motion",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-42.tsx",
+ "content": "import * as motion from 'motion/react-client'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonTapAnimationDemo = () => {\n return (\n \n Tap Animation \n \n )\n}\n\nexport default ButtonTapAnimationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-42.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-43.json b/public/r/button-43.json
new file mode 100644
index 0000000..e9ab11e
--- /dev/null
+++ b/public/r/button-43.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-43",
+ "type": "registry:component",
+ "title": "Button 43",
+ "description": "Button with shimmer effect animation across the surface",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-43.tsx",
+ "content": "import { ShimmerButton } from '@/components/ui/shimmer-button'\n\nconst ButtonShimmerEffectDemo = () => {\n return Shimmer Button \n}\n\nexport default ButtonShimmerEffectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-43.tsx"
+ },
+ {
+ "path": "src/components/ui/shimmer-button.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { motion, type HTMLMotionProps } from 'motion/react'\n\nimport { cn } from '@/lib/utils'\n\ninterface ShimmerButtonProps extends HTMLMotionProps<'button'> {\n children: React.ReactNode\n}\n\nfunction ShimmerButton({ children, className, ...props }: ShimmerButtonProps) {\n return (\n \n \n {children}\n \n \n )\n}\n\nexport { ShimmerButton, type ShimmerButtonProps }\n",
+ "type": "registry:ui",
+ "target": "components/ui/shimmer-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-44.json b/public/r/button-44.json
new file mode 100644
index 0000000..7a5d1df
--- /dev/null
+++ b/public/r/button-44.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-44",
+ "type": "registry:component",
+ "title": "Button 44",
+ "description": "Button with bounce hover effect on mouse interaction",
+ "dependencies": [
+ "class-variance-authority",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-44.tsx",
+ "content": "import { BounceButton } from '@/components/ui/bounce-button'\n\nconst ButtonBounceHoverDemo = () => {\n return Bounce Button \n}\n\nexport default ButtonBounceHoverDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-44.tsx"
+ },
+ {
+ "path": "src/components/ui/bounce-button.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { motion, type HTMLMotionProps } from 'motion/react'\nimport type { VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { buttonVariants } from '@/components/ui/button'\n\ninterface BounceButtonProps extends HTMLMotionProps<'button'>, VariantProps {\n children: React.ReactNode\n}\n\nfunction BounceButton({ children, className, size, variant, ...props }: BounceButtonProps) {\n return (\n \n {children}\n \n )\n}\n\nexport { BounceButton, type BounceButtonProps }\n",
+ "type": "registry:ui",
+ "target": "components/ui/bounce-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-45.json b/public/r/button-45.json
new file mode 100644
index 0000000..6186127
--- /dev/null
+++ b/public/r/button-45.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-45",
+ "type": "registry:component",
+ "title": "Button 45",
+ "description": "Button with magnetic effect that follows mouse movement",
+ "dependencies": [
+ "class-variance-authority",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-45.tsx",
+ "content": "import { MagneticButton } from '@/components/ui/magnetic-button'\n\nconst ButtonMagneticEffectDemo = () => {\n return Magnetic Button \n}\n\nexport default ButtonMagneticEffectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-45.tsx"
+ },
+ {
+ "path": "src/components/ui/magnetic-button.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { motion, type HTMLMotionProps, type Transition } from 'motion/react'\nimport type { VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { buttonVariants } from '@/components/ui/button'\n\ninterface Position {\n x: number\n y: number\n}\n\ninterface MagneticButtonProps extends HTMLMotionProps<'button'>, VariantProps {\n children: React.ReactNode\n scale?: number\n transition?: Transition\n}\n\nfunction MagneticButton({ children, className, size, variant, ...props }: MagneticButtonProps) {\n const ref = React.useRef(null)\n const [position, setPosition] = React.useState({ x: 0, y: 0 })\n\n const handleMouse = (e: React.MouseEvent) => {\n if (ref.current) {\n const { clientX, clientY } = e\n const { height, width, left, top } = ref.current.getBoundingClientRect()\n const middleX = clientX - (left + width / 2)\n const middleY = clientY - (top + height / 2)\n\n setPosition({ x: middleX, y: middleY })\n }\n }\n\n const reset = () => {\n setPosition({ x: 0, y: 0 })\n }\n\n const { x, y } = position\n\n return (\n \n {children}\n \n )\n}\n\nexport { MagneticButton, type MagneticButtonProps }\n",
+ "type": "registry:ui",
+ "target": "components/ui/magnetic-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-46.json b/public/r/button-46.json
new file mode 100644
index 0000000..fe70758
--- /dev/null
+++ b/public/r/button-46.json
@@ -0,0 +1,43 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-46",
+ "type": "registry:component",
+ "title": "Button 46",
+ "description": "Destructive button with heartbeat pulse animation effect",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-46.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonHeartbeatEffectDemo = () => {\n return (\n \n Heartbeat Effect\n \n )\n}\n\nexport default ButtonHeartbeatEffectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-46.tsx"
+ }
+ ],
+ "cssVars": {
+ "theme": {
+ "animate-heartbeat": "heartbeat 2s infinite ease-in-out"
+ }
+ },
+ "css": {
+ "@keyframes heartbeat": {
+ "0%": {
+ "box-shadow": "0 0 0 0 var(--heartbeat-color, var(--destructive))",
+ "transform": "scale(1)"
+ },
+ "50%": {
+ "box-shadow": "0 0 0 7px transparent",
+ "transform": "scale(1.05)"
+ },
+ "100%": {
+ "box-shadow": "0 0 0 0 transparent",
+ "transform": "scale(1)"
+ }
+ }
+ },
+ "meta": {
+ "isAnimated": true,
+ "badge": "Updated"
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-47.json b/public/r/button-47.json
new file mode 100644
index 0000000..05a8c4f
--- /dev/null
+++ b/public/r/button-47.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-47",
+ "type": "registry:component",
+ "title": "Button 47",
+ "description": "Button with stitched border design using layered shadow effects",
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-47.tsx",
+ "content": "const ButtonStitchesDemo = () => {\n return (\n \n \n \n Stitches Button\n \n )\n}\n\nexport default ButtonStitchesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-47.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-group-01.json b/public/r/button-group-01.json
new file mode 100644
index 0000000..1ef7108
--- /dev/null
+++ b/public/r/button-group-01.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-01",
+ "type": "registry:component",
+ "title": "Button Group 1",
+ "description": "Download button group with action button and download count display",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-01.tsx",
+ "content": "import { DownloadIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupDownloadDemo = () => {\n return (\n \n \n \n Download\n \n \n 15k\n \n
\n )\n}\n\nexport default ButtonGroupDownloadDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-02.json b/public/r/button-group-02.json
new file mode 100644
index 0000000..ee0f165
--- /dev/null
+++ b/public/r/button-group-02.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-02",
+ "type": "registry:component",
+ "title": "Button Group 2",
+ "description": "Interactive like button group with toggle state and dynamic count",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-02.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { HeartIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nimport { cn } from '@/lib/utils'\n\nconst ButtonGroupLikeDemo = () => {\n const [isLiked, setIsLiked] = useState(true)\n\n return (\n \n setIsLiked(!isLiked)}\n >\n \n Like\n \n \n {isLiked ? 46 : 45}\n \n
\n )\n}\n\nexport default ButtonGroupLikeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-03.json b/public/r/button-group-03.json
new file mode 100644
index 0000000..c5e3189
--- /dev/null
+++ b/public/r/button-group-03.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-03",
+ "type": "registry:component",
+ "title": "Button Group 3",
+ "description": "Toolbar button group with tooltips for design tools and actions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-03.tsx",
+ "content": "import { CopyIcon, CropIcon, EllipsisVerticalIcon, MousePointerIcon, SquareIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst ButtonGroupTooltipDemo = () => {\n return (\n \n \n \n \n \n Select \n \n \n Select \n \n \n \n \n \n Shapes \n \n \n Shapes \n \n \n \n \n \n Crop \n \n \n Crop \n \n \n \n \n \n Duplicate \n \n \n Duplicate \n \n \n \n \n \n More \n \n \n More \n \n
\n )\n}\n\nexport default ButtonGroupTooltipDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-04.json b/public/r/button-group-04.json
new file mode 100644
index 0000000..5ba2780
--- /dev/null
+++ b/public/r/button-group-04.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-04",
+ "type": "registry:component",
+ "title": "Button Group 4",
+ "description": "Rounded media control button group with play, pause, and skip functions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-04.tsx",
+ "content": "import { PauseIcon, PlayIcon, SkipBackIcon, SkipForwardIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst ButtonGroupRoundedDemo = () => {\n return (\n \n
\n \n \n \n Skip Back \n \n \n Skip Back \n \n
\n \n \n \n Play \n \n \n Play \n \n
\n \n \n \n Pause \n \n \n Pause \n \n
\n \n \n \n Skip Forward \n \n \n Skip Forward \n \n
\n )\n}\n\nexport default ButtonGroupRoundedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-05.json b/public/r/button-group-05.json
new file mode 100644
index 0000000..c8a537f
--- /dev/null
+++ b/public/r/button-group-05.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-05",
+ "type": "registry:component",
+ "title": "Button Group 5",
+ "description": "Social media links button group with branded colors and hover effects",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-05.tsx",
+ "content": "import { DribbbleIcon, FacebookIcon, InstagramIcon, TwitchIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupSocialDemo = () => {\n return (\n \n )\n}\n\nexport default ButtonGroupSocialDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-06.json b/public/r/button-group-06.json
new file mode 100644
index 0000000..ae70b56
--- /dev/null
+++ b/public/r/button-group-06.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-06",
+ "type": "registry:component",
+ "title": "Button Group 6",
+ "description": "Zoom control button group with increment/decrement and percentage display",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-06.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ZoomInIcon, ZoomOutIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupZoomDemo = () => {\n const [zoom, setZoom] = useState(95)\n\n const handleZoomIn = () => {\n if (zoom < 100) {\n setZoom(zoom + 5)\n }\n }\n\n const handleZoomOut = () => {\n if (zoom > 0) {\n setZoom(zoom - 5)\n }\n }\n\n return (\n \n \n \n Zoom out \n \n \n {`${zoom}%`}\n \n \n \n Zoom in \n \n
\n )\n}\n\nexport default ButtonGroupZoomDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-07.json b/public/r/button-group-07.json
new file mode 100644
index 0000000..c856dcc
--- /dev/null
+++ b/public/r/button-group-07.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-07",
+ "type": "registry:component",
+ "title": "Button Group 7",
+ "description": "Number input button group with plus/minus controls and value display",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-07.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { MinusIcon, PlusIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupNumberDemo = () => {\n const [value, setValue] = useState(216)\n\n return (\n \n
{\n setValue(value - 1)\n }}\n >\n \n Minus \n \n
\n {`${value}px`}\n \n
{\n setValue(value + 1)\n }}\n >\n \n Plus \n \n
\n )\n}\n\nexport default ButtonGroupNumberDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-08.json b/public/r/button-group-08.json
new file mode 100644
index 0000000..5d35c51
--- /dev/null
+++ b/public/r/button-group-08.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-08",
+ "type": "registry:component",
+ "title": "Button Group 8",
+ "description": "Preview link button group with primary action and external link icon",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-08.tsx",
+ "content": "import { ExternalLinkIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupPreviewDemo = () => {\n return (\n \n )\n}\n\nexport default ButtonGroupPreviewDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-09.json b/public/r/button-group-09.json
new file mode 100644
index 0000000..0353d06
--- /dev/null
+++ b/public/r/button-group-09.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-09",
+ "type": "registry:component",
+ "title": "Button Group 9",
+ "description": "Action button group with edit, duplicate, and delete functions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-09.tsx",
+ "content": "import { CopyIcon, SquarePenIcon, Trash2Icon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupActionsDemo = () => {\n return (\n \n \n \n Edit\n \n \n \n Duplicate\n \n \n \n Delete\n \n
\n )\n}\n\nexport default ButtonGroupActionsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-10.json b/public/r/button-group-10.json
new file mode 100644
index 0000000..ece484f
--- /dev/null
+++ b/public/r/button-group-10.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-10",
+ "type": "registry:component",
+ "title": "Button Group 10",
+ "description": "Flip transformation button group with horizontal and vertical controls",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-10.tsx",
+ "content": "import { FlipHorizontalIcon, FlipVerticalIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupDemo = () => {\n return (\n \n \n \n Flip Horizontal \n \n \n \n Flip Vertical \n \n
\n )\n}\n\nexport default ButtonGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-11.json b/public/r/button-group-11.json
new file mode 100644
index 0000000..4878ff9
--- /dev/null
+++ b/public/r/button-group-11.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-11",
+ "type": "registry:component",
+ "title": "Button Group 11",
+ "description": "Git merge button group with dropdown menu for merge strategy selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-11.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst options = [\n {\n label: 'Merge pull request',\n description: 'All commits from this branch will be added to the base branch via a commit version.'\n },\n {\n label: 'Squash and merge',\n description: 'The 6 commits from this branch will be combined into one commit in the base branch.'\n },\n {\n label: 'Rebase and merge',\n description: 'The 6 commits from this branch will be rebased and added to the base branch.'\n }\n]\n\nconst ButtonGroupDropdownDemo = () => {\n const [selectedIndex, setSelectedIndex] = useState('0')\n\n return (\n \n
{options[Number(selectedIndex)].label} \n
\n \n \n \n Select option \n \n \n \n \n {options.map((option, index) => (\n \n \n {option.label} \n {option.description} \n
\n \n ))}\n \n \n \n
\n )\n}\n\nexport default ButtonGroupDropdownDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-12.json b/public/r/button-group-12.json
new file mode 100644
index 0000000..029c65a
--- /dev/null
+++ b/public/r/button-group-12.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-12",
+ "type": "registry:component",
+ "title": "Button Group 12",
+ "description": "Ghost variant button group for navigation between settings, dashboard, and analytics",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-12.tsx",
+ "content": "import { BoxIcon, ChartBarBigIcon, SettingsIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupGhostDemo = () => {\n return (\n \n \n \n Settings\n \n \n \n Dashboard\n \n \n \n Analytics\n \n
\n )\n}\n\nexport default ButtonGroupGhostDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/button-group-13.json b/public/r/button-group-13.json
new file mode 100644
index 0000000..a55c431
--- /dev/null
+++ b/public/r/button-group-13.json
@@ -0,0 +1,33 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-13",
+ "type": "registry:component",
+ "title": "Button Group 13",
+ "description": "Email action button group with ripple animation effects",
+ "dependencies": [
+ "class-variance-authority",
+ "lucide-react",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-13.tsx",
+ "content": "import { ArchiveIcon, InboxIcon, SendHorizonalIcon } from 'lucide-react'\n\nimport { RippleButton } from '@/components/ui/ripple-button'\n\nconst ButtonGroupRippleDemo = () => {\n return (\n \n
\n \n Inbox\n \n
\n \n Archived\n \n
\n \n Sent\n \n
\n )\n}\n\nexport default ButtonGroupRippleDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-13.tsx"
+ },
+ {
+ "path": "src/components/ui/ripple-button.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { motion, type HTMLMotionProps, type Transition } from 'motion/react'\nimport type { VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\nimport { buttonVariants } from '@/components/ui/button'\n\ninterface Ripple {\n id: number\n x: number\n y: number\n}\n\ninterface RippleButtonProps extends HTMLMotionProps<'button'>, VariantProps {\n children: React.ReactNode\n scale?: number\n transition?: Transition\n}\n\nfunction RippleButton({\n ref,\n children,\n onClick,\n className,\n variant,\n size,\n scale = 10,\n transition = { duration: 0.6, ease: 'easeOut' },\n ...props\n}: RippleButtonProps) {\n const [ripples, setRipples] = React.useState([])\n const buttonRef = React.useRef(null)\n\n React.useImperativeHandle(ref, () => buttonRef.current as HTMLButtonElement)\n\n const createRipple = React.useCallback((event: React.MouseEvent) => {\n const button = buttonRef.current\n\n if (!button) return\n\n const rect = button.getBoundingClientRect()\n const x = event.clientX - rect.left\n const y = event.clientY - rect.top\n\n const newRipple: Ripple = {\n id: Date.now(),\n x,\n y\n }\n\n setRipples(prev => [...prev, newRipple])\n\n setTimeout(() => {\n setRipples(prev => prev.filter(r => r.id !== newRipple.id))\n }, 600)\n }, [])\n\n const handleClick = React.useCallback(\n (event: React.MouseEvent) => {\n createRipple(event)\n\n if (onClick) {\n onClick(event)\n }\n },\n [createRipple, onClick]\n )\n\n return (\n \n {children}\n {ripples.map(ripple => (\n \n ))}\n \n )\n}\n\nexport { RippleButton, type RippleButtonProps }\n",
+ "type": "registry:ui",
+ "target": "components/ui/ripple-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-group-14.json b/public/r/button-group-14.json
new file mode 100644
index 0000000..8027fa5
--- /dev/null
+++ b/public/r/button-group-14.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-14",
+ "type": "registry:component",
+ "title": "Button Group 14",
+ "description": "Like/dislike button group with expandable hover reveal animation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-14.tsx",
+ "content": "import { ThumbsDownIcon, ThumbsUpIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupRevealDemo = () => {\n return (\n \n \n \n Like\n \n \n Dislike\n \n \n
\n )\n}\n\nexport default ButtonGroupRevealDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-14.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-group-15.json b/public/r/button-group-15.json
new file mode 100644
index 0000000..d3a5af0
--- /dev/null
+++ b/public/r/button-group-15.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-15",
+ "type": "registry:component",
+ "title": "Button Group 15",
+ "description": "Navigation button group with scale animation on press using Framer Motion",
+ "dependencies": [
+ "lucide-react",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-15.tsx",
+ "content": "import * as motion from 'motion/react-client'\n\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nconst ButtonGroupScaleDemo = () => {\n return (\n \n \n \n \n Previous\n \n \n \n \n Next\n \n \n \n
\n )\n}\n\nexport default ButtonGroupScaleDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-15.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/button-group-16.json b/public/r/button-group-16.json
new file mode 100644
index 0000000..13953cf
--- /dev/null
+++ b/public/r/button-group-16.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "button-group-16",
+ "type": "registry:component",
+ "title": "Button Group 16",
+ "description": "File action button group with animated shine/shimmer hover effect",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-16.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst ButtonGroupShineDemo = () => {\n return (\n \n \n Upload\n \n \n Download\n \n \n Share\n \n
\n )\n}\n\nexport default ButtonGroupShineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-16.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/caffeine.json b/public/r/caffeine.json
new file mode 100644
index 0000000..aae7451
--- /dev/null
+++ b/public/r/caffeine.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "caffeine",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.24 0 0)",
+ "card": "oklch(0.99 0 0)",
+ "card-foreground": "oklch(0.24 0 0)",
+ "popover": "oklch(0.99 0 0)",
+ "popover-foreground": "oklch(0.24 0 0)",
+ "primary": "oklch(0.43 0.04 42.00)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.92 0.07 76.67)",
+ "secondary-foreground": "oklch(0.35 0.07 41.41)",
+ "muted": "oklch(0.95 0 0)",
+ "muted-foreground": "oklch(0.50 0 0)",
+ "accent": "oklch(0.93 0 0)",
+ "accent-foreground": "oklch(0.24 0 0)",
+ "destructive": "oklch(0.63 0.19 33.26)",
+ "border": "oklch(0.88 0 0)",
+ "input": "oklch(0.88 0 0)",
+ "ring": "oklch(0.43 0.04 42.00)",
+ "chart-1": "oklch(0.43 0.04 42.00)",
+ "chart-2": "oklch(0.92 0.07 76.67)",
+ "chart-3": "oklch(0.93 0 0)",
+ "chart-4": "oklch(0.94 0.05 75.02)",
+ "chart-5": "oklch(0.43 0.04 42.00)",
+ "sidebar": "oklch(0.99 0 0)",
+ "sidebar-foreground": "oklch(0.26 0 0)",
+ "sidebar-primary": "oklch(0.33 0 0)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.98 0 0)",
+ "sidebar-accent-foreground": "oklch(0.33 0 0)",
+ "sidebar-border": "oklch(0.94 0 0)",
+ "sidebar-ring": "oklch(0.77 0 0)",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.18 0 0)",
+ "foreground": "oklch(0.95 0 0)",
+ "card": "oklch(0.21 0 0)",
+ "card-foreground": "oklch(0.95 0 0)",
+ "popover": "oklch(0.21 0 0)",
+ "popover-foreground": "oklch(0.95 0 0)",
+ "primary": "oklch(0.92 0.05 67.14)",
+ "primary-foreground": "oklch(0.20 0.02 201.14)",
+ "secondary": "oklch(0.32 0.02 67.00)",
+ "secondary-foreground": "oklch(0.92 0.05 67.14)",
+ "muted": "oklch(0.25 0 0)",
+ "muted-foreground": "oklch(0.77 0 0)",
+ "accent": "oklch(0.29 0 0)",
+ "accent-foreground": "oklch(0.95 0 0)",
+ "destructive": "oklch(0.63 0.19 33.26)",
+ "border": "oklch(0.24 0.01 88.77)",
+ "input": "oklch(0.40 0 0)",
+ "ring": "oklch(0.92 0.05 67.14)",
+ "chart-1": "oklch(0.92 0.05 67.14)",
+ "chart-2": "oklch(0.32 0.02 67.00)",
+ "chart-3": "oklch(0.29 0 0)",
+ "chart-4": "oklch(0.35 0.02 67.11)",
+ "chart-5": "oklch(0.92 0.05 67.14)",
+ "sidebar": "oklch(0.21 0.01 285.56)",
+ "sidebar-foreground": "oklch(0.97 0 0)",
+ "sidebar-primary": "oklch(0.49 0.22 264.43)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.27 0.01 285.81)",
+ "sidebar-accent-foreground": "oklch(0.97 0 0)",
+ "sidebar-border": "oklch(0.27 0.01 285.81)",
+ "sidebar-ring": "oklch(0.87 0.01 286.27)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/calendar-01.json b/public/r/calendar-01.json
new file mode 100644
index 0000000..3838b7a
--- /dev/null
+++ b/public/r/calendar-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-01",
+ "type": "registry:component",
+ "title": "Calendar 1",
+ "description": "Basic single date selection calendar with default month display",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-01.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n
\n Default Month\n
\n
\n )\n}\n\nexport default CalendarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-02.json b/public/r/calendar-02.json
new file mode 100644
index 0000000..1703a55
--- /dev/null
+++ b/public/r/calendar-02.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-02",
+ "type": "registry:component",
+ "title": "Calendar 2",
+ "description": "Multi-month calendar displaying two months side by side for single date selection",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-02.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarMultiMonthDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n
\n Multi month calendar\n
\n
\n )\n}\n\nexport default CalendarMultiMonthDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-03.json b/public/r/calendar-03.json
new file mode 100644
index 0000000..c4ce38d
--- /dev/null
+++ b/public/r/calendar-03.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-03",
+ "type": "registry:component",
+ "title": "Calendar 3",
+ "description": "Single month calendar with date range selection capability",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-03.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarRangeSingleMonthDemo = () => {\n const [dateRange, setDateRange] = useState({\n from: new Date(2025, 5, 4),\n to: new Date(2025, 5, 17)\n })\n\n return (\n \n
\n
\n Single month calendar with range selection\n
\n
\n )\n}\n\nexport default CalendarRangeSingleMonthDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-04.json b/public/r/calendar-04.json
new file mode 100644
index 0000000..5c2fb3e
--- /dev/null
+++ b/public/r/calendar-04.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-04",
+ "type": "registry:component",
+ "title": "Calendar 4",
+ "description": "Multi-month calendar with date range selection across multiple months",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-04.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarRangeCalendarMultiMonthDemo = () => {\n const [dateRange, setDateRange] = useState({\n from: new Date(2025, 4, 22),\n to: new Date(2025, 5, 17)\n })\n\n return (\n \n
\n
\n Multi month calendar with range selection\n
\n
\n )\n}\n\nexport default CalendarRangeCalendarMultiMonthDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-05.json b/public/r/calendar-05.json
new file mode 100644
index 0000000..29cabe7
--- /dev/null
+++ b/public/r/calendar-05.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-05",
+ "type": "registry:component",
+ "title": "Calendar 5",
+ "description": "Range selection calendar with minimum days constraint (5 days minimum)",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-05.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarRangeWithMinimumDaysDemo = () => {\n const [dateRange, setDateRange] = useState({\n from: new Date(2025, 5, 8),\n to: new Date(2025, 5, 17)\n })\n\n return (\n \n
\n
\n Minimum 5 days selection\n
\n
\n )\n}\n\nexport default CalendarRangeWithMinimumDaysDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-06.json b/public/r/calendar-06.json
new file mode 100644
index 0000000..7d50a58
--- /dev/null
+++ b/public/r/calendar-06.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-06",
+ "type": "registry:component",
+ "title": "Calendar 6",
+ "description": "Calendar with disabled dates before a specific date for restricted selection",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-06.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarDisableDayDemo = () => {\n const [date, setDate] = useState(new Date(2025, 5, 18))\n\n return (\n \n
\n
\n Disabled day calendar\n
\n
\n )\n}\n\nexport default CalendarDisableDayDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-07.json b/public/r/calendar-07.json
new file mode 100644
index 0000000..572e3cf
--- /dev/null
+++ b/public/r/calendar-07.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-07",
+ "type": "registry:component",
+ "title": "Calendar 7",
+ "description": "Range calendar with disabled weekends for business day selection only",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-07.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarDisabledWeekendsDemo = () => {\n const [dateRange, setDateRange] = useState({\n from: new Date(2025, 5, 17),\n to: new Date(2025, 5, 20)\n })\n\n return (\n \n
\n
\n Disabled weekend calendar\n
\n
\n )\n}\n\nexport default CalendarDisabledWeekendsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-08.json b/public/r/calendar-08.json
new file mode 100644
index 0000000..3474929
--- /dev/null
+++ b/public/r/calendar-08.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-08",
+ "type": "registry:component",
+ "title": "Calendar 8",
+ "description": "Localized calendar with language switching between English and Hindi",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar",
+ "card",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-08.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\nimport { enUS, hi } from 'react-day-picker/locale'\n\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst localizedStrings = {\n en: {\n title: 'Book an appointment',\n description: 'Select the dates for your appointment'\n },\n hi: {\n title: 'अपॉइंटमेंट बुक करें',\n description: 'अपनी अपॉइंटमेंट के लिए तारीखें चुनें'\n }\n} as const\n\nexport function CalendarLocalizationDemo() {\n const [locale, setLocale] = useState('en')\n\n const [dateRange, setDateRange] = useState({\n from: new Date(2025, 8, 9),\n to: new Date(2025, 8, 17)\n })\n\n return (\n \n
\n \n {localizedStrings[locale].title} \n {localizedStrings[locale].description} \n \n setLocale(value as keyof typeof localizedStrings)}>\n \n \n \n \n Hindi \n English \n \n \n \n \n \n \n \n \n
\n Localize calendar\n
\n
\n )\n}\n\nexport default CalendarLocalizationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-09.json b/public/r/calendar-09.json
new file mode 100644
index 0000000..53fabd7
--- /dev/null
+++ b/public/r/calendar-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-09",
+ "type": "registry:component",
+ "title": "Calendar 9",
+ "description": "Calendar with month and year dropdown selectors for easy navigation",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-09.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarWithMonthYearDropdownDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n
\n Month and year dropdown calendar\n
\n
\n )\n}\n\nexport default CalendarWithMonthYearDropdownDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-10.json b/public/r/calendar-10.json
new file mode 100644
index 0000000..263deeb
--- /dev/null
+++ b/public/r/calendar-10.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-10",
+ "type": "registry:component",
+ "title": "Calendar 10",
+ "description": "Variable size calendar with responsive cell sizing for different screen sizes",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-10.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarVariableSizeDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n
\n Variable size calendar\n
\n
\n )\n}\n\nexport default CalendarVariableSizeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-11.json b/public/r/calendar-11.json
new file mode 100644
index 0000000..76bc950
--- /dev/null
+++ b/public/r/calendar-11.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-11",
+ "type": "registry:component",
+ "title": "Calendar 11",
+ "description": "Event calendar with integrated event list display and add event functionality",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-11.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { formatDateRange } from 'little-date'\nimport { PlusIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardContent, CardFooter } from '@/components/ui/card'\n\nconst events = [\n {\n title: 'Team Sync Meeting',\n from: '2025-06-12T09:00:00',\n to: '2025-06-12T10:00:00'\n },\n {\n title: 'Design Review',\n from: '2025-06-12T11:30:00',\n to: '2025-06-12T12:30:00'\n },\n {\n title: 'Client Presentation',\n from: '2025-06-12T14:00:00',\n to: '2025-06-12T15:00:00'\n }\n]\n\nconst CalendarEventListDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n \n \n \n \n \n
\n {date?.toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric'\n })}\n
\n
\n \n Add Event \n \n
\n \n {events.map(event => (\n
\n
{event.title}
\n
\n {formatDateRange(new Date(event.from), new Date(event.to))}\n
\n
\n ))}\n
\n \n \n
\n Calendar with event list\n
\n
\n )\n}\n\nexport default CalendarEventListDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-12.json b/public/r/calendar-12.json
new file mode 100644
index 0000000..dc1d6af
--- /dev/null
+++ b/public/r/calendar-12.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-12",
+ "type": "registry:component",
+ "title": "Calendar 12",
+ "description": "Multi-select calendar allowing selection of multiple individual dates",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-12.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarMultiSelectDemo = () => {\n const [dates, setDates] = useState([new Date(2025, 5, 12), new Date(2025, 5, 17)])\n\n return (\n \n
\n
\n Multi day select calendar\n
\n
\n )\n}\n\nexport default CalendarMultiSelectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-13.json b/public/r/calendar-13.json
new file mode 100644
index 0000000..a63bdf7
--- /dev/null
+++ b/public/r/calendar-13.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-13",
+ "type": "registry:component",
+ "title": "Calendar 13",
+ "description": "Custom styled calendar with sky blue theme for selected dates",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-13.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarCustomSelectDayDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n
\n Custom day select calendar\n
\n
\n )\n}\n\nexport default CalendarCustomSelectDayDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-14.json b/public/r/calendar-14.json
new file mode 100644
index 0000000..6d84ab1
--- /dev/null
+++ b/public/r/calendar-14.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-14",
+ "type": "registry:component",
+ "title": "Calendar 14",
+ "description": "Custom styled range calendar with sky blue theme for date range selection",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-14.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { type DateRange } from 'react-day-picker'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarCustomRangeSelectDemo = () => {\n const [dateRange, setDateRange] = useState({\n from: new Date(2025, 5, 4),\n to: new Date(2025, 5, 17)\n })\n\n return (\n \n
\n
\n Custom range selection calendar\n
\n
\n )\n}\n\nexport default CalendarCustomRangeSelectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-15.json b/public/r/calendar-15.json
new file mode 100644
index 0000000..5dfc6dc
--- /dev/null
+++ b/public/r/calendar-15.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-15",
+ "type": "registry:component",
+ "title": "Calendar 15",
+ "description": "Calendar with right-aligned navigation controls for alternative layout",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-15.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarRightYearMonthDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n
\n Right side month year navigation calendar\n
\n
\n )\n}\n\nexport default CalendarRightYearMonthDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-16.json b/public/r/calendar-16.json
new file mode 100644
index 0000000..9ce5279
--- /dev/null
+++ b/public/r/calendar-16.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-16",
+ "type": "registry:component",
+ "title": "Calendar 16",
+ "description": "Calendar with left-aligned navigation controls for alternative layout",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-16.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarLeftYearMonthDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n
\n Left side month year navigation calendar\n
\n
\n )\n}\n\nexport default CalendarLeftYearMonthDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-17.json b/public/r/calendar-17.json
new file mode 100644
index 0000000..4a45aed
--- /dev/null
+++ b/public/r/calendar-17.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-17",
+ "type": "registry:component",
+ "title": "Calendar 17",
+ "description": "Calendar with week numbers displayed for week-based scheduling",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-17.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar } from '@/components/ui/calendar'\n\nconst CalendarWeekNumberDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n
\n Week number calendar\n
\n
\n )\n}\n\nexport default CalendarWeekNumberDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-18.json b/public/r/calendar-18.json
new file mode 100644
index 0000000..b94b50c
--- /dev/null
+++ b/public/r/calendar-18.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-18",
+ "type": "registry:component",
+ "title": "Calendar 18",
+ "description": "Calendar with \"Today\" quick action button for fast current date selection",
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-18.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\n\nconst CalendarWithTodayMonthButtonDemo = () => {\n const [date, setDate] = useState(new Date(2025, 5, 15))\n const [month, setMonth] = useState(new Date())\n\n return (\n \n
\n \n Book the show \n Find a date \n \n {\n setMonth(new Date())\n setDate(new Date())\n }}\n >\n Today\n \n \n \n \n \n \n \n
\n Calendar with today button\n
\n
\n )\n}\n\nexport default CalendarWithTodayMonthButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-19.json b/public/r/calendar-19.json
new file mode 100644
index 0000000..c6e39f6
--- /dev/null
+++ b/public/r/calendar-19.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-19",
+ "type": "registry:component",
+ "title": "Calendar 19",
+ "description": "Calendar with synchronized date input field for manual date entry",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "calendar",
+ "card",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-19.tsx",
+ "content": "'use client'\n\nimport { useEffect, useId, useState } from 'react'\n\nimport { format } from 'date-fns'\nimport { CalendarIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardContent, CardHeader } from '@/components/ui/card'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst CalendarWithDateInput = () => {\n const id = useId()\n const today = new Date()\n const [month, setMonth] = useState(today)\n const [date, setDate] = useState(today)\n const [inputValue, setInputValue] = useState('')\n\n const handleDayPickerSelect = (date: Date | undefined) => {\n if (!date) {\n setInputValue('')\n setDate(undefined)\n } else {\n setDate(date)\n setMonth(date)\n setInputValue(format(date, 'yyyy-MM-dd'))\n }\n }\n\n const handleInputChange = (e: React.ChangeEvent) => {\n const value = e.target.value\n\n setInputValue(value)\n\n if (value) {\n const parsedDate = new Date(value)\n\n setDate(parsedDate)\n setMonth(parsedDate)\n } else {\n setDate(undefined)\n }\n }\n\n useEffect(() => {\n setInputValue(format(today, 'yyyy-MM-dd'))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n \n
\n \n \n Enter date\n \n \n \n \n \n \n \n
\n Calendar with date input\n
\n
\n )\n}\n\nexport default CalendarWithDateInput\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-20.json b/public/r/calendar-20.json
new file mode 100644
index 0000000..b5c33ad
--- /dev/null
+++ b/public/r/calendar-20.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-20",
+ "type": "registry:component",
+ "title": "Calendar 20",
+ "description": "Calendar with integrated time input for complete datetime selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "calendar",
+ "card",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-20.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { ClockIcon } from 'lucide-react'\n\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardContent, CardHeader } from '@/components/ui/card'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst CalendarWithTimeInput = () => {\n const id = useId()\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n \n \n Enter time\n \n \n \n \n \n \n \n
\n Calendar with time input\n
\n
\n )\n}\n\nexport default CalendarWithTimeInput\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-21.json b/public/r/calendar-21.json
new file mode 100644
index 0000000..0f4d91b
--- /dev/null
+++ b/public/r/calendar-21.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-21",
+ "type": "registry:component",
+ "title": "Calendar 21",
+ "description": "Advanced calendar with collapsible year/month selection and custom navigation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "collapsible",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-21.tsx",
+ "content": "'use client'\n\nimport { useEffect, useRef, useState } from 'react'\n\nimport { eachMonthOfInterval, eachYearOfInterval, endOfYear, format, isAfter, isBefore, startOfYear } from 'date-fns'\nimport { ChevronDownIcon } from 'lucide-react'\nimport type { CaptionLabelProps, MonthGridProps } from 'react-day-picker'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\nimport { ScrollArea } from '@/components/ui/scroll-area'\n\nconst CalendarWithAdvanceSelectionDemo = () => {\n const today = new Date()\n const [month, setMonth] = useState(today)\n const [date, setDate] = useState(today)\n const [isYearView, setIsYearView] = useState(false)\n const startDate = new Date(1980, 6)\n const endDate = new Date(2030, 6)\n\n const years = eachYearOfInterval({\n start: startOfYear(startDate),\n end: endOfYear(endDate)\n })\n\n return (\n \n
(\n \n ),\n MonthGrid: (props: MonthGridProps) => {\n return (\n {\n setMonth(selectedMonth)\n setIsYearView(false)\n }}\n >\n {props.children}\n \n )\n }\n }}\n />\n \n Calendar with advance selection{' '}\n \n Origin UI\n \n
\n \n )\n}\n\nfunction MonthGrid({\n className,\n children,\n isYearView,\n startDate,\n endDate,\n years,\n currentYear,\n currentMonth,\n onMonthSelect\n}: {\n className?: string\n children: React.ReactNode\n isYearView: boolean\n setIsYearView: React.Dispatch>\n startDate: Date\n endDate: Date\n years: Date[]\n currentYear: number\n currentMonth: number\n onMonthSelect: (date: Date) => void\n}) {\n const currentYearRef = useRef(null)\n const currentMonthButtonRef = useRef(null)\n const scrollAreaRef = useRef(null)\n\n useEffect(() => {\n if (isYearView && currentYearRef.current && scrollAreaRef.current) {\n const viewport = scrollAreaRef.current.querySelector('[data-radix-scroll-area-viewport]') as HTMLElement\n\n if (viewport) {\n const yearTop = currentYearRef.current.offsetTop\n\n viewport.scrollTop = yearTop\n }\n\n setTimeout(() => {\n currentMonthButtonRef.current?.focus()\n }, 100)\n }\n }, [isYearView])\n\n return (\n \n
\n {isYearView && (\n
\n
\n {years.map(year => {\n const months = eachMonthOfInterval({\n start: startOfYear(year),\n end: endOfYear(year)\n })\n\n const isCurrentYear = year.getFullYear() === currentYear\n\n return (\n \n
\n \n {months.map(month => {\n const isDisabled = isBefore(month, startDate) || isAfter(month, endDate)\n const isCurrentMonth = month.getMonth() === currentMonth && year.getFullYear() === currentYear\n\n return (\n onMonthSelect(month)}\n >\n {format(month, 'MMM')}\n \n )\n })}\n
\n \n
\n )\n })}\n \n
\n )}\n
\n )\n}\n\nfunction CaptionLabel({\n children,\n isYearView,\n setIsYearView\n}: {\n isYearView: boolean\n setIsYearView: React.Dispatch>\n} & React.HTMLAttributes) {\n return (\n setIsYearView(prev => !prev)}\n data-state={isYearView ? 'open' : 'closed'}\n >\n {children}\n \n \n )\n}\n\nfunction CollapsibleYear({ title, children, open }: { title: string; children: React.ReactNode; open?: boolean }) {\n return (\n \n \n \n \n {title}\n \n \n \n {children}\n \n \n )\n}\n\nexport default CalendarWithAdvanceSelectionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-22.json b/public/r/calendar-22.json
new file mode 100644
index 0000000..f3a5b59
--- /dev/null
+++ b/public/r/calendar-22.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-22",
+ "type": "registry:component",
+ "title": "Calendar 22",
+ "description": "Calendar with preset date shortcuts (Today, Yesterday, Tomorrow, in 3 days, in a week, etc.)",
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-22.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { addDays } from 'date-fns'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardContent, CardFooter } from '@/components/ui/card'\n\nconst CalendarWithPresetsDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
\n \n \n \n \n {[\n { label: 'Today', value: 0 },\n { label: 'Yesterday', value: -1 },\n { label: 'Tomorrow', value: 1 },\n { label: 'In 3 days', value: 3 },\n { label: 'In a week', value: 7 },\n { label: 'In 2 weeks', value: 14 }\n ].map(preset => (\n {\n const newDate = addDays(new Date(), preset.value)\n\n setDate(newDate)\n }}\n >\n {preset.label}\n \n ))}\n \n \n
\n Calendar with presets\n
\n
\n )\n}\n\nexport default CalendarWithPresetsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-22.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-23.json b/public/r/calendar-23.json
new file mode 100644
index 0000000..570a06f
--- /dev/null
+++ b/public/r/calendar-23.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-23",
+ "type": "registry:component",
+ "title": "Calendar 23",
+ "description": "Range calendar with preset date range shortcuts (Last week, month, year, etc.)",
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-23.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport {\n endOfMonth,\n endOfYear,\n startOfMonth,\n startOfYear,\n subDays,\n subMonths,\n subYears,\n addDays,\n addMonths\n} from 'date-fns'\nimport type { DateRange } from 'react-day-picker'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardContent, CardFooter } from '@/components/ui/card'\n\nconst CalendarWithRangePresetsDemo = () => {\n const today = new Date()\n\n const yesterday = {\n from: subDays(today, 1),\n to: subDays(today, 1)\n }\n\n const tomorrow = {\n from: today,\n to: addDays(today, 1)\n }\n\n const last7Days = {\n from: subDays(today, 6),\n to: today\n }\n\n const next7Days = {\n from: addDays(today, 1),\n to: addDays(today, 7)\n }\n\n const last30Days = {\n from: subDays(today, 29),\n to: today\n }\n\n const monthToDate = {\n from: startOfMonth(today),\n to: today\n }\n\n const lastMonth = {\n from: startOfMonth(subMonths(today, 1)),\n to: endOfMonth(subMonths(today, 1))\n }\n\n const nextMonth = {\n from: startOfMonth(addMonths(today, 1)),\n to: endOfMonth(addMonths(today, 1))\n }\n\n const yearToDate = {\n from: startOfYear(today),\n to: today\n }\n\n const lastYear = {\n from: startOfYear(subYears(today, 1)),\n to: endOfYear(subYears(today, 1))\n }\n\n const [month, setMonth] = useState(today)\n const [date, setDate] = useState(last7Days)\n\n return (\n \n
\n \n {\n if (newDate) {\n setDate(newDate)\n }\n }}\n month={month}\n onMonthChange={setMonth}\n className='w-full bg-transparent p-0'\n />\n \n \n {\n setDate({\n from: today,\n to: today\n })\n setMonth(today)\n }}\n >\n Today\n \n {\n setDate(yesterday)\n setMonth(yesterday.to)\n }}\n >\n Yesterday\n \n {\n setDate(tomorrow)\n setMonth(tomorrow.to)\n }}\n >\n Tomorrow\n \n {\n setDate(last7Days)\n setMonth(last7Days.to)\n }}\n >\n Last 7 days\n \n {\n setDate(next7Days)\n setMonth(next7Days.to)\n }}\n >\n Next 7 days\n \n {\n setDate(last30Days)\n setMonth(last30Days.to)\n }}\n >\n Last 30 days\n \n {\n setDate(monthToDate)\n setMonth(monthToDate.to)\n }}\n >\n Month to date\n \n {\n setDate(lastMonth)\n setMonth(lastMonth.to)\n }}\n >\n Last month\n \n {\n setDate(nextMonth)\n setMonth(nextMonth.to)\n }}\n >\n Next month\n \n {\n setDate(yearToDate)\n setMonth(yearToDate.to)\n }}\n >\n Year to date\n \n {\n setDate(lastYear)\n setMonth(lastYear.to)\n }}\n >\n Last year\n \n \n \n
\n Range calendar with presets\n
\n
\n )\n}\n\nexport default CalendarWithRangePresetsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-23.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-24.json b/public/r/calendar-24.json
new file mode 100644
index 0000000..d09189b
--- /dev/null
+++ b/public/r/calendar-24.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-24",
+ "type": "registry:component",
+ "title": "Calendar 24",
+ "description": "Appointment booking calendar with time slot selection and availability indicators",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-24.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CircleCheckIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'\nimport { ScrollArea } from '@/components/ui/scroll-area'\n\nconst CalendarAppointmentBookingDemo = () => {\n const [date, setDate] = useState(new Date(2025, 5, 20))\n const [selectedTime, setSelectedTime] = useState('10:00')\n\n const timeSlots = Array.from({ length: 37 }, (_, i) => {\n const totalMinutes = i * 15\n const hour = Math.floor(totalMinutes / 60) + 9\n const minute = totalMinutes % 60\n\n return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`\n })\n\n const bookedDates = Array.from({ length: 3 }, (_, i) => new Date(2025, 5, 17 + i))\n\n return (\n \n
\n \n Book your appointment \n \n \n \n button]:line-through opacity-100'\n }}\n className='bg-transparent p-0 [--cell-size:--spacing(10)]'\n formatters={{\n formatWeekdayName: date => {\n return date.toLocaleString('en-US', { weekday: 'short' })\n }\n }}\n />\n
\n \n
\n \n {timeSlots.map(time => (\n setSelectedTime(time)}\n className='w-full shadow-none'\n >\n {time}\n \n ))}\n
\n \n
\n \n \n \n {date && selectedTime ? (\n <>\n \n \n Your meeting is booked for{' '}\n \n {' '}\n {date?.toLocaleDateString('en-US', {\n weekday: 'long',\n day: 'numeric',\n month: 'long'\n })}{' '}\n \n at {selectedTime} .\n \n >\n ) : (\n <>Select a date and time for your meeting.>\n )}\n
\n \n Continue\n \n \n \n
\n Appointment calendar\n
\n
\n )\n}\n\nexport default CalendarAppointmentBookingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-24.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/calendar-25.json b/public/r/calendar-25.json
new file mode 100644
index 0000000..9634209
--- /dev/null
+++ b/public/r/calendar-25.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "calendar-25",
+ "type": "registry:component",
+ "title": "Calendar 25",
+ "description": "Pricing calendar with dynamic price display for each date based on availability",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-25.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Calendar, CalendarDayButton } from '@/components/ui/calendar'\n\nfunction getPriceForDate(date: Date) {\n const seed = date.getFullYear() * 10000 + (date.getMonth() + 1) * 100 + date.getDate()\n\n const val = (seed * 9301 + 49297) % 233280\n\n return Math.floor(50 + (val / 233280) * 200)\n}\n\nconst CalendarPricingDemo = () => {\n const [date, setDate] = useState(new Date())\n\n return (\n \n
{\n const price = getPriceForDate(day.date)\n const isGreen = price < 100\n\n return (\n \n {children}\n {!modifiers.outside && (\n ${price} \n )}\n \n )\n }\n }}\n disabled={{ before: new Date() }}\n />\n \n Calendar with pricing\n
\n \n )\n}\n\nexport default CalendarPricingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-25.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-01.json b/public/r/card-01.json
new file mode 100644
index 0000000..2ed4dbc
--- /dev/null
+++ b/public/r/card-01.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-01",
+ "type": "registry:component",
+ "title": "Card 1",
+ "description": "Login form card with email and password inputs",
+ "registryDependencies": [
+ "button",
+ "card",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-01.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst CardDemo = () => {\n return (\n \n \n Login to your account \n Enter your email below to login to your account \n \n \n \n \n \n \n Login\n \n \n Continue with Google\n \n \n \n \n )\n}\n\nexport default CardDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-02.json b/public/r/card-02.json
new file mode 100644
index 0000000..9f7f559
--- /dev/null
+++ b/public/r/card-02.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-02",
+ "type": "registry:component",
+ "title": "Card 2",
+ "description": "Meeting notes card with team member avatars and attendee list",
+ "registryDependencies": [
+ "avatar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-02.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst CardMeetingNotesDemo = () => {\n return (\n \n \n Meeting Notes \n Transcript from the meeting with the client. \n \n \n Client requested dashboard redesign with focus on mobile responsiveness.
\n \n New analytics widgets for daily/weekly metrics \n Simplified navigation menu \n Dark mode support \n Timeline: 6 weeks \n Follow-up meeting scheduled for next Tuesday \n \n \n \n \n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n \n \n )\n}\n\nexport default CardMeetingNotesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-03.json b/public/r/card-03.json
new file mode 100644
index 0000000..2807fb0
--- /dev/null
+++ b/public/r/card-03.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-03",
+ "type": "registry:component",
+ "title": "Card 3",
+ "description": "Team invitation card with member list and invite functionality",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-03.tsx",
+ "content": "import { CircleFadingPlusIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\n\nconst CardInviteCardDemo = () => {\n return (\n \n \n Meeting Notes \n \n \n \n \n Invite Member \n
\n \n
\n \n JA \n \n
\n Jimmy Androson \n UI Designer \n
\n
\n \n
\n \n DA \n \n
\n Dean Ambrose \n UX Designer \n
\n
\n \n
\n \n HR \n \n
\n Anita John \n Branding \n
\n
\n
\n
\n \n \n )\n}\n\nexport default CardInviteCardDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-04.json b/public/r/card-04.json
new file mode 100644
index 0000000..65632a4
--- /dev/null
+++ b/public/r/card-04.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-04",
+ "type": "registry:component",
+ "title": "Card 4",
+ "description": "Image showcase card with gradient background and bottom-aligned image",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-04.tsx",
+ "content": "import { Card, CardContent, CardHeader, CardDescription, CardTitle } from '@/components/ui/card'\n\nconst CardBottomImageDemo = () => {\n return (\n \n \n Fluid Gradient Flow \n A vibrant and abstract background with smooth gradient curves. \n \n \n \n \n \n )\n}\n\nexport default CardBottomImageDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-05.json b/public/r/card-05.json
new file mode 100644
index 0000000..4e98e6e
--- /dev/null
+++ b/public/r/card-05.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-05",
+ "type": "registry:component",
+ "title": "Card 5",
+ "description": "Image showcase card with top-aligned image and action buttons",
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-05.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardHeader, CardDescription, CardTitle, CardFooter } from '@/components/ui/card'\n\nconst CardTopImageDemo = () => {\n return (\n \n \n \n \n \n Ethereal Swirl Gradient \n Smooth, flowing gradients blending rich reds and blues in an abstract swirl. \n \n \n Explore More \n Download Now \n \n \n )\n}\n\nexport default CardTopImageDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-06.json b/public/r/card-06.json
new file mode 100644
index 0000000..1530b80
--- /dev/null
+++ b/public/r/card-06.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-06",
+ "type": "registry:component",
+ "title": "Card 6",
+ "description": "Horizontal layout card with side-by-side image and content",
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-06.tsx",
+ "content": "import { Card, CardContent, CardHeader, CardDescription, CardTitle, CardFooter } from '@/components/ui/card'\nimport { Button } from '@/components/ui/button'\n\nconst CardHorizontalDemo = () => {\n return (\n \n \n \n \n \n \n Dreamy Colorwave Gradient \n A smooth blend of vibrant pinks, purples, and blues for a magical touch. \n \n \n \n Explore More\n \n \n
\n \n )\n}\n\nexport default CardHorizontalDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-07.json b/public/r/card-07.json
new file mode 100644
index 0000000..ed15a4b
--- /dev/null
+++ b/public/r/card-07.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-07",
+ "type": "registry:component",
+ "title": "Card 7",
+ "description": "Overlay card with image background and overlaid text content",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-07.tsx",
+ "content": "import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\n\nconst CardOverlayDemo = () => {\n return (\n \n \n \n \n \n \n Creative Catalyst \n \n \n Step into a world where imagination takes the lead and every pixel tells a story. This is a space designed to\n unleash your creative potential without boundaries or time constraints. Explore bold ideas, experiment with\n vibrant concepts, and craft visuals that inspire and captivate.\n \n
\n \n )\n}\n\nexport default CardOverlayDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-08.json b/public/r/card-08.json
new file mode 100644
index 0000000..09c107f
--- /dev/null
+++ b/public/r/card-08.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-08",
+ "type": "registry:component",
+ "title": "Card 8",
+ "description": "Soft background card with subtle primary color theme",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-08.tsx",
+ "content": "import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\n\nconst CardSoftDemo = () => {\n return (\n \n \n Design Throwdown \n \n \n Where passion, pressure, and pixels collide—push your creativity to the edge and show what you are made of.\n \n \n )\n}\n\nexport default CardSoftDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-09.json b/public/r/card-09.json
new file mode 100644
index 0000000..9f94a05
--- /dev/null
+++ b/public/r/card-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-09",
+ "type": "registry:component",
+ "title": "Card 9",
+ "description": "Outline card with primary border and transparent background",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-09.tsx",
+ "content": "import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\n\nconst CardOutlineDemo = () => {\n return (\n \n \n Creative Clash \n \n \n Step into a space where design skills are tested, ideas come alive, and only the boldest concepts win the\n spotlight.\n \n \n )\n}\n\nexport default CardOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-10.json b/public/r/card-10.json
new file mode 100644
index 0000000..6d3c0ee
--- /dev/null
+++ b/public/r/card-10.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-10",
+ "type": "registry:component",
+ "title": "Card 10",
+ "description": "Tabbed card with integrated tabs component for organized content sections",
+ "registryDependencies": [
+ "card",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-10.tsx",
+ "content": "import { Card, CardContent } from '@/components/ui/card'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Home',\n value: 'home',\n content:\n 'Welcome to the Home tab! Here, you can explore the latest updates, news, and highlights. Stay informed about what's happening and never miss out on important announcements.'\n },\n {\n name: 'Profile',\n value: 'profile',\n content:\n 'This is your Profile tab. Manage your personal information, update your account details, and customize your settings to make your experience unique.'\n },\n {\n name: 'Messages',\n value: 'messages',\n content:\n 'Messages: Check your recent messages, start new conversations, and stay connected with your friends and contacts. Manage your chat history and keep the communication flowing.'\n }\n]\n\nconst CardWithTabsDemo = () => {\n return (\n \n \n \n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n \n \n )\n}\n\nexport default CardWithTabsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-11.json b/public/r/card-11.json
new file mode 100644
index 0000000..5d252b0
--- /dev/null
+++ b/public/r/card-11.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-11",
+ "type": "registry:component",
+ "title": "Card 11",
+ "description": "Social media post card with user profile, image, hashtags and interaction buttons",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "card",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-11.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport {\n BadgeCheckIcon,\n EllipsisIcon,\n HeartIcon,\n MessageCircleIcon,\n RepeatIcon,\n SendIcon,\n UserPlusIcon\n} from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'\n\nimport { cn } from '@/lib/utils'\n\nconst CardTweetDemo = () => {\n const [liked, setLiked] = useState(true)\n\n return (\n \n \n \n
\n \n PG \n \n
\n \n Philip George \n \n @philip20 \n
\n
\n \n \n \n Follow\n \n \n \n \n
\n \n \n \n \n Lost in the colors of the night 🌌✨ Sometimes the blur reveals more than clarity.{' '}\n \n #AbstractVibes\n {' '}\n \n #Dreamscape\n {' '}\n \n #VisualPoetry\n \n
\n \n \n setLiked(!liked)}>\n \n 2.1K\n \n \n \n 1.4K\n \n \n \n 669\n \n \n \n 1.1K\n \n \n \n )\n}\n\nexport default CardTweetDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-12.json b/public/r/card-12.json
new file mode 100644
index 0000000..ae2c6f6
--- /dev/null
+++ b/public/r/card-12.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-12",
+ "type": "registry:component",
+ "title": "Card 12",
+ "description": "Product showcase card with gradient background, like button and pricing details",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "card",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-12.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { HeartIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardHeader, CardDescription, CardTitle, CardFooter, CardContent } from '@/components/ui/card'\n\nimport { cn } from '@/lib/utils'\n\nconst CardProductDemo = () => {\n const [liked, setLiked] = useState(false)\n\n return (\n \n
\n
\n
\n
setLiked(!liked)}\n className='bg-primary/10 hover:bg-primary/20 absolute top-4 right-4 rounded-full'\n >\n \n Like \n \n
\n \n Nike Jordan Air Rev \n \n \n EU38\n \n \n Black and White\n \n \n \n \n \n Crossing hardwood comfort with off-court flair. '80s-Inspired construction, bold details and\n nothin'-but-net style.\n
\n \n \n \n Price \n $69.99 \n
\n Add to cart \n \n \n
\n )\n}\n\nexport default CardProductDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-13.json b/public/r/card-13.json
new file mode 100644
index 0000000..46b2e41
--- /dev/null
+++ b/public/r/card-13.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-13",
+ "type": "registry:component",
+ "title": "Card 13",
+ "description": "Testimonial card with user profile, star rating and highlighted text review",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-13.tsx",
+ "content": "import { StarIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Card, CardFooter, CardContent, CardTitle, CardDescription } from '@/components/ui/card'\n\nconst CardTestimonialDemo = () => {\n return (\n \n \n \n Incredible time-saver! shadcn/studio has made UI development a breeze. The pre build components are not only{' '}\n visually appealing but also highly customizable , fitting seamlessly\n into my projects. With a wide array of options to choose from, I can easily match.\n
\n \n \n \n
\n \n SG \n \n
\n Sam Green \n @SamG11 \n
\n
\n \n \n \n \n \n \n
\n \n \n )\n}\n\nexport default CardTestimonialDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-14.json b/public/r/card-14.json
new file mode 100644
index 0000000..5140fa7
--- /dev/null
+++ b/public/r/card-14.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-14",
+ "type": "registry:component",
+ "title": "Card 14",
+ "description": "Dismissible action card with close button and call-to-action content",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-14.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { XIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\n\nconst CardActionDemo = () => {\n const [isActive, setIsActive] = useState(true)\n\n if (!isActive) return null\n\n return (\n \n setIsActive(false)}\n className='absolute top-2 right-2 rounded-full'\n >\n \n Close \n \n \n Have a project in mind \n \n \n Let's discuss! Our Assistant team is excited to hear about your projects, ideas and questions.
\n Contact Our Team \n \n \n )\n}\n\nexport default CardActionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/card-15.json b/public/r/card-15.json
new file mode 100644
index 0000000..0456cf6
--- /dev/null
+++ b/public/r/card-15.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-15",
+ "type": "registry:component",
+ "title": "Card 15",
+ "description": "Connected card group with three image showcase cards arranged side by side",
+ "registryDependencies": [
+ "card",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-15.tsx",
+ "content": "import { Card, CardContent, CardHeader, CardDescription, CardTitle, CardFooter } from '@/components/ui/card'\nimport { Button } from '@/components/ui/button'\n\nconst CardGroupDemo = () => {\n return (\n \n
\n \n \n \n \n Mystical Blue Swirl \n \n Dive into the depths of an enchanting swirl where vibrant blues and soft pinks merge seamlessly, creating a\n mesmerizing flow of colors.\n \n \n \n Explore More \n Download Now \n \n \n
\n \n \n \n \n Fiery Sunset Gradient \n \n Experience the warmth of a radiant sunset with flowing gradients of red, orange, and yellow blending\n effortlessly in an abstract glow.\n \n \n \n Explore More \n Download Now \n \n \n
\n \n \n \n \n Cosmic Blue Waves \n \n Explore the mysteries of the cosmos with deep, swirling waves of blue and purple, evoking a sense of depth\n and infinite space.\n \n \n \n Explore More \n Download Now \n \n \n
\n )\n}\n\nexport default CardGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-15.tsx"
+ }
+ ],
+ "meta": {
+ "className": "col-span-full border-r-0"
+ }
+}
\ No newline at end of file
diff --git a/public/r/card-16.json b/public/r/card-16.json
new file mode 100644
index 0000000..c1e58d4
--- /dev/null
+++ b/public/r/card-16.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-16",
+ "type": "registry:component",
+ "title": "Card 16",
+ "description": "Interactive spotlight card with animated glow effect that follows mouse movement",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-16.tsx",
+ "content": "'use client'\n\nimport { useEffect } from 'react'\n\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\n\nconst CardSpotlightDemo = () => {\n useEffect(() => {\n const all = document.querySelectorAll('.spotlight-card')\n\n const handleMouseMove = (ev: MouseEvent) => {\n all.forEach(e => {\n const blob = e.querySelector('.blob') as HTMLElement\n const fblob = e.querySelector('.fake-blob') as HTMLElement\n\n if (!blob || !fblob) return\n\n const rec = fblob.getBoundingClientRect()\n\n blob.style.opacity = '1'\n\n blob.animate(\n [\n {\n transform: `translate(${\n ev.clientX - rec.left - rec.width / 2\n }px, ${ev.clientY - rec.top - rec.height / 2}px)`\n }\n ],\n {\n duration: 300,\n fill: 'forwards'\n }\n )\n })\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove)\n }\n }, [])\n\n return (\n \n
\n
\n \n Hover for the Glow-Up \n \n \n Glide your cursor here and watch magic unfold — an experience designed just for you.\n \n \n
\n
\n
\n
\n )\n}\n\nexport default CardSpotlightDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-16.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/card-17.json b/public/r/card-17.json
new file mode 100644
index 0000000..34bc8fc
--- /dev/null
+++ b/public/r/card-17.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "card-17",
+ "type": "registry:component",
+ "title": "Card 17",
+ "description": "Dynamic 3D hover card with perspective transforms and smooth depth animations",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-17.tsx",
+ "content": "'use client'\n\nimport { useEffect, useRef } from 'react'\n\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\n\ninterface CardTransform {\n rotateX: number\n rotateY: number\n scale: number\n}\n\nconst Card3dDemo = () => {\n const cardRef = useRef(null)\n const imageRef = useRef(null)\n const animationFrameRef = useRef(undefined)\n const lastMousePosition = useRef({ x: 0, y: 0 })\n\n useEffect(() => {\n const card = cardRef.current\n const image = imageRef.current\n\n if (!card || !image) return\n\n let rect: DOMRect\n let centerX: number\n let centerY: number\n\n const updateCardTransform = (mouseX: number, mouseY: number) => {\n if (!rect) {\n rect = card.getBoundingClientRect()\n centerX = rect.left + rect.width / 2\n centerY = rect.top + rect.height / 2\n }\n\n const relativeX = mouseX - centerX\n const relativeY = mouseY - centerY\n\n const cardTransform: CardTransform = {\n rotateX: -relativeY * 0.035,\n rotateY: relativeX * 0.035,\n scale: 1.025\n }\n\n const imageTransform: CardTransform = {\n rotateX: -relativeY * 0.025,\n rotateY: relativeX * 0.025,\n scale: 1.05\n }\n\n return { cardTransform, imageTransform }\n }\n\n const animate = () => {\n const { cardTransform, imageTransform } = updateCardTransform(\n lastMousePosition.current.x,\n lastMousePosition.current.y\n )\n\n card.style.transform = `perspective(1000px) rotateX(${cardTransform.rotateX}deg) rotateY(${cardTransform.rotateY}deg) scale3d(${cardTransform.scale}, ${cardTransform.scale}, ${cardTransform.scale})`\n card.style.boxShadow = '0 10px 35px rgba(0, 0, 0, 0.2)'\n\n image.style.transform = `perspective(1000px) rotateX(${imageTransform.rotateX}deg) rotateY(${imageTransform.rotateY}deg) scale3d(${imageTransform.scale}, ${imageTransform.scale}, ${imageTransform.scale})`\n\n animationFrameRef.current = requestAnimationFrame(animate)\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n lastMousePosition.current = { x: e.clientX, y: e.clientY }\n }\n\n const handleMouseEnter = () => {\n card.style.transition = 'transform 0.2s ease, box-shadow 0.2s ease'\n image.style.transition = 'transform 0.2s ease'\n animate()\n }\n\n const handleMouseLeave = () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current)\n }\n\n card.style.transform = 'perspective(1000px) rotateX(0) rotateY(0) scale3d(1, 1, 1)'\n card.style.boxShadow = 'none'\n card.style.transition = 'transform 0.5s ease, box-shadow 0.5s ease'\n\n image.style.transform = 'perspective(1000px) rotateX(0) rotateY(0) scale3d(1, 1, 1)'\n image.style.transition = 'transform 0.5s ease'\n }\n\n card.addEventListener('mouseenter', handleMouseEnter)\n card.addEventListener('mousemove', handleMouseMove)\n card.addEventListener('mouseleave', handleMouseLeave)\n\n return () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current)\n }\n\n card.removeEventListener('mouseenter', handleMouseEnter)\n card.removeEventListener('mousemove', handleMouseMove)\n card.removeEventListener('mouseleave', handleMouseLeave)\n }\n }, [])\n\n return (\n \n \n Dynamic 3D Hover Card \n \n \n \n \n Experience interactive depth and motion with this sleek 3D hover effect. Move your cursor to see it come\n alive!\n
\n \n \n )\n}\n\nexport default Card3dDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-17.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/chart-component-01.json b/public/r/chart-component-01.json
new file mode 100644
index 0000000..9ac7399
--- /dev/null
+++ b/public/r/chart-component-01.json
@@ -0,0 +1,33 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "chart-component-01",
+ "type": "registry:block",
+ "title": "Chart 1",
+ "description": "Comprehensive sales metrics dashboard featuring company profile, key performance indicators (sales trend, discounts, profit, orders), pie chart for revenue goals, and bar chart for sales plan completion with cohort analysis tools.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card",
+ "chart"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/charts-component/chart-component-01/page.tsx",
+ "content": "import SalesMetricsCard from '@/components/shadcn-studio/blocks/chart-sales-metrics'\n\nconst WidgetCardPreview = () => {\n return (\n \n )\n}\n\nexport default WidgetCardPreview\n",
+ "type": "registry:page",
+ "target": "app/chart-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/chart-sales-metrics.tsx",
+ "content": "'use client'\n\nimport {\n BadgePercentIcon,\n ChartNoAxesCombinedIcon,\n CirclePercentIcon,\n DollarSignIcon,\n ShoppingBagIcon,\n TrendingUpIcon\n} from 'lucide-react'\n\nimport { Bar, BarChart, Label, Pie, PieChart } from 'recharts'\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\nimport { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart'\n\nconst salesPlanPercentage = 54\nconst totalBars = 24\nconst filledBars = Math.round((salesPlanPercentage * totalBars) / 100)\n\n// Sales chart data\nconst salesChartData = Array.from({ length: totalBars }, (_, index) => {\n const date = new Date(2025, 5, 15)\n\n const formattedDate = date.toLocaleDateString('en-GB', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric'\n })\n\n return {\n date: formattedDate,\n sales: index < filledBars ? 315 : 0\n }\n})\n\nconst salesChartConfig = {\n sales: {\n label: 'Sales'\n }\n} satisfies ChartConfig\n\nconst MetricsData = [\n {\n icons: ,\n title: 'Sales trend',\n value: '$11,548'\n },\n {\n icons: ,\n title: 'Discount offers',\n value: '$1,326'\n },\n {\n icons: ,\n title: 'Net profit',\n value: '$17,356'\n },\n {\n icons: ,\n title: 'Total orders',\n value: '248'\n }\n]\n\nconst revenueChartData = [\n { month: 'january', sales: 340, fill: 'var(--color-january)' },\n { month: 'february', sales: 200, fill: 'var(--color-february)' },\n { month: 'march', sales: 200, fill: 'var(--color-march)' }\n]\n\nconst revenueChartConfig = {\n sales: {\n label: 'Sales'\n },\n january: {\n label: 'January',\n color: 'var(--primary)'\n },\n february: {\n label: 'February',\n color: 'color-mix(in oklab, var(--primary) 60%, transparent)'\n },\n march: {\n label: 'March',\n color: 'color-mix(in oklab, var(--primary) 20%, transparent)'\n }\n} satisfies ChartConfig\n\nconst SalesMetricsCard = ({ className }: { className?: string }) => {\n return (\n \n \n \n
\n
Sales metrics \n
\n
\n
\n Sandy' Company \n sandy@company.com \n
\n
\n\n
\n {MetricsData.map((metric, index) => (\n
\n
\n \n {metric.icons}\n \n \n
\n {metric.title} \n {metric.value} \n
\n
\n ))}\n
\n
\n
\n \n Revenue goal \n \n\n \n \n \n } />\n \n {\n if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {\n return (\n \n \n 256.24\n \n \n Total Profit\n \n \n )\n }\n }}\n />\n \n \n \n \n\n \n Plan completed \n 56% \n \n \n
\n \n \n \n Sales plan \n {salesPlanPercentage}% \n Percentage profit from total sales \n
\n \n
Cohort analysis indicators \n
\n Analyzes the behaviour of a group of users who joined a product/service at the same time. over a certain\n period.\n \n
\n
\n \n Open Statistics \n
\n
\n \n Percentage Change \n
\n
\n\n
\n \n \n \n \n
\n \n \n \n \n )\n}\n\nexport default SalesMetricsCard\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/chart-sales-metrics.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "charts-component"
+ }
+}
\ No newline at end of file
diff --git a/public/r/checkbox-01.json b/public/r/checkbox-01.json
new file mode 100644
index 0000000..0a8fdc7
--- /dev/null
+++ b/public/r/checkbox-01.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-01",
+ "type": "registry:component",
+ "title": "Checkbox 1",
+ "description": "Basic checkbox with label for simple true/false selection",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-01.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst CheckboxDemo = () => {\n const id = useId()\n\n return (\n \n \n Accept terms and conditions \n
\n )\n}\n\nexport default CheckboxDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-02.json b/public/r/checkbox-02.json
new file mode 100644
index 0000000..f7b5cf4
--- /dev/null
+++ b/public/r/checkbox-02.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-02",
+ "type": "registry:component",
+ "title": "Checkbox 2",
+ "description": "Indeterminate checkbox with custom styling and three-state functionality",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-02.tsx",
+ "content": "'use client'\n\nimport { useId, useState, type ComponentProps } from 'react'\n\nimport { CheckIcon, MinusIcon } from 'lucide-react'\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nimport { Label } from '@/components/ui/label'\n\nconst Checkbox = (props: ComponentProps) => {\n return (\n \n \n \n \n \n \n )\n}\n\nconst CheckboxIndeterminateDemo = () => {\n const [checked, setChecked] = useState('indeterminate')\n\n const id = useId()\n\n return (\n \n \n Indeterminate checkbox \n
\n )\n}\n\nexport default CheckboxIndeterminateDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-03.json b/public/r/checkbox-03.json
new file mode 100644
index 0000000..8fac58c
--- /dev/null
+++ b/public/r/checkbox-03.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-03",
+ "type": "registry:component",
+ "title": "Checkbox 3",
+ "description": "Checkbox with dashed border styling for visual distinction",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-03.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst CheckboxDashedDemo = () => {\n const id = useId()\n\n return (\n \n \n Accept terms and conditions \n
\n )\n}\n\nexport default CheckboxDashedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-04.json b/public/r/checkbox-04.json
new file mode 100644
index 0000000..8ca058a
--- /dev/null
+++ b/public/r/checkbox-04.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-04",
+ "type": "registry:component",
+ "title": "Checkbox 4",
+ "description": "Todo list checkbox with strikethrough text when checked",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-04.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst CheckboxTodoListDemo = () => {\n const id = useId()\n\n return (\n \n \n \n Simple todo list item\n \n
\n )\n}\n\nexport default CheckboxTodoListDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-05.json b/public/r/checkbox-05.json
new file mode 100644
index 0000000..41b7bdf
--- /dev/null
+++ b/public/r/checkbox-05.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-05",
+ "type": "registry:component",
+ "title": "Checkbox 5",
+ "description": "Multiple checkboxes in different sizes for size comparison and selection",
+ "registryDependencies": [
+ "checkbox"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-05.tsx",
+ "content": "import { Checkbox } from '@/components/ui/checkbox'\n\nconst CheckboxSizesDemo = () => {\n return (\n \n \n \n \n
\n )\n}\n\nexport default CheckboxSizesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-06.json b/public/r/checkbox-06.json
new file mode 100644
index 0000000..efe2b15
--- /dev/null
+++ b/public/r/checkbox-06.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-06",
+ "type": "registry:component",
+ "title": "Checkbox 6",
+ "description": "Badge-style checkboxes with hidden unchecked state for compact selection",
+ "registryDependencies": [
+ "badge",
+ "checkbox"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-06.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Checkbox } from '@/components/ui/checkbox'\n\nconst snacks = ['Burger', 'Pizza', 'Drinks']\n\nconst CheckboxBadgeDemo = () => {\n const [selected, setSelected] = useState(['Burger', 'Pizza'])\n\n return (\n \n {snacks.map(label => (\n \n \n setSelected(checked ? [...selected, label] : selected.filter(item => item !== label))\n }\n className='data-[state=unchecked]:hidden'\n />\n \n {label}\n \n \n ))}\n
\n )\n}\n\nexport default CheckboxBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-07.json b/public/r/checkbox-07.json
new file mode 100644
index 0000000..e34b480
--- /dev/null
+++ b/public/r/checkbox-07.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-07",
+ "type": "registry:component",
+ "title": "Checkbox 7",
+ "description": "Checkbox with description text providing additional context and information",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-07.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst CheckboxDescriptionDemo = () => {\n const id = useId()\n\n return (\n \n
\n
\n
\n Accept terms and conditions\n \n
\n By clicking this checkbox, you agree to the terms and conditions.\n
\n
\n
\n )\n}\n\nexport default CheckboxDescriptionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-08.json b/public/r/checkbox-08.json
new file mode 100644
index 0000000..ef12e17
--- /dev/null
+++ b/public/r/checkbox-08.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-08",
+ "type": "registry:component",
+ "title": "Checkbox 8",
+ "description": "Horizontal group of checkboxes for technology selection with organized layout",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-08.tsx",
+ "content": "import { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst technologies = ['React', 'Next.js', 'Remix']\n\nconst CheckboxHorizontalGroupDemo = () => {\n return (\n \n
Technologies \n
\n {technologies.map(label => (\n
\n \n {label} \n
\n ))}\n
\n
\n )\n}\n\nexport default CheckboxHorizontalGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-09.json b/public/r/checkbox-09.json
new file mode 100644
index 0000000..6cc1c32
--- /dev/null
+++ b/public/r/checkbox-09.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-09",
+ "type": "registry:component",
+ "title": "Checkbox 9",
+ "description": "Vertical group of checkboxes with icons for fruits selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-09.tsx",
+ "content": "import { AppleIcon, CherryIcon, GrapeIcon } from 'lucide-react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst fruits = [\n { label: 'Apple', icon: AppleIcon },\n { label: 'Cherry', icon: CherryIcon },\n { label: 'Grape', icon: GrapeIcon }\n]\n\nconst CheckboxVerticalGroupDemo = () => {\n return (\n \n
Favorite Fruits \n
\n {fruits.map(({ label, icon: Icon }) => (\n
\n \n \n \n {label}\n \n
\n ))}\n
\n
\n )\n}\n\nexport default CheckboxVerticalGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-10.json b/public/r/checkbox-10.json
new file mode 100644
index 0000000..12f6149
--- /dev/null
+++ b/public/r/checkbox-10.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-10",
+ "type": "registry:component",
+ "title": "Checkbox 10",
+ "description": "Color-themed checkboxes with destructive, info, and success color variants",
+ "registryDependencies": [
+ "checkbox"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-10.tsx",
+ "content": "import { Checkbox } from '@/components/ui/checkbox'\n\nconst CheckboxColorsDemo = () => {\n return (\n \n \n \n \n
\n )\n}\n\nexport default CheckboxColorsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-11.json b/public/r/checkbox-11.json
new file mode 100644
index 0000000..c8a75ae
--- /dev/null
+++ b/public/r/checkbox-11.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-11",
+ "type": "registry:component",
+ "title": "Checkbox 11",
+ "description": "Custom icon checkboxes with heart, star, and circle icons for visual feedback",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-11.tsx",
+ "content": "import { HeartIcon, CircleIcon, StarIcon } from 'lucide-react'\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nconst CheckboxCustomIconsDemo = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default CheckboxCustomIconsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-12.json b/public/r/checkbox-12.json
new file mode 100644
index 0000000..7835f92
--- /dev/null
+++ b/public/r/checkbox-12.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-12",
+ "type": "registry:component",
+ "title": "Checkbox 12",
+ "description": "Filled circular checkboxes with color themes and circle check icons",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-12.tsx",
+ "content": "import { CircleCheckIcon } from 'lucide-react'\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nconst CheckboxFilledIconDemo = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default CheckboxFilledIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-13.json b/public/r/checkbox-13.json
new file mode 100644
index 0000000..186a472
--- /dev/null
+++ b/public/r/checkbox-13.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-13",
+ "type": "registry:component",
+ "title": "Checkbox 13",
+ "description": "Card-style checkboxes with border highlighting and description text",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-13.tsx",
+ "content": "import { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst CheckboxCardDemo = () => {\n return (\n \n
\n \n \n
Auto Start
\n
Starting with your OS.
\n
\n \n
\n \n \n
Auto update
\n
Download and install new version
\n
\n \n
\n )\n}\n\nexport default CheckboxCardDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-14.json b/public/r/checkbox-14.json
new file mode 100644
index 0000000..bc45c6c
--- /dev/null
+++ b/public/r/checkbox-14.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-14",
+ "type": "registry:component",
+ "title": "Checkbox 14",
+ "description": "List group checkboxes with icons and skills selection in bordered layout",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-14.tsx",
+ "content": "import { ChartPieIcon, CodeIcon, PaletteIcon } from 'lucide-react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst skills = [\n { label: 'Web Development', icon: CodeIcon },\n { label: 'Data Analysis', icon: ChartPieIcon },\n { label: 'Graphic Design', icon: PaletteIcon }\n]\n\nconst CheckboxListGroupDemo = () => {\n return (\n \n {skills.map(({ label, icon: Icon }) => (\n \n \n \n {label}\n \n \n \n \n ))}\n \n )\n}\n\nexport default CheckboxListGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-15.json b/public/r/checkbox-15.json
new file mode 100644
index 0000000..11a1000
--- /dev/null
+++ b/public/r/checkbox-15.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-15",
+ "type": "registry:component",
+ "title": "Checkbox 15",
+ "description": "Tree checkbox with parent-child relationship and indeterminate state",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-15.tsx",
+ "content": "'use client'\n\nimport { useEffect, useState, type ComponentProps } from 'react'\n\nimport { CheckIcon, MinusIcon } from 'lucide-react'\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nimport { Label } from '@/components/ui/label'\n\nconst items = ['Child 1', 'Child 2', 'Child 3']\n\nconst Checkbox = (props: ComponentProps) => {\n return (\n \n \n \n \n \n \n )\n}\n\nconst CheckboxTreeDemo = () => {\n const [checked, setChecked] = useState('indeterminate')\n const [selected, setSelected] = useState(['Child 1', 'Child 2'])\n\n useEffect(() => {\n if (selected.length === items.length) {\n setChecked(true)\n } else if (selected.length > 0) {\n setChecked('indeterminate')\n } else {\n setChecked(false)\n }\n }, [selected])\n\n const handleCheckedChange = (checked: CheckboxPrimitive.CheckedState) => {\n setChecked(checked)\n\n if (checked === true) {\n setSelected([...items])\n } else if (checked === false) {\n setSelected([])\n }\n }\n\n return (\n \n
\n \n Parent \n
\n
\n {items.map(label => (\n
\n \n setSelected(checked ? [...selected, label] : selected.filter(item => item !== label))\n }\n />\n {label} \n
\n ))}\n
\n
\n )\n}\n\nexport default CheckboxTreeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-16.json b/public/r/checkbox-16.json
new file mode 100644
index 0000000..f082c70
--- /dev/null
+++ b/public/r/checkbox-16.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-16",
+ "type": "registry:component",
+ "title": "Checkbox 16",
+ "description": "Form checkbox with terms acceptance, description text, and action buttons",
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-16.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst CheckboxFormDemo = () => {\n const id = useId()\n\n return (\n \n
\n
\n
\n Accept terms and conditions\n \n
\n By clicking this checkbox, you agree to the terms and conditions.\n
\n
\n \n Reset\n \n Submit \n
\n
\n
\n )\n}\n\nexport default CheckboxFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/checkbox-17.json b/public/r/checkbox-17.json
new file mode 100644
index 0000000..48aa00c
--- /dev/null
+++ b/public/r/checkbox-17.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-17",
+ "type": "registry:component",
+ "title": "Checkbox 17",
+ "description": "Smooth animated checkbox with motion transitions and visual feedback",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-17.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Checkbox } from '@/components/ui/motion-checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst CheckboxAnimatedDemo = () => {\n const id = useId()\n\n return (\n \n \n Animated checkbox \n
\n )\n}\n\nexport default CheckboxAnimatedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-17.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-checkbox.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { motion, type HTMLMotionProps } from 'motion/react'\n\nimport { cn } from '@/lib/utils'\n\ntype CheckboxProps = React.ComponentProps & HTMLMotionProps<'button'>\n\nfunction Checkbox({ className, onCheckedChange, ...props }: CheckboxProps) {\n const [isChecked, setIsChecked] = React.useState(props?.checked ?? props?.defaultChecked ?? false)\n\n React.useEffect(() => {\n if (props?.checked !== undefined) setIsChecked(props.checked)\n }, [props?.checked])\n\n const handleCheckedChange = React.useCallback(\n (checked: boolean) => {\n setIsChecked(checked)\n onCheckedChange?.(checked)\n },\n [onCheckedChange]\n )\n\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport { Checkbox }\n",
+ "type": "registry:ui",
+ "target": "components/ui/motion-checkbox.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/checkbox-18.json b/public/r/checkbox-18.json
new file mode 100644
index 0000000..68d7f96
--- /dev/null
+++ b/public/r/checkbox-18.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-18",
+ "type": "registry:component",
+ "title": "Checkbox 18",
+ "description": "Animated todo checkbox with strikethrough effect and smooth transitions",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-18.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Checkbox } from '@/components/ui/motion-checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst CheckboxAnimatedTodoListDemo = () => {\n const id = useId()\n\n return (\n \n \n \n Animated todo list item\n \n
\n )\n}\n\nexport default CheckboxAnimatedTodoListDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-18.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-checkbox.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { motion, type HTMLMotionProps } from 'motion/react'\n\nimport { cn } from '@/lib/utils'\n\ntype CheckboxProps = React.ComponentProps & HTMLMotionProps<'button'>\n\nfunction Checkbox({ className, onCheckedChange, ...props }: CheckboxProps) {\n const [isChecked, setIsChecked] = React.useState(props?.checked ?? props?.defaultChecked ?? false)\n\n React.useEffect(() => {\n if (props?.checked !== undefined) setIsChecked(props.checked)\n }, [props?.checked])\n\n const handleCheckedChange = React.useCallback(\n (checked: boolean) => {\n setIsChecked(checked)\n onCheckedChange?.(checked)\n },\n [onCheckedChange]\n )\n\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport { Checkbox }\n",
+ "type": "registry:ui",
+ "target": "components/ui/motion-checkbox.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/checkbox-19.json b/public/r/checkbox-19.json
new file mode 100644
index 0000000..c6705a1
--- /dev/null
+++ b/public/r/checkbox-19.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "checkbox-19",
+ "type": "registry:component",
+ "title": "Checkbox 19",
+ "description": "Checkbox with confetti animation effect when checked",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-19.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { motion, AnimatePresence, easeOut } from 'motion/react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst particleAnimation = (index: number) => {\n const angle = Math.random() * Math.PI * 2\n const distance = 30 + Math.random() * 20\n\n return {\n initial: { x: '50%', y: '50%', scale: 0, opacity: 0 },\n animate: {\n x: `calc(50% + ${Math.cos(angle) * distance}px)`,\n y: `calc(50% + ${Math.sin(angle) * distance}px)`,\n scale: [0, 1, 0],\n opacity: [0, 1, 0]\n },\n transition: { duration: 0.4, delay: index * 0.05, ease: easeOut }\n }\n}\n\nconst ConfettiPiece = ({ index }: { index: number }) => {\n const colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF']\n const color = colors[index % colors.length]\n\n return (\n \n )\n}\n\nconst CheckboxConfettiDemo = () => {\n const [showConfetti, setShowConfetti] = useState(false)\n\n const id = useId()\n\n const handleCheckedChange = (checked: boolean) => {\n if (checked) {\n setShowConfetti(true)\n setTimeout(() => setShowConfetti(false), 800)\n }\n }\n\n return (\n \n
\n
Check to see magic \n
\n {showConfetti && (\n \n {[...Array(12)].map((_, i) => (\n \n ))}\n
\n )}\n \n
\n )\n}\n\nexport default CheckboxConfettiDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-19.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/claude.json b/public/r/claude.json
new file mode 100644
index 0000000..052f91a
--- /dev/null
+++ b/public/r/claude.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "claude",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0.01 93.48)",
+ "foreground": "oklch(0.34 0.03 94.42)",
+ "card": "oklch(0.98 0.01 93.48)",
+ "card-foreground": "oklch(0.19 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.27 0.02 99.70)",
+ "primary": "oklch(0.62 0.14 39.15)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.92 0.01 87.42)",
+ "secondary-foreground": "oklch(0.43 0.02 99.33)",
+ "muted": "oklch(0.93 0.02 91.55)",
+ "muted-foreground": "oklch(0.61 0.01 91.49)",
+ "accent": "oklch(0.92 0.01 87.42)",
+ "accent-foreground": "oklch(0.27 0.02 99.70)",
+ "destructive": "oklch(0.19 0 0)",
+ "border": "oklch(0.88 0.01 100.76)",
+ "input": "oklch(0.76 0.02 96.91)",
+ "ring": "oklch(0.59 0.17 252.92)",
+ "chart-1": "oklch(0.56 0.13 42.95)",
+ "chart-2": "oklch(0.69 0.16 290.29)",
+ "chart-3": "oklch(0.88 0.03 91.64)",
+ "chart-4": "oklch(0.88 0.04 298.21)",
+ "chart-5": "oklch(0.56 0.13 41.94)",
+ "sidebar": "oklch(0.97 0.01 93.49)",
+ "sidebar-foreground": "oklch(0.36 0.01 106.85)",
+ "sidebar-primary": "oklch(0.62 0.14 39.15)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.92 0.01 87.42)",
+ "sidebar-accent-foreground": "oklch(0.33 0 0)",
+ "sidebar-border": "oklch(0.94 0 0)",
+ "sidebar-ring": "oklch(0.77 0 0)",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.27 0 0)",
+ "foreground": "oklch(0.81 0.01 93.53)",
+ "card": "oklch(0.27 0 0)",
+ "card-foreground": "oklch(0.98 0.01 93.48)",
+ "popover": "oklch(0.31 0 0)",
+ "popover-foreground": "oklch(0.92 0 0)",
+ "primary": "oklch(0.67 0.13 38.92)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.98 0.01 93.48)",
+ "secondary-foreground": "oklch(0.31 0 0)",
+ "muted": "oklch(0.22 0 0)",
+ "muted-foreground": "oklch(0.77 0.02 100.64)",
+ "accent": "oklch(0.21 0.01 88.79)",
+ "accent-foreground": "oklch(0.97 0.01 93.49)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.36 0.01 106.85)",
+ "input": "oklch(0.43 0.01 99.03)",
+ "ring": "oklch(0.59 0.17 252.92)",
+ "chart-1": "oklch(0.56 0.13 42.95)",
+ "chart-2": "oklch(0.69 0.16 290.29)",
+ "chart-3": "oklch(0.21 0.01 88.79)",
+ "chart-4": "oklch(0.31 0.05 289.74)",
+ "chart-5": "oklch(0.56 0.13 41.94)",
+ "sidebar": "oklch(0.24 0 0)",
+ "sidebar-foreground": "oklch(0.81 0.01 93.53)",
+ "sidebar-primary": "oklch(0.33 0 0)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.17 0 0)",
+ "sidebar-accent-foreground": "oklch(0.81 0.01 93.53)",
+ "sidebar-border": "oklch(0.94 0 0)",
+ "sidebar-ring": "oklch(0.77 0 0)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/clean-slate.json b/public/r/clean-slate.json
new file mode 100644
index 0000000..755a397
--- /dev/null
+++ b/public/r/clean-slate.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "clean-slate",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Inter, sans-serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.28 0.04 260.33)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.28 0.04 260.33)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.28 0.04 260.33)",
+ "primary": "oklch(0.59 0.20 277.06)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.93 0.01 261.82)",
+ "secondary-foreground": "oklch(0.37 0.03 259.73)",
+ "muted": "oklch(0.97 0 0)",
+ "muted-foreground": "oklch(0.55 0.02 264.41)",
+ "accent": "oklch(0.93 0.03 273.66)",
+ "accent-foreground": "oklch(0.37 0.03 259.73)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.87 0.01 261.81)",
+ "input": "oklch(0.87 0.01 261.81)",
+ "ring": "oklch(0.59 0.20 277.06)",
+ "chart-1": "oklch(0.59 0.20 277.06)",
+ "chart-2": "oklch(0.51 0.23 276.97)",
+ "chart-3": "oklch(0.46 0.21 277.06)",
+ "chart-4": "oklch(0.40 0.18 277.16)",
+ "chart-5": "oklch(0.36 0.14 278.65)",
+ "sidebar": "oklch(0.97 0 0)",
+ "sidebar-foreground": "oklch(0.28 0.04 260.33)",
+ "sidebar-primary": "oklch(0.59 0.20 277.06)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.93 0.03 273.66)",
+ "sidebar-accent-foreground": "oklch(0.37 0.03 259.73)",
+ "sidebar-border": "oklch(0.87 0.01 261.81)",
+ "sidebar-ring": "oklch(0.59 0.20 277.06)",
+ "font-sans": "Inter, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "8px",
+ "shadow-spread": "-1px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "4px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 4px 8px -1px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0px 4px 8px -1px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 1px 2px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 1px 2px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 2px 4px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 4px 6px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 8px 10px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0px 4px 8px -1px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.21 0.04 264.04)",
+ "foreground": "oklch(0.93 0.01 256.71)",
+ "card": "oklch(0.28 0.04 260.33)",
+ "card-foreground": "oklch(0.93 0.01 256.71)",
+ "popover": "oklch(0.28 0.04 260.33)",
+ "popover-foreground": "oklch(0.93 0.01 256.71)",
+ "primary": "oklch(0.68 0.16 276.93)",
+ "primary-foreground": "oklch(0.21 0.04 264.04)",
+ "secondary": "oklch(0.34 0.03 261.83)",
+ "secondary-foreground": "oklch(0.87 0.01 261.81)",
+ "muted": "oklch(0.28 0.04 260.33)",
+ "muted-foreground": "oklch(0.71 0.02 261.33)",
+ "accent": "oklch(0.37 0.03 259.73)",
+ "accent-foreground": "oklch(0.87 0.01 261.81)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.45 0.03 257.68)",
+ "input": "oklch(0.45 0.03 257.68)",
+ "ring": "oklch(0.68 0.16 276.93)",
+ "chart-1": "oklch(0.68 0.16 276.93)",
+ "chart-2": "oklch(0.59 0.20 277.06)",
+ "chart-3": "oklch(0.51 0.23 276.97)",
+ "chart-4": "oklch(0.46 0.21 277.06)",
+ "chart-5": "oklch(0.40 0.18 277.16)",
+ "sidebar": "oklch(0.28 0.04 260.33)",
+ "sidebar-foreground": "oklch(0.93 0.01 256.71)",
+ "sidebar-primary": "oklch(0.68 0.16 276.93)",
+ "sidebar-primary-foreground": "oklch(0.21 0.04 264.04)",
+ "sidebar-accent": "oklch(0.37 0.03 259.73)",
+ "sidebar-accent-foreground": "oklch(0.87 0.01 261.81)",
+ "sidebar-border": "oklch(0.45 0.03 257.68)",
+ "sidebar-ring": "oklch(0.68 0.16 276.93)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/collapsible-01.json b/public/r/collapsible-01.json
new file mode 100644
index 0000000..5fa9a1e
--- /dev/null
+++ b/public/r/collapsible-01.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-01",
+ "type": "registry:component",
+ "title": "Collapsible 1",
+ "description": "Basic collapsible with repository list and toggle button functionality",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-01.tsx",
+ "content": "import { ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\nconst CollapsibleDemo = () => {\n return (\n \n \n
@peduarte starred 3 repositories
\n
\n \n \n Toggle \n \n \n
\n @radix-ui/primitives
\n \n @radix-ui/colors
\n @stitches/react
\n \n \n )\n}\n\nexport default CollapsibleDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-02.json b/public/r/collapsible-02.json
new file mode 100644
index 0000000..7ea03c0
--- /dev/null
+++ b/public/r/collapsible-02.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-02",
+ "type": "registry:component",
+ "title": "Collapsible 2",
+ "description": "File tree explorer with nested folders and expandable directory structure",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-02.tsx",
+ "content": "import { ChevronRightIcon, FileIcon, FolderIcon, FolderOpenIcon } from 'lucide-react'\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\ntype FileTreeItem = {\n name: string\n} & (\n | {\n type: 'file'\n children?: never\n }\n | {\n type: 'folder'\n children: FileTreeItem[]\n }\n)\n\nconst fileTree: FileTreeItem[] = [\n {\n name: 'components',\n type: 'folder',\n children: [\n {\n name: 'ui',\n type: 'folder',\n children: [\n { name: 'button.tsx', type: 'file' },\n { name: 'input.tsx', type: 'file' },\n { name: 'sidebar.tsx', type: 'file' }\n ]\n },\n { name: 'app-sidebar.tsx', type: 'file' }\n ]\n },\n {\n name: 'hooks',\n type: 'folder',\n children: [{ name: 'use-mobile.ts', type: 'file' }]\n },\n {\n name: 'lib',\n type: 'folder',\n children: [{ name: 'utils.ts', type: 'file' }]\n },\n {\n name: 'components.json',\n type: 'file'\n }\n]\n\nconst FileTree = ({ item, level }: { level: number; item: FileTreeItem }) => {\n if (item.type === 'file') {\n return (\n \n \n {item.name} \n
\n )\n }\n\n return (\n \n \n \n \n \n {item.name} \n \n \n {item.children.map(item => (\n \n ))}\n \n \n )\n}\n\nconst CollapsibleTreeDemo = () => {\n return (\n \n {fileTree.map(item => (\n \n ))}\n
\n )\n}\n\nexport default CollapsibleTreeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-03.json b/public/r/collapsible-03.json
new file mode 100644
index 0000000..429aa87
--- /dev/null
+++ b/public/r/collapsible-03.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-03",
+ "type": "registry:component",
+ "title": "Collapsible 3",
+ "description": "Task completion list with user avatars and progress percentages",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-03.tsx",
+ "content": "import { ChevronUpIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\nconst tasks = [\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'HL',\n name: 'Howard Lloyd',\n designation: 'Product Manager',\n percentage: 90\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'OS',\n name: 'Olivia Sparks',\n designation: 'Software Engineer',\n percentage: 60\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards',\n designation: 'UI/UX Designer',\n percentage: 80\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson',\n designation: 'Junior Developer',\n percentage: 15\n }\n]\n\nconst CollapsibleListDemo = () => {\n return (\n \n Today's task completion
\n \n {tasks.slice(0, 2).map(task => (\n \n \n \n {task.fallback} \n \n \n
{task.name}
\n
{task.designation}
\n
\n {`${task.percentage}%`} \n \n ))}\n \n {tasks.slice(2).map(task => (\n \n \n \n {task.fallback} \n \n \n
{task.name}
\n
{task.designation}
\n
\n {`${task.percentage}%`} \n \n ))}\n \n \n \n \n Show more \n Show less \n \n \n \n \n )\n}\n\nexport default CollapsibleListDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-04.json b/public/r/collapsible-04.json
new file mode 100644
index 0000000..7dbeed1
--- /dev/null
+++ b/public/r/collapsible-04.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-04",
+ "type": "registry:component",
+ "title": "Collapsible 4",
+ "description": "User list with avatars, status indicators and expandable team member details",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-04.tsx",
+ "content": "import { ChevronRightIcon, PanelsTopLeftIcon, PlusIcon, UserIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\nconst users = [\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'HL',\n name: 'Howard Lloyd',\n bio: 'Senior Product Manager with 8+ years of experience in SaaS product development and team leadership.',\n projects: 5,\n followers: 120\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'OS',\n name: 'Olivia Sparks',\n bio: 'Full-stack Software Engineer specializing in React, Node.js, and cloud architecture solutions.',\n projects: 3,\n followers: 95,\n followed: true\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards',\n bio: 'Creative UI/UX Designer with expertise in user research, wireframing, and accessible interface design.',\n projects: 4,\n followers: 80\n }\n]\n\nconst CollapsibleProfileDemo = () => {\n return (\n \n {users.map(user => (\n \n \n \n \n
\n \n {user.fallback} \n \n
{user.name} \n
\n \n \n \n \n
{user.bio}
\n
\n
\n
\n \n {user.followers} \n \n
\n \n {user.projects} \n \n
\n {user.followed ? (\n
\n Following\n \n ) : (\n
\n Follow\n \n \n )}\n
\n
\n \n \n \n ))}\n \n )\n}\n\nexport default CollapsibleProfileDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-05.json b/public/r/collapsible-05.json
new file mode 100644
index 0000000..6f97a52
--- /dev/null
+++ b/public/r/collapsible-05.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-05",
+ "type": "registry:component",
+ "title": "Collapsible 5",
+ "description": "Filter panel with price range inputs, rating checkboxes and brand selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "collapsible",
+ "label",
+ "input",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-05.tsx",
+ "content": "import { ChevronDownIcon, StarIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\nimport { Label } from '@/components/ui/label'\nimport { Input } from '@/components/ui/input'\nimport { Separator } from '@/components/ui/separator'\n\nconst CollapsibleFilterDemo = () => {\n return (\n \n
\n \n
Price Range
\n
\n \n \n Toggle \n \n \n
\n \n \n \n Min Price\n \n \n
\n \n \n Max Price\n \n \n
\n \n \n
\n
\n \n
Customer Ratings
\n
\n \n \n Toggle \n \n \n
\n \n \n \n \n \n 4\n \n \n & Up\n \n
\n \n \n \n \n 3\n \n \n & Up\n \n
\n \n \n \n \n 2\n \n \n & Up\n \n
\n \n \n
\n
\n \n
Brand
\n
\n \n \n Toggle \n \n \n
\n \n \n \n \n Apple\n \n
\n \n \n \n Samsung\n \n
\n \n \n \n Google\n \n
\n \n \n \n OnePlus\n \n
\n \n \n \n Xiaomi\n \n
\n \n \n
\n
\n \n
Battery
\n
\n \n \n Toggle \n \n \n
\n \n \n \n \n 3500mAh\n \n
\n \n \n \n 4000mAh\n \n
\n \n \n \n 5000mAh\n \n
\n \n \n \n 6000mAh\n \n
\n \n \n
\n )\n}\n\nexport default CollapsibleFilterDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-06.json b/public/r/collapsible-06.json
new file mode 100644
index 0000000..1768ba2
--- /dev/null
+++ b/public/r/collapsible-06.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-06",
+ "type": "registry:component",
+ "title": "Collapsible 6",
+ "description": "Simple text content collapsible with expandable paragraph sections",
+ "registryDependencies": [
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-06.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\nconst CollapsibleShowMoreDemo = () => {\n const [isTrackOrderOpen, setIsTrackOrderOpen] = useState(true)\n const [isCancelOrderOpen, setIsCancelOrderOpen] = useState(false)\n\n return (\n \n
\n
How can I track my order?
\n
\n \n \n To track your order, simply log in to your account and navigate to the order history section. You'll\n find detailed information about your order status and tracking number there.\n
\n \n \n \n {isTrackOrderOpen ? 'Hide answer' : 'Show answer'}\n \n \n \n
\n
\n
Can I cancel my order?
\n
\n \n \n Scheduled delivery orders can be cancelled 72 hours prior to your selected delivery date for full refund.\n
\n \n \n \n {isCancelOrderOpen ? 'Hide answer' : 'Show answer'}\n \n \n \n
\n
\n )\n}\n\nexport default CollapsibleShowMoreDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-07.json b/public/r/collapsible-07.json
new file mode 100644
index 0000000..9a871d7
--- /dev/null
+++ b/public/r/collapsible-07.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-07",
+ "type": "registry:component",
+ "title": "Collapsible 7",
+ "description": "FAQ card with collapsible answer section and expandable image content",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-07.tsx",
+ "content": "import { ChevronUpIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Card, CardAction, CardContent, CardTitle } from '@/components/ui/card'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\nconst CollapsibleCardDemo = () => {\n return (\n \n \n \n How do I track my order? \n \n \n \n Show \n Hide \n \n \n \n \n
\n \n \n You'll receive tracking information via email once your order ships.
\n \n \n \n \n \n )\n}\n\nexport default CollapsibleCardDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-08.json b/public/r/collapsible-08.json
new file mode 100644
index 0000000..686ea6c
--- /dev/null
+++ b/public/r/collapsible-08.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-08",
+ "type": "registry:component",
+ "title": "Collapsible 8",
+ "description": "Menu items with dropdown actions and nested navigation structure",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-08.tsx",
+ "content": "'use client'\n\nimport { ChevronRightIcon, CircleSmallIcon, LogOutIcon, SettingsIcon, UserIcon, UsersIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuGroup,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst CollapsibleDropdownMenuDemo = () => {\n return (\n \n \n Dropdown with collapsible \n \n \n \n \n Profile \n \n \n \n \n event.preventDefault()} className='justify-between'>\n \n \n Settings \n
\n \n \n \n \n \n \n Account \n \n \n \n Security \n \n \n \n Billing & plans \n \n \n \n \n \n \n \n event.preventDefault()} className='justify-between'>\n \n \n Users \n
\n \n \n \n \n \n \n Teams \n \n \n \n Projects \n \n \n \n Connections \n \n \n \n \n \n \n Log out \n \n \n \n )\n}\n\nexport default CollapsibleDropdownMenuDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-09.json b/public/r/collapsible-09.json
new file mode 100644
index 0000000..67523c1
--- /dev/null
+++ b/public/r/collapsible-09.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-09",
+ "type": "registry:component",
+ "title": "Collapsible 9",
+ "description": "Multi-step form with delivery address, shipping options and payment details",
+ "dependencies": [
+ "lucide-react",
+ "react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible",
+ "input",
+ "label",
+ "radio-group",
+ "separator",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-09.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { ChevronDownIcon, CreditCardIcon } from 'lucide-react'\n\nimport { usePaymentInputs } from 'react-payment-inputs'\nimport images, { type CardImages } from 'react-payment-inputs/images'\n\nimport { Button } from '@/components/ui/button'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\nimport { Separator } from '@/components/ui/separator'\nimport { Textarea } from '@/components/ui/textarea'\n\nconst CollapsibleFormDemo = () => {\n const id = useId()\n const { meta, getCardNumberProps, getExpiryDateProps, getCVCProps, getCardImageProps } = usePaymentInputs()\n\n const items = [\n { value: '1', label: 'Standard 3-5 Days', description: 'Friday, 15 June - Tuesday, 19 June', price: 'Free' },\n { value: '2', label: 'Express', description: 'Friday, 15 June - Sunday, 17 June', price: '$5.00' },\n { value: '3', label: 'Overnight', description: 'Tomorrow', price: '$10.00' }\n ]\n\n return (\n \n
\n
\n \n
Delivery Address
\n
\n \n \n Toggle \n \n \n
\n \n \n \n Full Name \n \n \n
\n \n \n Address \n \n \n
\n \n \n Pin Code \n \n \n
\n \n \n City \n \n \n
\n \n \n Landmark \n \n \n
\n \n \n
\n
\n \n
Delivery Options
\n
\n \n \n Toggle \n \n \n
\n \n \n {items.map(item => (\n \n
\n
\n
\n
\n
\n {item.label}\n \n
{item.description}
\n
\n
\n
\n {item.price}\n
\n
\n
\n ))}\n \n \n \n
\n
\n \n
Payment
\n
\n \n \n Toggle \n \n \n
\n \n \n
Card details \n
\n
\n
\n
\n {meta.cardType ? (\n \n ) : (\n \n )}\n Card Provider \n
\n
\n
\n
\n
\n \n \n
\n
\n Built with{' '}\n \n React Payment Inputs\n \n
\n
\n )\n}\n\nexport default CollapsibleFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/collapsible-10.json b/public/r/collapsible-10.json
new file mode 100644
index 0000000..4e9c7d6
--- /dev/null
+++ b/public/r/collapsible-10.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "collapsible-10",
+ "type": "registry:component",
+ "title": "Collapsible 10",
+ "description": "Animated collapsible with smooth transitions and motion effects",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-10.tsx",
+ "content": "import { ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\n\nconst CollapsibleAnimatedDemo = () => {\n return (\n \n \n
@peduarte starred 3 repositories
\n
\n \n \n Toggle \n \n \n
\n @radix-ui/primitives
\n \n @radix-ui/colors
\n @stitches/react
\n \n \n )\n}\n\nexport default CollapsibleAnimatedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-10.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/combobox-01.json b/public/r/combobox-01.json
new file mode 100644
index 0000000..a5b69f7
--- /dev/null
+++ b/public/r/combobox-01.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-01",
+ "type": "registry:component",
+ "title": "Combobox 1",
+ "description": "Basic combobox with framework selection and searchable dropdown",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-01.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js'\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit'\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js'\n },\n {\n value: 'remix',\n label: 'Remix'\n },\n {\n value: 'astro',\n label: 'Astro'\n }\n]\n\nconst ComboboxDemo = () => {\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n return (\n \n \n \n {value ? frameworks.find(framework => framework.value === value)?.label : 'Select framework...'}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n \n \n ))}\n \n \n \n \n \n )\n}\n\nexport default ComboboxDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-02.json b/public/r/combobox-02.json
new file mode 100644
index 0000000..b6cfec4
--- /dev/null
+++ b/public/r/combobox-02.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-02",
+ "type": "registry:component",
+ "title": "Combobox 2",
+ "description": "Grouped combobox with fruits, vegetables, and beverages organized by categories",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-02.tsx",
+ "content": "'use client'\n\nimport { Fragment, useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst items = [\n {\n continent: 'Fruits',\n items: [{ value: 'Apples' }, { value: 'Bananas' }, { value: 'Cherries' }]\n },\n {\n continent: 'Vegetables',\n items: [{ value: 'Carrots' }, { value: 'Broccoli' }, { value: 'Spinach' }]\n },\n {\n continent: 'Beverages',\n items: [{ value: 'Tea' }, { value: 'Coffee' }, { value: 'Juice' }]\n }\n]\n\nconst ComboboxOptionGroupDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n return (\n \n
Combobox option group \n
\n \n \n {value ? (\n \n {value} \n \n ) : (\n Select item \n )}\n \n \n \n \n \n \n \n No item found. \n {items.map(group => (\n \n \n {group.items.map(item => (\n {\n setValue(currentValue)\n setOpen(false)\n }}\n >\n {item.value}\n {value === item.value && }\n \n ))}\n \n \n ))}\n \n \n \n \n
\n )\n}\n\nexport default ComboboxOptionGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-03.json b/public/r/combobox-03.json
new file mode 100644
index 0000000..675c6cf
--- /dev/null
+++ b/public/r/combobox-03.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-03",
+ "type": "registry:component",
+ "title": "Combobox 3",
+ "description": "Grouped combobox with disabled options and category-based selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-03.tsx",
+ "content": "'use client'\n\nimport { Fragment, useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst items = [\n {\n category: 'Fruits',\n items: [{ value: 'Apples' }, { value: 'Bananas' }, { value: 'Cherries' }]\n },\n {\n category: 'Vegetables',\n items: [{ value: 'Carrots' }, { value: 'Broccoli', disabled: true }, { value: 'Spinach' }]\n },\n {\n category: 'Beverages',\n items: [{ value: 'Tea' }, { value: 'Coffee', disabled: true }, { value: 'Juice' }]\n }\n]\n\nconst ComboboxOptionDisabledDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n return (\n \n
Combobox disabled option \n
\n \n \n {value ? (\n \n {value} \n \n ) : (\n Select item \n )}\n \n \n \n \n \n \n \n No item found. \n {items.map(group => (\n \n \n {group.items.map(item => (\n {\n setValue(currentValue)\n setOpen(false)\n }}\n className={cn(item.disabled && 'cursor-not-allowed opacity-50')}\n disabled={item.disabled}\n >\n {item.value}\n {value === item.value && }\n \n ))}\n \n \n ))}\n \n \n \n \n
\n )\n}\n\nexport default ComboboxOptionDisabledDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-04.json b/public/r/combobox-04.json
new file mode 100644
index 0000000..f2c6d2a
--- /dev/null
+++ b/public/r/combobox-04.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-04",
+ "type": "registry:component",
+ "title": "Combobox 4",
+ "description": "Industry selector combobox with icons for various business sectors",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-04.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport {\n ChevronsUpDownIcon,\n DollarSignIcon,\n FactoryIcon,\n FilmIcon,\n HospitalIcon,\n HotelIcon,\n MonitorIcon,\n ScaleIcon,\n SchoolIcon,\n TractorIcon,\n ZapIcon\n} from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst industries = [\n {\n value: 'information technology',\n label: 'Information Technology',\n icon: MonitorIcon\n },\n {\n value: 'healthcare',\n label: 'Healthcare',\n icon: HospitalIcon\n },\n {\n value: 'finance',\n label: 'Finance',\n icon: DollarSignIcon\n },\n {\n value: 'education',\n label: 'Education',\n icon: SchoolIcon\n },\n {\n value: 'entertainment',\n label: 'Entertainment',\n icon: FilmIcon\n },\n {\n value: 'manufacturing',\n label: 'Manufacturing',\n icon: FactoryIcon\n },\n {\n value: 'energy',\n label: 'Energy',\n icon: ZapIcon\n },\n {\n value: 'hospitality',\n label: 'Hospitality',\n icon: HotelIcon\n },\n {\n value: 'legal',\n label: 'Legal',\n icon: ScaleIcon\n },\n {\n value: 'agriculture',\n label: 'Agriculture',\n icon: TractorIcon\n }\n]\n\nconst ComboboxOptionWithIIconDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n return (\n \n
Combobox option with icon \n
\n \n \n {value ? (\n \n {(() => {\n const selectedItem = industries.find(industry => industry.value === value)\n\n if (selectedItem) {\n const Icon = selectedItem.icon\n\n return \n }\n\n return null\n })()}\n {industries.find(industry => industry.value === value)?.label} \n \n ) : (\n Select industry category \n )}\n \n \n \n \n \n \n \n No industry found. \n \n {industries.map(industry => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n className='flex items-center justify-between'\n >\n \n \n {industry.label}\n
\n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxOptionWithIIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-05.json b/public/r/combobox-05.json
new file mode 100644
index 0000000..7eea569
--- /dev/null
+++ b/public/r/combobox-05.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-05",
+ "type": "registry:component",
+ "title": "Combobox 5",
+ "description": "Framework selector combobox with custom check icon styling",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-05.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CircleCheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js'\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit'\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js'\n },\n {\n value: 'remix',\n label: 'Remix'\n },\n {\n value: 'astro',\n label: 'Astro'\n }\n]\n\nconst ComboboxCustomCheckIconDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n return (\n \n
Combobox with custom check icon \n
\n \n \n {value ? (\n frameworks.find(framework => framework.value === value)?.label\n ) : (\n Select industry category \n )}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n \n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxCustomCheckIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-06.json b/public/r/combobox-06.json
new file mode 100644
index 0000000..3f49afd
--- /dev/null
+++ b/public/r/combobox-06.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-06",
+ "type": "registry:component",
+ "title": "Combobox 6",
+ "description": "combobox with add new option functionality",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-06.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon, PlusIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator\n} from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst universities = [\n {\n value: 'harvard',\n label: 'Harvard University'\n },\n {\n value: 'cambridge',\n label: 'University of Cambridge'\n },\n {\n value: 'stanford',\n label: 'Stanford University'\n },\n {\n value: 'texas',\n label: 'University of Texas'\n }\n]\n\nconst ComboboxWithSearchAndButtonDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('harvard')\n\n return (\n \n
Combobox with search and add button \n
\n \n \n \n {value ? (\n universities.find(university => university.value === value)?.label\n ) : (\n Select university \n )}\n \n \n \n \n \n \n \n \n No university found. \n \n {universities.map(university => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {university.label}\n {value === university.value && }\n \n ))}\n \n \n \n \n \n New university\n \n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxWithSearchAndButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-07.json b/public/r/combobox-07.json
new file mode 100644
index 0000000..08a5bf9
--- /dev/null
+++ b/public/r/combobox-07.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-07",
+ "type": "registry:component",
+ "title": "Combobox 7",
+ "description": "Timezone selector combobox with real timezone data from Intl API",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-07.tsx",
+ "content": "'use client'\n\nimport { useId, useMemo, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst ComboboxTimezoneDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('Indian/Cocos')\n\n // Fetch supported timezones\n const timezones = Intl.supportedValuesOf('timeZone')\n\n const formattedTimezones = useMemo(() => {\n return timezones\n .map(timezone => {\n const formatter = new Intl.DateTimeFormat('en', {\n timeZone: timezone,\n timeZoneName: 'shortOffset'\n })\n\n const parts = formatter.formatToParts(new Date())\n const offset = parts.find(part => part.type === 'timeZoneName')?.value || ''\n const formattedOffset = offset === 'GMT' ? 'GMT+0' : offset\n\n return {\n value: timezone,\n label: `(${formattedOffset}) ${timezone.replace(/_/g, ' ')}`,\n numericOffset: parseInt(formattedOffset.replace('GMT', '').replace('+', '') || '0')\n }\n })\n .sort((a, b) => a.numericOffset - b.numericOffset) // Sort by numeric offset\n }, [timezones])\n\n return (\n \n
Timezone combobox \n
\n \n \n \n {value ? (\n formattedTimezones.find(timezone => timezone.value === value)?.label\n ) : (\n Select timezone \n )}\n \n \n \n \n \n \n \n \n No timezone found. \n \n {formattedTimezones.map(({ value: itemValue, label }) => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {label} \n {value === itemValue && }\n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxTimezoneDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-08.json b/public/r/combobox-08.json
new file mode 100644
index 0000000..f39a823
--- /dev/null
+++ b/public/r/combobox-08.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-08",
+ "type": "registry:component",
+ "title": "Combobox 8",
+ "description": "User selector combobox with avatars, name and email addresses",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-08.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst users = [\n {\n name: 'Phillip George',\n email: 'phillip12@gmail.com',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n status: 'online'\n },\n {\n name: 'Jaylon Donin',\n email: 'jaylo-don@yahoo.com',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n status: 'offline'\n },\n {\n name: 'Tiana Curtis',\n email: 'tiana_curtis@gmail.com',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n status: 'away'\n },\n {\n name: 'Zaire Vetrovs',\n email: 'zaire.vetrovs@outlook.com',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-4.png',\n status: 'online'\n },\n {\n name: 'Kianna Philips',\n email: 'kiannaphilips@gmail.com',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n status: 'busy'\n },\n {\n name: 'John Doe',\n email: 'john2doe@icloud.com',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n status: 'online'\n },\n {\n name: 'Rock Lee',\n email: 'rocklee@protonmail.com',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-7.png',\n status: 'busy'\n },\n {\n name: 'Henry Potter',\n email: 'henry3potter@gmail.com',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-8.png',\n status: 'online'\n }\n]\n\nconst ComboboxUserDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n const selectedUser = users.find(user => user.name === value)\n\n return (\n \n
User combobox \n
\n \n \n {selectedUser ? (\n \n \n \n {selectedUser.name[0]} \n \n {selectedUser.name} \n \n ) : (\n Select user \n )}\n \n \n \n \n \n \n \n No users found. \n \n {users.map(user => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n \n \n \n {user.name[0]} \n \n \n {user.name} \n {user.email} \n \n \n {value === user.name && }\n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxUserDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-09.json b/public/r/combobox-09.json
new file mode 100644
index 0000000..ff907dd
--- /dev/null
+++ b/public/r/combobox-09.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-09",
+ "type": "registry:component",
+ "title": "Combobox 9",
+ "description": "Country selector combobox with flag icons and country selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-09.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst countries = [\n { value: '1', label: 'India', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/india.png' },\n { value: '2', label: 'China', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/china.png' },\n { value: '3', label: 'Monaco', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/monaco.png' },\n { value: '4', label: 'Serbia', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/serbia.png' },\n { value: '5', label: 'Romania', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/romania.png' },\n { value: '6', label: 'Mayotte', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/mayotte.png' },\n { value: '7', label: 'Iraq', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/iraq.png' },\n { value: '8', label: 'Syria', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/syria.png' },\n { value: '9', label: 'Korea', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/korea.png' },\n { value: '10', label: 'Zimbabwe', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/zimbabwe.png' }\n]\n\nconst ComboboxCountryFlagDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n return (\n \n
Options with flag and search \n
\n \n \n {value ? (\n \n item.label === value)?.flag} alt={value} className='h-4 w-5' />\n {value} \n \n ) : (\n Select country \n )}\n \n \n \n \n \n \n \n No country found. \n {countries.map(country => (\n {\n setValue(currentValue)\n setOpen(false)\n }}\n >\n \n {country.label}\n {value === country.value && }\n \n ))}\n \n \n \n \n
\n )\n}\n\nexport default ComboboxCountryFlagDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-10.json b/public/r/combobox-10.json
new file mode 100644
index 0000000..00bc1fb
--- /dev/null
+++ b/public/r/combobox-10.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-10",
+ "type": "registry:component",
+ "title": "Combobox 10",
+ "description": "Multi-select framework combobox with badge display and removable selections",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-10.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon, XIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst frameworks = [\n { value: 'react', label: 'React' },\n { value: 'nextjs', label: 'Nextjs' },\n { value: 'angular', label: 'Angular' },\n { value: 'vue', label: 'VueJS' },\n { value: 'django', label: 'Django' },\n { value: 'astro', label: 'Astro' },\n { value: 'remix', label: 'Remix' },\n { value: 'svelte', label: 'Svelte' },\n { value: 'solidjs', label: 'SolidJS' },\n { value: 'qwik', label: 'Qwik' }\n]\n\nconst ComboboxMultipleDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [selectedValues, setSelectedValues] = useState(['london', 'react'])\n\n const toggleSelection = (value: string) => {\n setSelectedValues(prev => (prev.includes(value) ? prev.filter(v => v !== value) : [...prev, value]))\n }\n\n const removeSelection = (value: string) => {\n setSelectedValues(prev => prev.filter(v => v !== value))\n }\n\n return (\n \n
Multiple combobox \n
\n \n \n \n {selectedValues.length > 0 ? (\n selectedValues.map(val => {\n const framework = frameworks.find(c => c.value === val)\n\n return framework ? (\n \n {framework.label}\n {\n e.stopPropagation()\n removeSelection(val)\n }}\n asChild\n >\n \n \n \n \n \n ) : null\n })\n ) : (\n Select framework \n )}\n
\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n toggleSelection(framework.value)}\n >\n {framework.label} \n {selectedValues.includes(framework.value) && }\n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxMultipleDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-11.json b/public/r/combobox-11.json
new file mode 100644
index 0000000..c4ab234
--- /dev/null
+++ b/public/r/combobox-11.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-11",
+ "type": "registry:component",
+ "title": "Combobox 11",
+ "description": "Multiple-select combobox with expandable badge view to show or hide selected items dynamically",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-11.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon, XIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst frameworks = [\n { value: 'react', label: 'React' },\n { value: 'nextjs', label: 'Nextjs' },\n { value: 'angular', label: 'Angular' },\n { value: 'vue', label: 'VueJS' },\n { value: 'django', label: 'Django' },\n { value: 'astro', label: 'Astro' },\n { value: 'remix', label: 'Remix' },\n { value: 'svelte', label: 'Svelte' },\n { value: 'solidjs', label: 'SolidJS' },\n { value: 'qwik', label: 'Qwik' }\n]\n\nconst ComboboxMultipleExpandableDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [expanded, setExpanded] = useState(false)\n\n const [selectedValues, setSelectedValues] = useState(['react', 'qwik', 'solidjs', 'angular', 'astro'])\n\n const toggleSelection = (value: string) => {\n setSelectedValues(prev => (prev.includes(value) ? prev.filter(v => v !== value) : [...prev, value]))\n }\n\n const removeSelection = (value: string) => {\n setSelectedValues(prev => prev.filter(v => v !== value))\n }\n\n // Define maxShownItems before using visibleItems\n const maxShownItems = 2\n const visibleItems = expanded ? selectedValues : selectedValues.slice(0, maxShownItems)\n const hiddenCount = selectedValues.length - visibleItems.length\n\n return (\n \n
Multiple combobox expandable \n
\n \n \n \n {selectedValues.length > 0 ? (\n <>\n {visibleItems.map(val => {\n const framework = frameworks.find(c => c.value === val)\n\n return framework ? (\n \n {framework.label}\n {\n e.stopPropagation()\n removeSelection(val)\n }}\n asChild\n >\n \n \n \n \n \n ) : null\n })}\n {hiddenCount > 0 || expanded ? (\n {\n e.stopPropagation()\n setExpanded(prev => !prev)\n }}\n className='rounded-sm'\n >\n {expanded ? 'Show Less' : `+${hiddenCount} more`}\n \n ) : null}\n >\n ) : (\n Select framework \n )}\n
\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n toggleSelection(framework.value)}\n >\n {framework.label} \n {selectedValues.includes(framework.value) && }\n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxMultipleExpandableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-12.json b/public/r/combobox-12.json
new file mode 100644
index 0000000..bb7b5ae
--- /dev/null
+++ b/public/r/combobox-12.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-12",
+ "type": "registry:component",
+ "title": "Combobox 12",
+ "description": "Multi-select combobox with a count badge showing the number of selected frameworks.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-12.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst frameworks = [\n { value: 'react', label: 'React' },\n { value: 'nextjs', label: 'Nextjs' },\n { value: 'angular', label: 'Angular' },\n { value: 'vue', label: 'VueJS' },\n { value: 'django', label: 'Django' },\n { value: 'astro', label: 'Astro' },\n { value: 'remix', label: 'Remix' },\n { value: 'svelte', label: 'Svelte' },\n { value: 'solidjs', label: 'SolidJS' },\n { value: 'qwik', label: 'Qwik' }\n]\n\nconst ComboboxMultipleCountBadgeDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n\n const [selectedValues, setSelectedValues] = useState([\n 'react',\n 'nextjs',\n 'angular',\n 'vue',\n 'django',\n 'astro'\n ])\n\n const toggleSelection = (value: string) => {\n setSelectedValues(prev => (prev.includes(value) ? prev.filter(v => v !== value) : [...prev, value]))\n }\n\n return (\n \n
Multiple Count badge \n
\n \n \n {selectedValues.length > 0 ? (\n \n \n {selectedValues.length}\n {' '}\n frameworks selected\n \n ) : (\n Select framework \n )}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n toggleSelection(framework.value)}\n >\n {framework.label} \n {selectedValues.includes(framework.value) && }\n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxMultipleCountBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/combobox-13.json b/public/r/combobox-13.json
new file mode 100644
index 0000000..2ef9042
--- /dev/null
+++ b/public/r/combobox-13.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-13",
+ "type": "registry:component",
+ "title": "Combobox 13",
+ "description": "Framework selector combobox with smooth animations and motion effects",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-13.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js'\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit'\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js'\n },\n {\n value: 'remix',\n label: 'Remix'\n },\n {\n value: 'astro',\n label: 'Astro'\n }\n]\n\nconst ComboboxSlideInDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n return (\n \n
Combobox menu slide-in from bottom \n
\n \n \n {value ? frameworks.find(framework => framework.value === value)?.label : 'Select framework...'}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n \n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxSlideInDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-13.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/combobox-14.json b/public/r/combobox-14.json
new file mode 100644
index 0000000..56b44e1
--- /dev/null
+++ b/public/r/combobox-14.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "combobox-14",
+ "type": "registry:component",
+ "title": "Combobox 14",
+ "description": "Framework selector combobox with floating label animation and enhanced styling",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-14.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js'\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit'\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js'\n },\n {\n value: 'remix',\n label: 'Remix'\n },\n {\n value: 'astro',\n label: 'Astro'\n }\n]\n\nconst ComboboxSlideInDemo = () => {\n const id = useId()\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n return (\n \n
Combobox menu zoom-in \n
\n \n \n {value ? frameworks.find(framework => framework.value === value)?.label : 'Select framework...'}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n \n \n ))}\n \n \n \n \n \n
\n )\n}\n\nexport default ComboboxSlideInDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-14.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/contact-us-page-01.json b/public/r/contact-us-page-01.json
new file mode 100644
index 0000000..b027e26
--- /dev/null
+++ b/public/r/contact-us-page-01.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "contact-us-page-01",
+ "type": "registry:block",
+ "title": "Contact Us 1",
+ "description": "Two-column layout with contact illustration image and contact information grid featuring avatar icons and contact details",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/contact-us-page/contact-us-page-01/page.tsx",
+ "content": "import { Clock8Icon, MapPinIcon, BriefcaseBusinessIcon, PhoneIcon } from 'lucide-react'\n\nimport ContactUs from '@/components/shadcn-studio/blocks/contact-us-page-01/contact-us-page-01'\n\nconst contactInfo = [\n {\n title: 'Office Hours',\n icon: Clock8Icon,\n description: 'Monday-Friday\\n8:00 am to 5:00 pm'\n },\n {\n title: 'Our Address',\n icon: MapPinIcon,\n description: '802 Perston Rd,Maine\\n96812, USA'\n },\n {\n title: 'Office 2',\n icon: BriefcaseBusinessIcon,\n description: '802 Perston Rd,Maine\\n96812, USA'\n },\n {\n title: 'Get in Touch',\n icon: PhoneIcon,\n description: '+1-316-888-9685\\n+1-316-477-0169'\n }\n]\n\nconst ContactUsPage = () => {\n return \n}\n\nexport default ContactUsPage\n",
+ "type": "registry:page",
+ "target": "app/contact-us-page-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/contact-us-page-01/contact-us-page-01.tsx",
+ "content": "import type { ComponentType } from 'react'\n\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\n\ntype ContactInfo = {\n title: string\n icon: ComponentType\n description: string\n}[]\n\nconst ContactUs = ({ contactInfo }: { contactInfo: ContactInfo }) => {\n return (\n \n \n {/* Header */}\n
\n
Contact Us \n \n \n\n
\n
\n\n
\n
Happy to help you! \n
\n shadcn/studio gives you the blocks and components you need to create a truly professional website, landing\n page or admin panel for your SaaS and gives the blocks.\n
\n\n {/* Contact Info Grid */}\n
\n {contactInfo.map((info, index) => (\n
\n \n \n \n \n \n \n \n
{info.title} \n
\n {info.description.split('\\n').map((line, idx) => (\n
{line}
\n ))}\n
\n
\n \n \n ))}\n
\n
\n
\n
\n \n )\n}\n\nexport default ContactUs\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/contact-us-page-01/contact-us-page-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "contact-us-page"
+ }
+}
\ No newline at end of file
diff --git a/public/r/corporate.json b/public/r/corporate.json
new file mode 100644
index 0000000..add49de
--- /dev/null
+++ b/public/r/corporate.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "corporate",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Inter, sans-serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "font-serif": "Source Serif 4, serif",
+ "radius": "0.375rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.21 0.03 263.61)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.21 0.03 263.61)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.21 0.03 263.61)",
+ "primary": "oklch(0.48 0.20 260.47)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.97 0 0)",
+ "secondary-foreground": "oklch(0.37 0.03 259.73)",
+ "muted": "oklch(0.97 0 0)",
+ "muted-foreground": "oklch(0.55 0.02 264.41)",
+ "accent": "oklch(0.95 0.02 260.18)",
+ "accent-foreground": "oklch(0.48 0.20 260.47)",
+ "destructive": "oklch(0.58 0.22 27.29)",
+ "border": "oklch(0.93 0.01 261.82)",
+ "input": "oklch(0.93 0.01 261.82)",
+ "ring": "oklch(0.48 0.20 260.47)",
+ "chart-1": "oklch(0.48 0.20 260.47)",
+ "chart-2": "oklch(0.56 0.24 260.92)",
+ "chart-3": "oklch(0.40 0.16 259.61)",
+ "chart-4": "oklch(0.43 0.16 259.82)",
+ "chart-5": "oklch(0.29 0.07 261.20)",
+ "sidebar": "oklch(0.97 0 0)",
+ "sidebar-foreground": "oklch(0.21 0.03 263.61)",
+ "sidebar-primary": "oklch(0.48 0.20 260.47)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.95 0.02 260.18)",
+ "sidebar-accent-foreground": "oklch(0.48 0.20 260.47)",
+ "sidebar-border": "oklch(0.93 0.01 261.82)",
+ "sidebar-ring": "oklch(0.48 0.20 260.47)",
+ "font-sans": "Inter, sans-serif",
+ "font-serif": "Source Serif 4, serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "radius": "0.375rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.26 0.03 262.67)",
+ "foreground": "oklch(0.93 0.01 261.82)",
+ "card": "oklch(0.30 0.03 260.51)",
+ "card-foreground": "oklch(0.93 0.01 261.82)",
+ "popover": "oklch(0.30 0.03 260.51)",
+ "popover-foreground": "oklch(0.93 0.01 261.82)",
+ "primary": "oklch(0.56 0.24 260.92)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.35 0.04 261.40)",
+ "secondary-foreground": "oklch(0.93 0.01 261.82)",
+ "muted": "oklch(0.30 0.03 260.51)",
+ "muted-foreground": "oklch(0.71 0.02 261.33)",
+ "accent": "oklch(0.33 0.04 264.63)",
+ "accent-foreground": "oklch(0.93 0.01 261.82)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.35 0.04 261.40)",
+ "input": "oklch(0.35 0.04 261.40)",
+ "ring": "oklch(0.56 0.24 260.92)",
+ "chart-1": "oklch(0.56 0.24 260.92)",
+ "chart-2": "oklch(0.48 0.20 260.47)",
+ "chart-3": "oklch(0.69 0.17 255.59)",
+ "chart-4": "oklch(0.43 0.16 259.82)",
+ "chart-5": "oklch(0.29 0.07 261.20)",
+ "sidebar": "oklch(0.26 0.03 262.67)",
+ "sidebar-foreground": "oklch(0.93 0.01 261.82)",
+ "sidebar-primary": "oklch(0.56 0.24 260.92)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.33 0.04 264.63)",
+ "sidebar-accent-foreground": "oklch(0.93 0.01 261.82)",
+ "sidebar-border": "oklch(0.35 0.04 261.40)",
+ "sidebar-ring": "oklch(0.56 0.24 260.92)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/cta-section-01.json b/public/r/cta-section-01.json
new file mode 100644
index 0000000..2787c12
--- /dev/null
+++ b/public/r/cta-section-01.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "cta-section-01",
+ "type": "registry:block",
+ "title": "CTA 1",
+ "description": "Rounded card layout with app download content featuring heading, description, and App Store/Google Play download buttons",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/cta-section/cta-section-01/page.tsx",
+ "content": "import CTA from '@/components/shadcn-studio/blocks/cta-section-01/cta-section-01'\n\nconst CTASection = () => {\n return \n}\n\nexport default CTASection\n",
+ "type": "registry:page",
+ "target": "app/cta-section-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/cta-section-01/cta-section-01.tsx",
+ "content": "import { Card, CardContent } from '@/components/ui/card'\n\nconst CTA = () => {\n return (\n \n \n
\n \n \n
Download our mobile app \n
\n With a variety of unique blocks, you can effortlessly create a page without any coding. Build your next\n landing page with ease.\n
\n
\n \n
\n
\n
\n
Download on the
\n
App Store
\n
\n
\n\n
\n
\n
\n
Download on the
\n
Google Play
\n
\n
\n
\n \n \n
\n \n )\n}\n\nexport default CTA\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/cta-section-01/cta-section-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "cta-section"
+ }
+}
\ No newline at end of file
diff --git a/public/r/dashboard-dialog-01.json b/public/r/dashboard-dialog-01.json
new file mode 100644
index 0000000..039c157
--- /dev/null
+++ b/public/r/dashboard-dialog-01.json
@@ -0,0 +1,36 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dashboard-dialog-01",
+ "type": "registry:block",
+ "title": "Dashboard Dialog 1",
+ "description": "A subscription plan selection dialog with pricing options, features comparison, and radio button selection for choosing between different tiers.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dialog",
+ "label",
+ "radio-group",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-dialog/dashboard-dialog-01/page.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport PlanDialog from '@/components/shadcn-studio/blocks/dashboard-dialog-01/dialog-plan'\n\nconst plansData = [\n {\n id: '1',\n title: 'Basic plan',\n price: 10,\n description: 'Includes 20GB individual data.',\n features: ['32+ integrations', 'Basic reporting', '20GB individual data', 'Basic support']\n },\n {\n id: '2',\n title: 'Starter Package',\n price: 12,\n description: 'Comes with 512GB personal data.',\n features: [\n '35+ integrations',\n 'Essential reporting features',\n '512GB personal data included',\n 'Standard support services'\n ]\n }\n]\n\nconst DialogPage = () => {\n return (\n \n
\n Select Plan \n \n }\n data={plansData}\n />\n \n )\n}\n\nexport default DialogPage\n",
+ "type": "registry:page",
+ "target": "app/dashboard-dialog-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dashboard-dialog-01/dialog-plan.tsx",
+ "content": "'use client'\n\nimport { useState, type ReactNode } from 'react'\n\nimport { CircleCheckIcon, DollarSignIcon, MessageSquareTextIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nimport { cn } from '@/lib/utils'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n className?: string\n data: {\n id: string\n title: string\n price: number\n description: string\n features: string[]\n }[]\n}\n\nconst PlanDialog = ({ defaultOpen = false, trigger, data, className }: Props) => {\n const [open, setOpen] = useState(defaultOpen)\n const [plan, setPlan] = useState('1')\n\n return (\n \n setOpen(true)}>\n {trigger}\n \n [data-slot=dialog-close]>svg]:size-5', className)}>\n \n \n \n \n \n \n \n Select Plan \n Simple and flexible per-user pricing \n
\n \n\n {/* Plan selection */}\n \n {data.map(planData => (\n \n
\n
\n \n {planData.title}\n \n \n
\n
\n ${planData.price} \n /user \n
\n
{planData.description}
\n
\n\n
\n {planData.features.map((feature, index) => (\n
\n \n {feature} \n
\n ))}\n
\n
\n ))}\n \n\n \n \n \n Chat with us\n \n \n \n \n Cancel\n \n \n Purchase now \n
\n \n \n \n )\n}\n\nexport default PlanDialog\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dashboard-dialog-01/dialog-plan.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-dialog"
+ }
+}
\ No newline at end of file
diff --git a/public/r/dashboard-dropdown-01.json b/public/r/dashboard-dropdown-01.json
new file mode 100644
index 0000000..9e85d44
--- /dev/null
+++ b/public/r/dashboard-dropdown-01.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dashboard-dropdown-01",
+ "type": "registry:block",
+ "title": "Dashboard Dropdown 1",
+ "description": "A language selection dropdown with flag icons and language options for internationalization and localization features.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-dropdown/dashboard-dropdown-01/page.tsx",
+ "content": "import { LanguagesIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\n\nimport LanguageDropdown from '@/components/shadcn-studio/blocks/dropdown-language'\n\nconst DropdownPage = () => {\n return (\n \n \n \n \n }\n />\n
\n )\n}\n\nexport default DropdownPage\n",
+ "type": "registry:page",
+ "target": "app/dashboard-dropdown-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-language.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\nimport type { ReactNode } from 'react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n align?: 'start' | 'center' | 'end'\n}\n\nconst LanguageDropdown = ({ defaultOpen, align, trigger }: Props) => {\n const [language, setLanguage] = useState('english')\n\n return (\n \n {trigger} \n \n \n \n English\n \n \n Deutsch\n \n \n Española\n \n \n Português\n \n \n 한국인\n \n \n \n \n )\n}\n\nexport default LanguageDropdown\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-language.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-dropdown"
+ }
+}
\ No newline at end of file
diff --git a/public/r/dashboard-dropdown-02.json b/public/r/dashboard-dropdown-02.json
new file mode 100644
index 0000000..7ff9928
--- /dev/null
+++ b/public/r/dashboard-dropdown-02.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dashboard-dropdown-02",
+ "type": "registry:block",
+ "title": "Dashboard Dropdown 2",
+ "description": "A user profile dropdown with avatar display, user information, profile settings, and account actions for user management.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-dropdown/dashboard-dropdown-02/page.tsx",
+ "content": "import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'\n\nimport ProfileDropdown from '@/components/shadcn-studio/blocks/dropdown-profile'\n\nconst DropdownPage = () => {\n return (\n \n
\n \n \n JD \n \n \n }\n />\n \n )\n}\n\nexport default DropdownPage\n",
+ "type": "registry:page",
+ "target": "app/dashboard-dropdown-02/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-profile.tsx",
+ "content": "import type { ReactNode } from 'react'\n\nimport {\n UserIcon,\n SettingsIcon,\n CreditCardIcon,\n UsersIcon,\n SquarePenIcon,\n CirclePlusIcon,\n LogOutIcon\n} from 'lucide-react'\n\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n align?: 'start' | 'center' | 'end'\n}\n\nconst ProfileDropdown = ({ trigger, defaultOpen, align = 'end' }: Props) => {\n return (\n \n {trigger} \n \n \n \n \n John Doe \n john.doe@example.com \n
\n \n\n \n\n \n \n \n My account \n \n \n \n Settings \n \n \n \n Billing \n \n \n\n \n\n \n \n \n Manage team \n \n \n \n Customization \n \n \n \n Add team account \n \n \n\n \n\n \n \n Logout \n \n \n \n )\n}\n\nexport default ProfileDropdown\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-profile.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-dropdown"
+ }
+}
\ No newline at end of file
diff --git a/public/r/dashboard-footer-01.json b/public/r/dashboard-footer-01.json
new file mode 100644
index 0000000..b89c84c
--- /dev/null
+++ b/public/r/dashboard-footer-01.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dashboard-footer-01",
+ "type": "registry:block",
+ "title": "Dashboard Footer 1",
+ "description": "A complete dashboard layout with sidebar, main content area, and footer featuring copyright text with social media icons (Facebook, Instagram, LinkedIn, Twitter) for application branding.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "sidebar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-footer/dashboard-footer-01/page.tsx",
+ "content": "import { FacebookIcon, InstagramIcon, LinkedinIcon, TwitterIcon } from 'lucide-react'\n\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Sidebar, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'\n\nconst Footer = () => {\n return (\n \n
\n \n
\n \n \n
\n
\n \n \n
\n \n \n \n
\n
\n \n
\n )\n}\n\nexport default Footer\n",
+ "type": "registry:page",
+ "target": "app/dashboard-footer-01/page.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-footer"
+ }
+}
\ No newline at end of file
diff --git a/public/r/dashboard-header-01.json b/public/r/dashboard-header-01.json
new file mode 100644
index 0000000..837e013
--- /dev/null
+++ b/public/r/dashboard-header-01.json
@@ -0,0 +1,43 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dashboard-header-01",
+ "type": "registry:block",
+ "title": "Dashboard Header 1",
+ "description": "Comprehensive dashboard header with navigation, breadcrumbs, user profile, and language dropdown",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "separator",
+ "sidebar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-header/dashboard-header-01/page.tsx",
+ "content": "import { LanguagesIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Separator } from '@/components/ui/separator'\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Sidebar, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\n\nimport LanguageDropdown from '@/components/shadcn-studio/blocks/dropdown-language'\nimport ProfileDropdown from '@/components/shadcn-studio/blocks/dropdown-profile'\n\nconst Header = () => {\n return (\n \n
\n \n
\n \n \n
\n
\n \n \n
\n \n \n \n
\n
\n \n
\n )\n}\n\nexport default Header\n",
+ "type": "registry:page",
+ "target": "app/dashboard-header-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-language.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\nimport type { ReactNode } from 'react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n align?: 'start' | 'center' | 'end'\n}\n\nconst LanguageDropdown = ({ defaultOpen, align, trigger }: Props) => {\n const [language, setLanguage] = useState('english')\n\n return (\n \n {trigger} \n \n \n \n English\n \n \n Deutsch\n \n \n Española\n \n \n Português\n \n \n 한국인\n \n \n \n \n )\n}\n\nexport default LanguageDropdown\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-language.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-profile.tsx",
+ "content": "import type { ReactNode } from 'react'\n\nimport {\n UserIcon,\n SettingsIcon,\n CreditCardIcon,\n UsersIcon,\n SquarePenIcon,\n CirclePlusIcon,\n LogOutIcon\n} from 'lucide-react'\n\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n align?: 'start' | 'center' | 'end'\n}\n\nconst ProfileDropdown = ({ trigger, defaultOpen, align = 'end' }: Props) => {\n return (\n \n {trigger} \n \n \n \n \n John Doe \n john.doe@example.com \n
\n \n\n \n\n \n \n \n My account \n \n \n \n Settings \n \n \n \n Billing \n \n \n\n \n\n \n \n \n Manage team \n \n \n \n Customization \n \n \n \n Add team account \n \n \n\n \n\n \n \n Logout \n \n \n \n )\n}\n\nexport default ProfileDropdown\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-profile.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-header"
+ }
+}
\ No newline at end of file
diff --git a/public/r/dashboard-shell-01.json b/public/r/dashboard-shell-01.json
new file mode 100644
index 0000000..0fed3e6
--- /dev/null
+++ b/public/r/dashboard-shell-01.json
@@ -0,0 +1,86 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dashboard-shell-01",
+ "type": "registry:block",
+ "title": "Dashboard Shell 1",
+ "description": "Comprehensive dashboard layout with sidebar navigation, breadcrumb header, sales metrics charts, statistics cards, transaction tables, and widget components for business analytics and reporting",
+ "dependencies": [
+ "@tanstack/react-table",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "badge",
+ "breadcrumb",
+ "button",
+ "card",
+ "chart",
+ "dropdown-menu",
+ "pagination",
+ "progress",
+ "separator",
+ "sidebar",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-shell/dashboard-shell-01/page.tsx",
+ "content": "import {\n ArrowRightLeftIcon,\n CalendarClockIcon,\n CalendarX2Icon,\n ChartNoAxesCombinedIcon,\n ChartPieIcon,\n ChartSplineIcon,\n ClipboardListIcon,\n Clock9Icon,\n CrownIcon,\n FacebookIcon,\n HashIcon,\n InstagramIcon,\n LanguagesIcon,\n LinkedinIcon,\n SettingsIcon,\n SquareActivityIcon,\n TriangleAlertIcon,\n TruckIcon,\n TwitterIcon,\n Undo2Icon,\n UsersIcon\n} from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator\n} from '@/components/ui/breadcrumb'\nimport { Button } from '@/components/ui/button'\nimport { Card } from '@/components/ui/card'\nimport { Separator } from '@/components/ui/separator'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger\n} from '@/components/ui/sidebar'\n\nimport LanguageDropdown from '@/components/shadcn-studio/blocks/dropdown-language'\nimport ProductInsightsCard from '@/components/shadcn-studio/blocks/widget-product-insights'\nimport ProfileDropdown from '@/components/shadcn-studio/blocks/dropdown-profile'\nimport SalesMetricsCard from '@/components/shadcn-studio/blocks/chart-sales-metrics'\nimport StatisticsCard from '@/components/shadcn-studio/blocks/statistics-card-01'\nimport TotalEarningCard from '@/components/shadcn-studio/blocks/widget-total-earning'\nimport TransactionDatatable, { type Item } from '@/components/shadcn-studio/blocks/datatable-transaction'\n\n// Statistics card data\nconst StatisticsCardData = [\n {\n icon: ,\n value: '42',\n title: 'Shipped Orders',\n changePercentage: '+18.2%'\n },\n {\n icon: ,\n value: '8',\n title: 'Damaged Returns',\n changePercentage: '-8.7%'\n },\n {\n icon: ,\n value: '27',\n title: 'Missed Delivery Slots',\n changePercentage: '+4.3%'\n }\n]\n\n// Earning data for Total Earning card\nconst earningData = [\n {\n img: 'https://cdn.shadcnstudio.com/ss-assets/blocks/dashboard-application/widgets/zipcar.png',\n platform: 'Zipcar',\n technologies: 'Vuejs & HTML',\n earnings: '-$23,569.26',\n progressPercentage: 75\n },\n {\n img: 'https://cdn.shadcnstudio.com/ss-assets/blocks/dashboard-application/widgets/bitbank.png',\n platform: 'Bitbank',\n technologies: 'Figma & React',\n earnings: '-$12,650.31',\n progressPercentage: 25\n }\n]\n\n// Transaction table data\nconst transactionData: Item[] = [\n {\n id: '1',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n avatarFallback: 'JA',\n name: 'Jack Alfredo',\n amount: 316.0,\n status: 'paid',\n email: 'jack@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '2',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n avatarFallback: 'MG',\n name: 'Maria Gonzalez',\n amount: 253.4,\n status: 'pending',\n email: 'maria.g@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '3',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n avatarFallback: 'JD',\n name: 'John Doe',\n amount: 852.0,\n status: 'paid',\n email: 'john.doe@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '4',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-4.png',\n avatarFallback: 'EC',\n name: 'Emily Carter',\n amount: 889.0,\n status: 'pending',\n email: 'emily.carter@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '5',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n avatarFallback: 'DL',\n name: 'David Lee',\n amount: 723.16,\n status: 'paid',\n email: 'david.lee@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '6',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n avatarFallback: 'SP',\n name: 'Sophia Patel',\n amount: 612.0,\n status: 'failed',\n email: 'sophia.patel@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '7',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-7.png',\n avatarFallback: 'RW',\n name: 'Robert Wilson',\n amount: 445.25,\n status: 'paid',\n email: 'robert.wilson@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '8',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-8.png',\n avatarFallback: 'LM',\n name: 'Lisa Martinez',\n amount: 297.8,\n status: 'processing',\n email: 'lisa.martinez@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '9',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-9.png',\n avatarFallback: 'MT',\n name: 'Michael Thompson',\n amount: 756.9,\n status: 'paid',\n email: 'michael.thompson@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '10',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-10.png',\n avatarFallback: 'AJ',\n name: 'Amanda Johnson',\n amount: 189.5,\n status: 'pending',\n email: 'amanda.johnson@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '11',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-11.png',\n avatarFallback: 'KB',\n name: 'Kevin Brown',\n amount: 1024.75,\n status: 'paid',\n email: 'kevin.brown@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '12',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-12.png',\n avatarFallback: 'SD',\n name: 'Sarah Davis',\n amount: 367.2,\n status: 'failed',\n email: 'sarah.davis@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '13',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-13.png',\n avatarFallback: 'CG',\n name: 'Christopher Garcia',\n amount: 598.45,\n status: 'processing',\n email: 'christopher.garcia@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '14',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-14.png',\n avatarFallback: 'JR',\n name: 'Jennifer Rodriguez',\n amount: 821.3,\n status: 'paid',\n email: 'jennifer.rodriguez@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '15',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-15.png',\n avatarFallback: 'DM',\n name: 'Daniel Miller',\n amount: 156.75,\n status: 'pending',\n email: 'daniel.miller@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '16',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n avatarFallback: 'NW',\n name: 'Nicole White',\n amount: 934.1,\n status: 'paid',\n email: 'nicole.white@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '17',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-17.png',\n avatarFallback: 'AL',\n name: 'Anthony Lopez',\n amount: 412.85,\n status: 'failed',\n email: 'anthony.lopez@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '18',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-18.png',\n avatarFallback: 'MH',\n name: 'Michelle Harris',\n amount: 675.5,\n status: 'processing',\n email: 'michelle.harris@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '19',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-19.png',\n avatarFallback: 'JC',\n name: 'James Clark',\n amount: 289.95,\n status: 'paid',\n email: 'james.clark@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '20',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-20.png',\n avatarFallback: 'RL',\n name: 'Rachel Lewis',\n amount: 1156.25,\n status: 'pending',\n email: 'rachel.lewis@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '21',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-21.png',\n avatarFallback: 'TY',\n name: 'Thomas Young',\n amount: 543.6,\n status: 'paid',\n email: 'thomas.young@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '22',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-22.png',\n avatarFallback: 'SB',\n name: 'Stephanie Brown',\n amount: 789.3,\n status: 'processing',\n email: 'stephanie.brown@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '23',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-23.png',\n avatarFallback: 'BM',\n name: 'Brandon Moore',\n amount: 425.75,\n status: 'failed',\n email: 'brandon.moore@shadcnstudio.com',\n paidBy: 'visa'\n },\n {\n id: '24',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-24.png',\n avatarFallback: 'KT',\n name: 'Kelly Taylor',\n amount: 1203.5,\n status: 'paid',\n email: 'kelly.taylor@shadcnstudio.com',\n paidBy: 'mastercard'\n },\n {\n id: '25',\n avatar: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-25.png',\n avatarFallback: 'MA',\n name: 'Mark Anderson',\n amount: 356.2,\n status: 'pending',\n email: 'mark.anderson@shadcnstudio.com',\n paidBy: 'visa'\n }\n]\n\nconst DashboardShell = () => {\n return (\n \n )\n}\n\nexport default DashboardShell\n",
+ "type": "registry:page",
+ "target": "app/dashboard-shell-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/chart-sales-metrics.tsx",
+ "content": "'use client'\n\nimport {\n BadgePercentIcon,\n ChartNoAxesCombinedIcon,\n CirclePercentIcon,\n DollarSignIcon,\n ShoppingBagIcon,\n TrendingUpIcon\n} from 'lucide-react'\n\nimport { Bar, BarChart, Label, Pie, PieChart } from 'recharts'\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\nimport { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart'\n\nconst salesPlanPercentage = 54\nconst totalBars = 24\nconst filledBars = Math.round((salesPlanPercentage * totalBars) / 100)\n\n// Sales chart data\nconst salesChartData = Array.from({ length: totalBars }, (_, index) => {\n const date = new Date(2025, 5, 15)\n\n const formattedDate = date.toLocaleDateString('en-GB', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric'\n })\n\n return {\n date: formattedDate,\n sales: index < filledBars ? 315 : 0\n }\n})\n\nconst salesChartConfig = {\n sales: {\n label: 'Sales'\n }\n} satisfies ChartConfig\n\nconst MetricsData = [\n {\n icons: ,\n title: 'Sales trend',\n value: '$11,548'\n },\n {\n icons: ,\n title: 'Discount offers',\n value: '$1,326'\n },\n {\n icons: ,\n title: 'Net profit',\n value: '$17,356'\n },\n {\n icons: ,\n title: 'Total orders',\n value: '248'\n }\n]\n\nconst revenueChartData = [\n { month: 'january', sales: 340, fill: 'var(--color-january)' },\n { month: 'february', sales: 200, fill: 'var(--color-february)' },\n { month: 'march', sales: 200, fill: 'var(--color-march)' }\n]\n\nconst revenueChartConfig = {\n sales: {\n label: 'Sales'\n },\n january: {\n label: 'January',\n color: 'var(--primary)'\n },\n february: {\n label: 'February',\n color: 'color-mix(in oklab, var(--primary) 60%, transparent)'\n },\n march: {\n label: 'March',\n color: 'color-mix(in oklab, var(--primary) 20%, transparent)'\n }\n} satisfies ChartConfig\n\nconst SalesMetricsCard = ({ className }: { className?: string }) => {\n return (\n \n \n \n
\n
Sales metrics \n
\n
\n
\n Sandy' Company \n sandy@company.com \n
\n
\n\n
\n {MetricsData.map((metric, index) => (\n
\n
\n \n {metric.icons}\n \n \n
\n {metric.title} \n {metric.value} \n
\n
\n ))}\n
\n
\n
\n \n Revenue goal \n \n\n \n \n \n } />\n \n {\n if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {\n return (\n \n \n 256.24\n \n \n Total Profit\n \n \n )\n }\n }}\n />\n \n \n \n \n\n \n Plan completed \n 56% \n \n \n
\n \n \n \n Sales plan \n {salesPlanPercentage}% \n Percentage profit from total sales \n
\n \n
Cohort analysis indicators \n
\n Analyzes the behaviour of a group of users who joined a product/service at the same time. over a certain\n period.\n \n
\n
\n \n Open Statistics \n
\n
\n \n Percentage Change \n
\n
\n\n
\n \n \n \n \n
\n \n \n \n \n )\n}\n\nexport default SalesMetricsCard\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/chart-sales-metrics.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/datatable-transaction.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronLeftIcon, ChevronRightIcon, EllipsisVerticalIcon } from 'lucide-react'\n\nimport type { ColumnDef, PaginationState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\nimport { Pagination, PaginationContent, PaginationEllipsis, PaginationItem } from '@/components/ui/pagination'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nimport { usePagination } from '@/hooks/use-pagination'\n\nexport type Item = {\n id: string\n avatar: string\n avatarFallback: string\n name: string\n email: string\n amount: number\n status: 'pending' | 'processing' | 'paid' | 'failed'\n paidBy: 'mastercard' | 'visa'\n}\n\nexport const columns: ColumnDef- [] = [\n {\n accessorKey: 'name',\n header: 'Customer',\n cell: ({ row }) => (\n
\n
\n \n {row.original.avatarFallback} \n \n
\n {row.getValue('name')} \n {row.original.email} \n
\n
\n )\n },\n {\n accessorKey: 'amount',\n header: 'Amount',\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('amount'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted} \n }\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: ({ row }) => (\n {row.getValue('status')} \n )\n },\n {\n accessorKey: 'paidBy',\n header: () => Paid by ,\n cell: ({ row }) => (\n \n )\n },\n {\n id: 'actions',\n header: () => 'Actions',\n cell: () => ,\n size: 60,\n enableHiding: false\n }\n]\n\nconst TransactionDatatable = ({ data }: { data: Item[] }) => {\n const pageSize = 5\n\n const [pagination, setPagination] = useState({\n pageIndex: 0,\n pageSize: pageSize\n })\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onPaginationChange: setPagination,\n state: {\n pagination\n }\n })\n\n const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n currentPage: table.getState().pagination.pageIndex + 1,\n totalPages: table.getPageCount(),\n paginationItemsToDisplay: 2\n })\n\n return (\n \n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n \n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n\n
\n
\n Showing{' '}\n \n {table.getState().pagination.pageIndex * table.getState().pagination.pageSize + 1} to{' '}\n {Math.min(\n Math.max(\n table.getState().pagination.pageIndex * table.getState().pagination.pageSize +\n table.getState().pagination.pageSize,\n 0\n ),\n table.getRowCount()\n )}\n {' '}\n of {table.getRowCount().toString()} entries \n
\n\n
\n
\n \n \n table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label='Go to previous page'\n >\n \n Previous\n \n \n\n {showLeftEllipsis && (\n \n \n \n )}\n\n {pages.map(page => {\n const isActive = page === table.getState().pagination.pageIndex + 1\n\n return (\n \n table.setPageIndex(page - 1)}\n aria-current={isActive ? 'page' : undefined}\n >\n {page}\n \n \n )\n })}\n\n {showRightEllipsis && (\n \n \n \n )}\n\n \n table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label='Go to next page'\n >\n Next\n \n \n \n \n \n
\n
\n
\n )\n}\n\nexport default TransactionDatatable\n\nfunction RowActions() {\n return (\n \n \n \n \n \n \n
\n \n \n \n \n Edit \n \n \n Duplicate \n \n \n Delete \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/datatable-transaction.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-language.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\nimport type { ReactNode } from 'react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n align?: 'start' | 'center' | 'end'\n}\n\nconst LanguageDropdown = ({ defaultOpen, align, trigger }: Props) => {\n const [language, setLanguage] = useState('english')\n\n return (\n \n {trigger} \n \n \n \n English\n \n \n Deutsch\n \n \n Española\n \n \n Português\n \n \n 한국인\n \n \n \n \n )\n}\n\nexport default LanguageDropdown\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-language.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-profile.tsx",
+ "content": "import type { ReactNode } from 'react'\n\nimport {\n UserIcon,\n SettingsIcon,\n CreditCardIcon,\n UsersIcon,\n SquarePenIcon,\n CirclePlusIcon,\n LogOutIcon\n} from 'lucide-react'\n\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\ntype Props = {\n trigger: ReactNode\n defaultOpen?: boolean\n align?: 'start' | 'center' | 'end'\n}\n\nconst ProfileDropdown = ({ trigger, defaultOpen, align = 'end' }: Props) => {\n return (\n \n {trigger} \n \n \n \n \n John Doe \n john.doe@example.com \n
\n \n\n \n\n \n \n \n My account \n \n \n \n Settings \n \n \n \n Billing \n \n \n\n \n\n \n \n \n Manage team \n \n \n \n Customization \n \n \n \n Add team account \n \n \n\n \n\n \n \n Logout \n \n \n \n )\n}\n\nexport default ProfileDropdown\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-profile.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/statistics-card-01.tsx",
+ "content": "import type { ReactNode } from 'react'\n\nimport { Card, CardContent, CardHeader } from '@/components/ui/card'\n\nimport { cn } from '@/lib/utils'\n\n// Statistics card data type\ntype StatisticsCardProps = {\n icon: ReactNode\n value: string\n title: string\n changePercentage: string\n className?: string\n}\n\nconst StatisticsCard = ({ icon, value, title, changePercentage, className }: StatisticsCardProps) => {\n return (\n \n \n \n {icon}\n
\n {value} \n \n \n {title} \n \n {changePercentage} \n than last week \n
\n \n \n )\n}\n\nexport default StatisticsCard\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/statistics-card-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/widget-product-insights.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart } from 'recharts'\n\nimport { Card, CardContent, CardHeader } from '@/components/ui/card'\nimport { type ChartConfig, ChartContainer } from '@/components/ui/chart'\nimport { Separator } from '@/components/ui/separator'\n\nimport { cn } from '@/lib/utils'\n\n// Product reached data\nconst productReachChartData = [\n { month: 'January', reached: 168 },\n { month: 'February', reached: 305 },\n { month: 'March', reached: 213 },\n { month: 'April', reached: 330 },\n { month: 'May', reached: 305 }\n]\n\nconst productReachChartConfig = {\n reached: {\n label: 'Reached',\n color: 'var(--primary)'\n }\n} satisfies ChartConfig\n\n// Order placed data\nconst orderPlacedChartData = [\n { month: 'January', orders: 168 },\n { month: 'February', orders: 305 },\n { month: 'March', orders: 213 },\n { month: 'April', orders: 330 },\n { month: 'May', orders: 305 }\n]\n\nconst orderPlacedChartConfig = {\n orders: {\n label: 'Orders',\n color: 'color-mix(in oklab, var(--primary) 10%, transparent)'\n }\n} satisfies ChartConfig\n\nconst ProductInsightsCard = ({ className }: { className?: string }) => {\n return (\n \n \n \n Product insight \n Published on 12 MAY 2025 - 6:10 PM \n
\n \n \n \n \n \n
\n Product reached \n 21,153 \n
\n
\n \n \n \n \n
\n\n \n
\n Order placed \n 2,123 \n
\n
\n \n \n \n \n
\n \n \n )\n}\n\nexport default ProductInsightsCard\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/widget-product-insights.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/widget-total-earning.tsx",
+ "content": "import { ChevronDownIcon, ChevronUpIcon, EllipsisVerticalIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardHeader } from '@/components/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\nimport { Progress } from '@/components/ui/progress'\n\nconst listItems = ['Share', 'Update', 'Refresh']\n\ntype Props = {\n title: string\n earning: number\n trend: 'up' | 'down'\n percentage: number\n comparisonText: string\n earningData: {\n img: string\n platform: string\n technologies: string\n earnings: string\n progressPercentage: number\n }[]\n className?: string\n}\n\nconst TotalEarningCard = ({ earningData, title, earning, trend, percentage, comparisonText, className }: Props) => {\n return (\n \n \n {title} \n \n \n \n \n Menu \n \n \n \n \n {listItems.map((item, index) => (\n {item} \n ))}\n \n \n \n \n \n \n
\n ${earning} \n \n {trend === 'up' ? : }\n {percentage}% \n \n
\n
{comparisonText} \n
\n \n {earningData.map((earning, index) => (\n
\n
\n
\n \n \n \n \n
\n {earning.platform} \n {earning.technologies} \n
\n
\n
\n
{earning.earnings}
\n
\n
\n
\n ))}\n
\n \n \n )\n}\n\nexport default TotalEarningCard\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/widget-total-earning.tsx"
+ },
+ {
+ "path": "src/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay\n}: UsePaginationProps): UsePaginationReturn {\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end)\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = Math.min(paginationItemsToDisplay, totalPages)\n }\n\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = Math.max(1, totalPages - paginationItemsToDisplay + 1)\n }\n\n return Array.from({ length: adjustedRange.end - adjustedRange.start + 1 }, (_, i) => adjustedRange.start + i)\n }\n\n const pages = calculatePaginationRange()\n\n // Determine ellipsis display based on the actual pages shown\n const showLeftEllipsis = pages.length > 0 && pages[0] > 1 && pages[0] > 2\n\n const showRightEllipsis =\n pages.length > 0 && pages[pages.length - 1] < totalPages && pages[pages.length - 1] < totalPages - 1\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis\n }\n}\n",
+ "type": "registry:hook",
+ "target": "hooks/use-pagination.ts"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-shell"
+ }
+}
\ No newline at end of file
diff --git a/public/r/dashboard-sidebar-01.json b/public/r/dashboard-sidebar-01.json
new file mode 100644
index 0000000..9a88f0e
--- /dev/null
+++ b/public/r/dashboard-sidebar-01.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dashboard-sidebar-01",
+ "type": "registry:block",
+ "title": "Dashboard Sidebar 1",
+ "description": "Social media analytics dashboard sidebar featuring Content Performance, Audience Insights, Hashtag Performance, Competitor Analysis, Influencer tracking, Campaign Tracking, Sentiment Tracking, Real Time Monitoring, and Schedule Post & Calendar navigation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "sidebar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-sidebar/dashboard-sidebar-01/page.tsx",
+ "content": "import {\n ArrowRightLeftIcon,\n CalendarClockIcon,\n ChartNoAxesCombinedIcon,\n ChartPieIcon,\n ChartSplineIcon,\n ClipboardListIcon,\n Clock9Icon,\n CrownIcon,\n HashIcon,\n SettingsIcon,\n SquareActivityIcon,\n Undo2Icon,\n UsersIcon\n} from 'lucide-react'\n\nimport { Card, CardContent } from '@/components/ui/card'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger\n} from '@/components/ui/sidebar'\n\nconst SidebarPage = () => {\n return (\n \n )\n}\n\nexport default SidebarPage\n",
+ "type": "registry:page",
+ "target": "app/dashboard-sidebar-01/page.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-sidebar"
+ }
+}
\ No newline at end of file
diff --git a/public/r/data-table-01.json b/public/r/data-table-01.json
new file mode 100644
index 0000000..d99cfea
--- /dev/null
+++ b/public/r/data-table-01.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-01",
+ "type": "registry:component",
+ "title": "Data Table 1",
+ "description": "Basic data table with records and row selection functionality",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-01.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst data: Payment[] = [\n {\n id: '1',\n name: 'Shang Chain',\n amount: 699,\n status: 'success',\n email: 'shang07@yahoo.com'\n },\n {\n id: '2',\n name: 'Kevin Lincoln',\n amount: 242,\n status: 'success',\n email: 'kevinli09@gmail.com'\n },\n {\n id: '3',\n name: 'Milton Rose',\n amount: 655,\n status: 'processing',\n email: 'rose96@gmail.com'\n },\n {\n id: '4',\n name: 'Silas Ryan',\n amount: 874,\n status: 'success',\n email: 'silas22@gmail.com'\n },\n {\n id: '5',\n name: 'Ben Tenison',\n amount: 541,\n status: 'failed',\n email: 'bent@hotmail.com'\n }\n]\n\nexport type Payment = {\n id: string\n name: string\n amount: number\n status: 'pending' | 'processing' | 'success' | 'failed'\n email: string\n}\n\nexport const columns: ColumnDef[] = [\n {\n id: 'select',\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n enableSorting: false,\n enableHiding: false\n },\n {\n accessorKey: 'name',\n header: 'Name',\n cell: ({ row }) => {row.getValue('name')}
\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: ({ row }) => {row.getValue('status')}
\n },\n {\n accessorKey: 'email',\n header: 'Email',\n cell: ({ row }) => {row.getValue('email')}
\n },\n {\n accessorKey: 'amount',\n header: () => Amount
,\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('amount'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted}
\n }\n }\n]\n\nconst DataTableDemo = () => {\n const [sorting, setSorting] = useState([])\n const [columnFilters, setColumnFilters] = useState([])\n const [columnVisibility, setColumnVisibility] = useState({})\n const [rowSelection, setRowSelection] = useState({})\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection\n }\n })\n\n return (\n \n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
Default data table
\n
\n )\n}\n\nexport default DataTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-02.json b/public/r/data-table-02.json
new file mode 100644
index 0000000..defa7a1
--- /dev/null
+++ b/public/r/data-table-02.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-02",
+ "type": "registry:component",
+ "title": "Data Table 2",
+ "description": "Density data table with density selection",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "select",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-02.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Rows2Icon, Rows3Icon, Rows4Icon } from 'lucide-react'\n\nimport type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nimport { cn } from '@/lib/utils'\n\nconst data: Payment[] = [\n {\n id: '1',\n name: 'Shang Chain',\n amount: 699,\n status: 'success',\n email: 'shang07@yahoo.com'\n },\n {\n id: '2',\n name: 'Kevin Lincoln',\n amount: 242,\n status: 'success',\n email: 'kevinli09@gmail.com'\n },\n {\n id: '3',\n name: 'Milton Rose',\n amount: 655,\n status: 'processing',\n email: 'rose96@gmail.com'\n },\n {\n id: '4',\n name: 'Silas Ryan',\n amount: 874,\n status: 'success',\n email: 'silas22@gmail.com'\n },\n {\n id: '5',\n name: 'Ben Tenison',\n amount: 541,\n status: 'failed',\n email: 'bent@hotmail.com'\n }\n]\n\nexport type Payment = {\n id: string\n name: string\n amount: number\n status: 'pending' | 'processing' | 'success' | 'failed'\n email: string\n}\n\nexport const columns: ColumnDef[] = [\n {\n id: 'select',\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n enableSorting: false,\n enableHiding: false\n },\n {\n header: 'Name',\n accessorKey: 'name',\n cell: ({ row }) => {row.getValue('name')}
\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: ({ row }) => {row.getValue('status')}
\n },\n {\n accessorKey: 'email',\n header: 'Email',\n cell: ({ row }) => {row.getValue('email')}
\n },\n {\n accessorKey: 'amount',\n header: () => Amount
,\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('amount'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted}
\n }\n }\n]\n\nconst DataTableDensityDemo = () => {\n const [density, setDensity] = useState()\n const [sorting, setSorting] = useState([])\n const [columnFilters, setColumnFilters] = useState([])\n const [columnVisibility, setColumnVisibility] = useState({})\n const [rowSelection, setRowSelection] = useState({})\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection\n }\n })\n\n return (\n \n
\n
\n \n \n \n \n \n Density \n \n \n \n Compact\n
\n \n \n \n Standard\n
\n \n \n \n \n Flexible\n
\n \n \n \n \n
\n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
\n Density data table{' '}\n \n Shadcn UI Blocks\n \n
\n
\n )\n}\n\nexport default DataTableDensityDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-03.json b/public/r/data-table-03.json
new file mode 100644
index 0000000..e556f8f
--- /dev/null
+++ b/public/r/data-table-03.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-03",
+ "type": "registry:component",
+ "title": "Data Table 3",
+ "description": "Payment records table with search filter, column visibility toggle, and refresh functionality",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "dropdown-menu",
+ "input",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-03.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon, Columns3Icon, RefreshCcwIcon, SearchIcon } from 'lucide-react'\n\nimport type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\nimport { Input } from '@/components/ui/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst data: Payment[] = [\n {\n id: '1',\n name: 'Shang Chain',\n amount: 699,\n status: 'success',\n email: 'shang07@yahoo.com'\n },\n {\n id: '2',\n name: 'Kevin Lincoln',\n amount: 242,\n status: 'success',\n email: 'kevinli09@gmail.com'\n },\n {\n id: '3',\n name: 'Milton Rose',\n amount: 655,\n status: 'processing',\n email: 'rose96@gmail.com'\n },\n {\n id: '4',\n name: 'Silas Ryan',\n amount: 874,\n status: 'success',\n email: 'silas22@gmail.com'\n },\n {\n id: '5',\n name: 'Ben Tenison',\n amount: 541,\n status: 'failed',\n email: 'bent@hotmail.com'\n }\n]\n\nexport type Payment = {\n id: string\n name: string\n amount: number\n status: 'pending' | 'processing' | 'success' | 'failed'\n email: string\n}\n\nexport const columns: ColumnDef[] = [\n {\n id: 'select',\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n enableSorting: false,\n enableHiding: false\n },\n {\n header: 'Name',\n accessorKey: 'name',\n cell: ({ row }) => {row.getValue('name')}
\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: ({ row }) => {row.getValue('status')}
\n },\n {\n accessorKey: 'email',\n header: 'Email',\n cell: ({ row }) => {row.getValue('email')}
\n },\n {\n accessorKey: 'amount',\n header: () => Amount
,\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('amount'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted}
\n }\n }\n]\n\nconst DataTableColumnsVisibilityDemo = () => {\n const [searchQuery, setSearchQuery] = useState('')\n const [sorting, setSorting] = useState([])\n const [columnFilters, setColumnFilters] = useState([])\n const [columnVisibility, setColumnVisibility] = useState({})\n const [rowSelection, setRowSelection] = useState({})\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection\n }\n })\n\n return (\n \n
\n
\n \n \n \n \n Columns\n {' '}\n \n \n \n \n \n setSearchQuery(e.target.value)}\n className='pl-8'\n placeholder='Search'\n onKeyDown={e => e.stopPropagation()}\n />\n \n
\n \n {table\n .getAllColumns()\n .filter(column => column.getCanHide())\n .map(column => {\n if (searchQuery && !column.id.toLowerCase().includes(searchQuery.toLowerCase())) {\n return null\n }\n\n return (\n column.toggleVisibility(!!value)}\n onSelect={e => e.preventDefault()}\n >\n {column.id}\n \n )\n })}\n \n {\n table.resetColumnVisibility()\n setSearchQuery('')\n }}\n >\n Reset\n \n \n \n
\n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
Data table column visibility
\n
\n )\n}\n\nexport default DataTableColumnsVisibilityDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-04.json b/public/r/data-table-04.json
new file mode 100644
index 0000000..982817e
--- /dev/null
+++ b/public/r/data-table-04.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-04",
+ "type": "registry:component",
+ "title": "Data Table 4",
+ "description": "Product inventory table with images, badges, and advanced filtering by multiple attributes",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "badge",
+ "checkbox",
+ "input",
+ "label",
+ "select",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-04.tsx",
+ "content": "'use client'\n\nimport { useId, useMemo, useState } from 'react'\n\nimport { SearchIcon } from 'lucide-react'\n\nimport type { Column, ColumnDef, ColumnFiltersState, RowData, SortingState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Badge } from '@/components/ui/badge'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nimport { cn } from '@/lib/utils'\n\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta {\n filterVariant?: 'text' | 'range' | 'select'\n }\n}\n\ntype Item = {\n id: string\n product: string\n productImage: string\n fallback: string\n price: number\n availability: 'In Stock' | 'Out of Stock' | 'Limited'\n rating: number\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: 'select',\n header: ({ table }) => (\n
table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n )\n },\n {\n header: 'Product',\n accessorKey: 'product',\n cell: ({ row }) => (\n \n
\n \n {row.original.fallback} \n \n
{row.getValue('product')}
\n
\n )\n },\n {\n header: 'Price',\n accessorKey: 'price',\n cell: ({ row }) => ${row.getValue('price')}
,\n enableSorting: false,\n meta: {\n filterVariant: 'range'\n }\n },\n {\n header: 'Availability',\n accessorKey: 'availability',\n cell: ({ row }) => {\n const availability = row.getValue('availability') as string\n\n const styles = {\n 'In Stock':\n 'bg-green-600/10 text-green-600 focus-visible:ring-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:focus-visible:ring-green-400/40 [a&]:hover:bg-green-600/5 dark:[a&]:hover:bg-green-400/5',\n 'Out of Stock':\n 'bg-destructive/10 [a&]:hover:bg-destructive/5 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive',\n Limited:\n 'bg-amber-600/10 text-amber-600 focus-visible:ring-amber-600/20 dark:bg-amber-400/10 dark:text-amber-400 dark:focus-visible:ring-amber-400/40 [a&]:hover:bg-amber-600/5 dark:[a&]:hover:bg-amber-400/5'\n }[availability]\n\n return (\n {row.getValue('availability')} \n )\n },\n enableSorting: false,\n meta: {\n filterVariant: 'select'\n }\n },\n {\n header: 'Rating',\n accessorKey: 'rating',\n cell: ({ row }) => {row.getValue('rating')}
,\n meta: {\n filterVariant: 'range'\n }\n }\n]\n\nconst items: Item[] = [\n {\n id: '1',\n product: 'Black Chair',\n productImage: 'https://cdn.shadcnstudio.com/ss-assets/products/product-1.png',\n fallback: 'BC',\n price: 159,\n availability: 'In Stock',\n rating: 3.9\n },\n {\n id: '2',\n product: 'Nike Jordan',\n productImage: 'https://cdn.shadcnstudio.com/ss-assets/products/product-2.png',\n fallback: 'NJ',\n price: 599,\n availability: 'Limited',\n rating: 4.4\n },\n {\n id: '3',\n product: 'OnePlus 7 Pro',\n productImage: 'https://cdn.shadcnstudio.com/ss-assets/products/product-3.png',\n fallback: 'O7P',\n price: 1299,\n availability: 'Out of Stock',\n rating: 3.5\n },\n {\n id: '4',\n product: 'Nintendo Switch',\n productImage: 'https://cdn.shadcnstudio.com/ss-assets/products/product-4.png',\n fallback: 'NS',\n price: 499,\n availability: 'In Stock',\n rating: 4.9\n },\n {\n id: '5',\n product: 'Apple magic mouse',\n productImage: 'https://cdn.shadcnstudio.com/ss-assets/products/product-5.png',\n fallback: 'AMM',\n price: 970,\n availability: 'Limited',\n rating: 4.1\n },\n {\n id: '6',\n product: 'Apple watch',\n productImage: 'https://cdn.shadcnstudio.com/ss-assets/products/product-6.png',\n fallback: 'AW',\n price: 1500,\n availability: 'Limited',\n rating: 3.1\n },\n {\n id: '7',\n product: 'Casio G-Shock',\n productImage: 'https://cdn.shadcnstudio.com/ss-assets/products/product-8.png',\n fallback: 'CGS',\n price: 194,\n availability: 'Out of Stock',\n rating: 1.5\n },\n {\n id: '8',\n product: 'RayBan Sunglasses',\n productImage: 'https://cdn.shadcnstudio.com/ss-assets/products/product-10.png',\n fallback: 'RBS',\n price: 199,\n availability: 'Out of Stock',\n rating: 2.4\n }\n]\n\nconst DataTableWithColumnFilterDemo = () => {\n const [columnFilters, setColumnFilters] = useState([])\n\n const [sorting, setSorting] = useState([\n {\n id: 'price',\n desc: false\n }\n ])\n\n const table = useReactTable({\n data: items,\n columns,\n state: {\n sorting,\n columnFilters\n },\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n onSortingChange: setSorting,\n enableSortingRemoval: false\n })\n\n return (\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n\n
Data table with column filter
\n
\n )\n}\n\nfunction Filter({ column }: { column: Column }) {\n const id = useId()\n const columnFilterValue = column.getFilterValue()\n const { filterVariant } = column.columnDef.meta ?? {}\n const columnHeader = typeof column.columnDef.header === 'string' ? column.columnDef.header : ''\n\n const sortedUniqueValues = useMemo(() => {\n if (filterVariant === 'range') return []\n\n const values = Array.from(column.getFacetedUniqueValues().keys())\n\n const flattenedValues = values.reduce((acc: string[], curr) => {\n if (Array.isArray(curr)) {\n return [...acc, ...curr]\n }\n\n return [...acc, curr]\n }, [])\n\n return Array.from(new Set(flattenedValues)).sort()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [column.getFacetedUniqueValues(), filterVariant])\n\n if (filterVariant === 'range') {\n return (\n \n )\n }\n\n if (filterVariant === 'select') {\n return (\n \n {columnHeader} \n {\n column.setFilterValue(value === 'all' ? undefined : value)\n }}\n >\n \n \n \n \n All \n {sortedUniqueValues.map(value => (\n \n {String(value)}\n \n ))}\n \n \n
\n )\n }\n\n return (\n \n
{columnHeader} \n
\n
column.setFilterValue(e.target.value)}\n placeholder={`Search ${columnHeader.toLowerCase()}`}\n type='text'\n />\n
\n \n
\n
\n
\n )\n}\n\nexport default DataTableWithColumnFilterDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-05.json b/public/r/data-table-05.json
new file mode 100644
index 0000000..e449955
--- /dev/null
+++ b/public/r/data-table-05.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-05",
+ "type": "registry:component",
+ "title": "Data Table 5",
+ "description": "table with sortable columns and up/down arrow sort indicators",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-05.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nimport { cn } from '@/lib/utils'\n\nconst data: Payment[] = [\n {\n id: '1',\n name: 'Shang Chain',\n amount: 699,\n status: 'success',\n email: 'shang07@yahoo.com'\n },\n {\n id: '2',\n name: 'Kevin Lincoln',\n amount: 242,\n status: 'success',\n email: 'kevinli09@gmail.com'\n },\n {\n id: '3',\n name: 'Milton Rose',\n amount: 655,\n status: 'processing',\n email: 'rose96@gmail.com'\n },\n {\n id: '4',\n name: 'Silas Ryan',\n amount: 874,\n status: 'success',\n email: 'silas22@gmail.com'\n },\n {\n id: '5',\n name: 'Ben Tenison',\n amount: 541,\n status: 'failed',\n email: 'bent@hotmail.com'\n }\n]\n\nexport type Payment = {\n id: string\n name: string\n amount: number\n status: 'pending' | 'processing' | 'success' | 'failed'\n email: string\n}\n\nexport const columns: ColumnDef[] = [\n {\n id: 'select',\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n enableSorting: false,\n enableHiding: false\n },\n {\n header: 'Name',\n accessorKey: 'name',\n cell: ({ row }) => {row.getValue('name')}
\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: ({ row }) => {row.getValue('status')}
\n },\n {\n accessorKey: 'email',\n header: 'Email',\n cell: ({ row }) => {row.getValue('email')}
\n },\n {\n accessorKey: 'amount',\n header: 'Amount',\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('amount'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted}
\n }\n }\n]\n\nconst DataTableWithSortableColumnDemo = () => {\n const [sorting, setSorting] = useState([])\n const [columnFilters, setColumnFilters] = useState([])\n const [columnVisibility, setColumnVisibility] = useState({})\n const [rowSelection, setRowSelection] = useState({})\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection\n }\n })\n\n return (\n \n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : (\n {\n if (header.column.getCanSort() && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n tabIndex={header.column.getCanSort() ? 0 : undefined}\n >\n \n {flexRender(header.column.columnDef.header, header.getContext())}\n \n {{\n asc: ,\n desc: \n }[header.column.getIsSorted() as string] ?? null}\n
\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
Data table with sortable column
\n
\n )\n}\n\nexport default DataTableWithSortableColumnDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-06.json b/public/r/data-table-06.json
new file mode 100644
index 0000000..4ba0f86
--- /dev/null
+++ b/public/r/data-table-06.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-06",
+ "type": "registry:component",
+ "title": "Data Table 6",
+ "description": "Data table with row expansion functionality for detailed content display",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-06.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport type { ColumnDef, ColumnFiltersState, SortingState } from '@tanstack/react-table'\nimport { flexRender, getCoreRowModel, useReactTable } from '@tanstack/react-table'\n\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst data: Payment[] = [\n {\n id: '1',\n name: 'Shang Chain',\n amount: 699,\n status: 'success',\n email: 'shang07@yahoo.com',\n dueDate: '2023-10-01'\n },\n {\n id: '2',\n name: 'Kevin Lincoln',\n amount: 242,\n status: 'success',\n email: 'kevinli09@gmail.com',\n dueDate: '2023-10-01'\n },\n {\n id: '3',\n name: 'Milton Rose',\n amount: 655,\n status: 'processing',\n email: 'rose96@gmail.com',\n dueDate: '2023-10-01'\n },\n {\n id: '4',\n name: 'Silas Ryan',\n amount: 874,\n status: 'success',\n email: 'silas22@gmail.com',\n dueDate: '2023-10-01'\n },\n {\n id: '5',\n name: 'Ben Tenison',\n amount: 541,\n status: 'failed',\n email: 'bent@hotmail.com',\n dueDate: '2023-10-01'\n }\n]\n\nexport type Payment = {\n id: string\n name: string\n amount: number\n status: 'pending' | 'processing' | 'success' | 'failed'\n email: string\n dueDate: string\n}\n\nexport const columns: ColumnDef[] = [\n {\n accessorKey: 'name',\n header: () => Name
,\n cell: ({ row }) => {row.getValue('name')}
\n },\n {\n accessorKey: 'status',\n header: () => Status
,\n cell: ({ row }) => {row.getValue('status')}
\n },\n {\n accessorKey: 'email',\n header: () => Email
,\n cell: ({ row }) => {row.getValue('email')}
\n },\n {\n accessorKey: 'amount',\n header: () => Amount
,\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('amount'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted}
\n }\n },\n {\n accessorKey: 'dueDate',\n header: () => Due Date
,\n cell: ({ row }) => {row.getValue('dueDate')}
\n }\n]\n\nconst DataTableWithResizableColumnsDemo = () => {\n const [sorting, setSorting] = useState([])\n const [columnFilters, setColumnFilters] = useState([])\n const [rowSelection, setRowSelection] = useState({})\n\n const table = useReactTable({\n data,\n columns,\n columnResizeMode: 'onChange',\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n rowSelection\n }\n })\n\n return (\n \n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getCanResize() && (\n header.column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className:\n 'group-last/head:hidden absolute top-0 h-full w-4 cursor-col-resize user-select-none touch-none -right-2 z-10 flex justify-center before:absolute before:w-px before:inset-y-0 before:bg-border before:translate-x-px'\n }}\n />\n )}\n \n )\n })}\n \n ))}\n \n
\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n \n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
Data table with resizable columns
\n
\n )\n}\n\nexport default DataTableWithResizableColumnsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-07.json b/public/r/data-table-07.json
new file mode 100644
index 0000000..334c2db
--- /dev/null
+++ b/public/r/data-table-07.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-07",
+ "type": "registry:component",
+ "title": "Data Table 7",
+ "description": "Data table with pinnable columns sticking to the left side or right side for easy access",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-07.tsx",
+ "content": "'use client'\n\nimport type { CSSProperties } from 'react'\nimport { useState } from 'react'\n\nimport { ArrowLeftFromLineIcon, ArrowRightFromLineIcon, EllipsisIcon, PinOffIcon } from 'lucide-react'\n\nimport type { Column, ColumnDef, SortingState } from '@tanstack/react-table'\nimport { flexRender, getCoreRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'\n\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\ntype Product = {\n productId: number\n productName: string\n category: string\n stockQuantity: number\n price: number\n supplier: string\n discontinued: 'no' | 'yes'\n}\n\nconst data: Product[] = [\n {\n productId: 1,\n productName: 'Apple iPhone 14',\n category: 'Smartphones',\n stockQuantity: 4550,\n price: 1500,\n supplier: 'Dixon Electronics',\n discontinued: 'no'\n },\n {\n productId: 2,\n productName: 'Metal frame table',\n category: 'Furniture',\n stockQuantity: 150,\n price: 540,\n supplier: 'Milton Furniture',\n discontinued: 'no'\n },\n {\n productId: 3,\n productName: 'Xiaomi A series',\n category: 'electronics',\n stockQuantity: 1500,\n price: 2200,\n supplier: 'Xiaomi Electronics',\n discontinued: 'yes'\n },\n {\n productId: 4,\n productName: 'RC Monster Truck',\n category: 'Toys',\n stockQuantity: 10500,\n price: 250,\n supplier: 'Lego Toys',\n discontinued: 'no'\n },\n {\n productId: 5,\n productName: 'Glass Water Bottle',\n category: 'Kitchenware',\n stockQuantity: 5503,\n price: 69,\n supplier: 'Kitchen Essentials',\n discontinued: 'no'\n },\n {\n productId: 6,\n productName: 'BenQ Monitor 24',\n category: 'Electronics',\n stockQuantity: 600,\n price: 1000,\n supplier: 'BenQ Electronics',\n discontinued: 'yes'\n }\n]\n\nconst getPinningStyles = (column: Column): CSSProperties => {\n const isPinned = column.getIsPinned()\n\n return {\n left: isPinned === 'left' ? `${column.getStart('left')}px` : undefined,\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n position: isPinned ? 'sticky' : 'relative',\n zIndex: isPinned ? 1 : 0\n }\n}\n\nconst columns: ColumnDef[] = [\n {\n header: 'Product Name',\n accessorKey: 'productName',\n cell: ({ row }) => {row.getValue('productName')}
\n },\n {\n header: 'Category',\n accessorKey: 'category',\n cell: ({ row }) => {row.getValue('category')}
\n },\n {\n header: 'Stock Quantity',\n accessorKey: 'stockQuantity',\n cell: ({ row }) => {row.getValue('stockQuantity')}
\n },\n {\n header: 'Price',\n accessorKey: 'price',\n cell: ({ row }) => {\n const price = parseFloat(row.getValue('price'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(price)\n\n return {formatted}
\n }\n },\n {\n header: 'Supplier',\n accessorKey: 'supplier',\n cell: ({ row }) => {row.getValue('supplier')}
\n },\n {\n header: 'Discontinued',\n accessorKey: 'discontinued',\n cell: ({ row }) => {row.getValue('discontinued')}
\n }\n]\n\nconst DataTablePinnableColumnDemo = () => {\n const [sorting, setSorting] = useState([])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n state: {\n sorting\n },\n enableSortingRemoval: false\n })\n\n return (\n \n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n const { column } = header\n const isPinned = column.getIsPinned()\n const isLastLeftPinned = isPinned === 'left' && column.getIsLastColumn('left')\n const isFirstRightPinned = isPinned === 'right' && column.getIsFirstColumn('right')\n\n return (\n \n \n
\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n \n\n {!header.isPlaceholder &&\n header.column.getCanPin() &&\n (header.column.getIsPinned() ? (\n
header.column.pin(false)}\n aria-label={`Unpin ${header.column.columnDef.header as string} column`}\n title={`Unpin ${header.column.columnDef.header as string} column`}\n >\n \n \n ) : (\n
\n \n \n \n \n \n \n header.column.pin('left')}>\n \n Stick to left\n \n header.column.pin('right')}>\n \n Stick to right\n \n \n \n ))}\n
\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => {\n const { column } = cell\n const isPinned = column.getIsPinned()\n const isLastLeftPinned = isPinned === 'left' && column.getIsLastColumn('left')\n const isFirstRightPinned = isPinned === 'right' && column.getIsFirstColumn('right')\n\n return (\n \n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n )\n })}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
Data table with pinnable columns
\n
\n )\n}\n\nexport default DataTablePinnableColumnDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-08.json b/public/r/data-table-08.json
new file mode 100644
index 0000000..63d6277
--- /dev/null
+++ b/public/r/data-table-08.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-08",
+ "type": "registry:component",
+ "title": "Data Table 8",
+ "description": "Drag-and-drop data table with sortable rows and reordering functionality",
+ "dependencies": [
+ "@dnd-kit/core",
+ "@dnd-kit/modifiers",
+ "@dnd-kit/sortable",
+ "@dnd-kit/utilities",
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-08.tsx",
+ "content": "'use client'\n\nimport type { CSSProperties } from 'react'\nimport { useState, useId } from 'react'\n\nimport { ChevronDownIcon, ChevronUpIcon, GripVerticalIcon } from 'lucide-react'\n\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n useSensor,\n useSensors,\n type DragEndEvent\n} from '@dnd-kit/core'\nimport { restrictToHorizontalAxis } from '@dnd-kit/modifiers'\nimport { arrayMove, horizontalListSortingStrategy, SortableContext, useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport type { Cell, ColumnDef, Header, SortingState } from '@tanstack/react-table'\nimport { flexRender, getCoreRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'\n\nimport { Button } from '@/components/ui/button'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\ntype Employee = {\n employeeId: number\n firstName: string\n lastName: string\n jobTitle: string\n department: string\n dob: string\n hireDate: string\n salary: number\n}\n\nconst data: Employee[] = [\n {\n employeeId: 1,\n firstName: 'John',\n lastName: 'Doe',\n jobTitle: 'Software Engineer',\n department: 'Engineering',\n dob: '1990-01-01',\n hireDate: '2020-01-15',\n salary: 80000\n },\n {\n employeeId: 2,\n firstName: 'Jane',\n lastName: 'Smith',\n jobTitle: 'Product Manager',\n department: 'Product',\n dob: '1985-05-20',\n hireDate: '2019-03-10',\n salary: 95000\n },\n {\n employeeId: 3,\n firstName: 'Alice',\n lastName: 'Johnson',\n jobTitle: 'UX Designer',\n department: 'Design',\n dob: '1992-07-30',\n hireDate: '2021-06-01',\n salary: 70000\n },\n {\n employeeId: 4,\n firstName: 'Bob',\n lastName: 'Brown',\n jobTitle: 'Data Analyst',\n department: 'Analytics',\n dob: '1988-11-15',\n hireDate: '2018-09-20',\n salary: 75000\n }\n]\n\nconst columns: ColumnDef[] = [\n {\n id: 'firstName',\n header: 'First Name',\n accessorKey: 'firstName',\n cell: ({ row }) => {row.getValue('firstName')}
,\n sortUndefined: 'last',\n sortDescFirst: false\n },\n {\n id: 'lastName',\n header: 'Last Name',\n accessorKey: 'lastName',\n cell: ({ row }) => {row.getValue('lastName')}
\n },\n {\n id: 'jobTitle',\n header: 'Job Title',\n accessorKey: 'jobTitle',\n cell: ({ row }) => {row.getValue('jobTitle')}
\n },\n {\n id: 'department',\n header: 'Department',\n accessorKey: 'department',\n cell: ({ row }) => {row.getValue('department')}
\n },\n {\n id: 'dob',\n header: 'Date of Birth',\n accessorKey: 'dob',\n cell: ({ row }) => {row.getValue('dob')}
\n },\n {\n id: 'hireDate',\n header: 'Hire Date',\n accessorKey: 'hireDate',\n cell: ({ row }) => {row.getValue('hireDate')}
\n },\n {\n id: 'salary',\n header: 'Salary',\n accessorKey: 'salary',\n cell: ({ row }) => {\n const salary = parseFloat(row.getValue('salary'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(salary)\n\n return {formatted}
\n }\n }\n]\n\nconst DraggableColumnDataTableDemo = () => {\n const [sorting, setSorting] = useState([])\n const [columnOrder, setColumnOrder] = useState(columns.map(column => column.id as string))\n\n const table = useReactTable({\n data,\n columns,\n columnResizeMode: 'onChange',\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n state: {\n sorting,\n columnOrder\n },\n onColumnOrderChange: setColumnOrder,\n enableSortingRemoval: false\n })\n\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event\n\n if (active && over && active.id !== over.id) {\n setColumnOrder(columnOrder => {\n const oldIndex = columnOrder.indexOf(active.id as string)\n const newIndex = columnOrder.indexOf(over.id as string)\n\n return arrayMove(columnOrder, oldIndex, newIndex)\n })\n }\n }\n\n const sensors = useSensors(useSensor(MouseSensor, {}), useSensor(TouchSensor, {}), useSensor(KeyboardSensor, {}))\n\n return (\n \n
\n
\n \n \n {table.getHeaderGroups().map(headerGroup => (\n \n \n {headerGroup.headers.map(header => (\n \n ))}\n \n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n \n \n \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n \n
\n
Data table with draggable columns
\n
\n )\n}\n\nconst DraggableTableHeader = ({ header }: { header: Header }) => {\n const { attributes, isDragging, listeners, setNodeRef, transform, transition } = useSortable({\n id: header.column.id\n })\n\n const style: CSSProperties = {\n opacity: isDragging ? 0.8 : 1,\n position: 'relative',\n transform: CSS.Translate.toString(transform),\n transition,\n whiteSpace: 'nowrap',\n width: header.column.getSize(),\n zIndex: isDragging ? 1 : 0\n }\n\n return (\n \n \n \n \n \n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n {\n if (header.column.getCanSort() && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n aria-label='Toggle sorting'\n >\n {{\n asc: ,\n desc: \n }[header.column.getIsSorted() as string] ?? (\n \n )}\n \n
\n \n )\n}\n\nconst DragAlongCell = ({ cell }: { cell: Cell }) => {\n const { isDragging, setNodeRef, transform, transition } = useSortable({\n id: cell.column.id\n })\n\n const style: CSSProperties = {\n opacity: isDragging ? 0.8 : 1,\n position: 'relative',\n transform: CSS.Translate.toString(transform),\n transition,\n width: cell.column.getSize(),\n zIndex: isDragging ? 1 : 0\n }\n\n return (\n \n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n )\n}\n\nexport default DraggableColumnDataTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-09.json b/public/r/data-table-09.json
new file mode 100644
index 0000000..a243b27
--- /dev/null
+++ b/public/r/data-table-09.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-09",
+ "type": "registry:component",
+ "title": "Data Table 9",
+ "description": "Data table with expanding sub rows for detailed content display",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-09.tsx",
+ "content": "'use client'\n\nimport { Fragment } from 'react'\n\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { flexRender, getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\ntype Member = {\n name: string\n role: string\n email: string\n hireDate: string\n dob: string\n}\n\ntype Team = {\n teamName: string\n department: string\n location: string\n nextMilestone: string\n budget: number\n members: Member[]\n}\n\nconst data: Team[] = [\n {\n teamName: 'Digital Marketing',\n department: 'Marketing',\n location: 'London',\n nextMilestone: 'Launch New Campaign',\n budget: 30000,\n members: [\n {\n name: 'Alice Johnson',\n role: 'Lead Strategist',\n email: 'alice.johnson@example.com',\n hireDate: '2020-01-15',\n dob: '1990-01-01'\n },\n {\n name: 'Bob Smith',\n role: 'Content Creator',\n email: 'bob.smith@example.com',\n hireDate: '2021-03-22',\n dob: '1992-05-15'\n },\n {\n name: 'Charlie Brown',\n role: 'SEO Specialist',\n email: 'charlie.brown@example.com',\n hireDate: '2022-07-30',\n dob: '1995-11-20'\n }\n ]\n },\n {\n teamName: 'Product Development',\n department: 'Engineering',\n location: 'San Francisco',\n nextMilestone: 'Release Version 2.0',\n budget: 50000,\n members: [\n {\n name: 'David Wilson',\n role: 'Product Manager',\n email: 'david.wilson@example.com',\n hireDate: '2019-05-10',\n dob: '1988-02-25'\n },\n {\n name: 'Emma Johnson',\n role: 'UX Designer',\n email: 'emma.johnson@example.com',\n hireDate: '2020-08-15',\n dob: '1990-11-30'\n },\n {\n name: 'Frank Miller',\n role: 'QA Engineer',\n email: 'frank.miller@example.com',\n hireDate: '2021-01-20',\n dob: '1993-06-10'\n }\n ]\n },\n {\n teamName: 'Sales Team',\n department: 'Sales',\n location: 'New York',\n nextMilestone: 'Close Q3 Deals',\n budget: 40000,\n members: [\n {\n name: 'Grace Lee',\n role: 'Sales Executive',\n email: 'grace.lee@example.com',\n hireDate: '2021-05-12',\n dob: '1995-03-22'\n },\n {\n name: 'Henry Davis',\n role: 'Account Manager',\n email: 'henry.davis@example.com',\n hireDate: '2020-11-01',\n dob: '1992-07-15'\n },\n {\n name: 'Ivy Garcia',\n role: 'Sales Analyst',\n email: 'ivy.garcia@example.com',\n hireDate: '2021-09-15',\n dob: '1994-02-10'\n }\n ]\n }\n]\n\nconst columns: ColumnDef[] = [\n {\n id: 'expander',\n header: () => null,\n cell: ({ row }) => {\n return row.getCanExpand() ? (\n \n {row.getIsExpanded() ? (\n \n ) : (\n \n )}\n \n ) : undefined\n }\n },\n {\n id: 'select',\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n )\n },\n {\n header: 'Team Name',\n accessorKey: 'teamName',\n cell: ({ row }) => {row.getValue('teamName')}
\n },\n {\n header: 'Department',\n accessorKey: 'department',\n cell: ({ row }) => row.getValue('department')\n },\n {\n header: 'Location',\n accessorKey: 'location',\n cell: ({ row }) => row.getValue('location')\n },\n {\n header: 'Next Milestone',\n accessorKey: 'nextMilestone',\n cell: ({ row }) => row.getValue('nextMilestone')\n },\n {\n header: () => Budget
,\n accessorKey: 'budget',\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('budget'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted}
\n }\n }\n]\n\nconst DataTableWithExpandableRowsDemo = () => {\n const table = useReactTable({\n data,\n columns,\n getRowCanExpand: row => Boolean(row.original.members),\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel()\n })\n\n return (\n \n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n \n {row.getVisibleCells().map(cell => (\n \n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n \n ))}\n \n {row.getIsExpanded() && (\n \n \n \n \n \n \n Member Name \n Role \n Email \n Hire Date \n Date of Birth \n \n \n \n {row.original.members.map(member => (\n \n \n {member.name} \n {member.role} \n {member.email} \n {member.hireDate} \n {member.dob} \n \n ))}\n \n
\n \n \n )}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
Data table with expanding sub-rows made
\n
\n )\n}\n\nexport default DataTableWithExpandableRowsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-10.json b/public/r/data-table-10.json
new file mode 100644
index 0000000..fd3eb6d
--- /dev/null
+++ b/public/r/data-table-10.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-10",
+ "type": "registry:component",
+ "title": "Data Table 10",
+ "description": "Data table with pagination, rows selection, and sorting system",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "checkbox",
+ "label",
+ "pagination",
+ "select",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-10.tsx",
+ "content": "'use client'\n\nimport { useEffect, useId, useState } from 'react'\n\nimport {\n ChevronDownIcon,\n ChevronFirstIcon,\n ChevronLastIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ChevronUpIcon\n} from 'lucide-react'\n\nimport type { ColumnDef, PaginationState, SortingState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\nimport { Pagination, PaginationContent, PaginationItem } from '@/components/ui/pagination'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nimport { cn } from '@/lib/utils'\n\ntype Item = {\n product_name: string\n price: string\n availability: 'In Stock' | 'Out of Stock' | 'Limited'\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: 'select',\n header: ({ table }) => (\n
table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n size: 28,\n enableSorting: false\n },\n {\n header: 'Product Name',\n accessorKey: 'product_name',\n cell: ({ row }) => {row.getValue('product_name')}
\n },\n {\n header: 'Price',\n accessorKey: 'price',\n cell: ({ row }) => {row.getValue('price')}
\n },\n {\n header: 'Availability',\n accessorKey: 'availability',\n cell: ({ row }) => {\n const availability = row.getValue('availability') as string\n\n const styles = {\n 'In Stock':\n 'bg-green-600/10 text-green-600 focus-visible:ring-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:focus-visible:ring-green-400/40 [a&]:hover:bg-green-600/5 dark:[a&]:hover:bg-green-400/5',\n 'Out of Stock':\n 'bg-destructive/10 [a&]:hover:bg-destructive/5 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive',\n Limited:\n 'bg-amber-600/10 text-amber-600 focus-visible:ring-amber-600/20 dark:bg-amber-400/10 dark:text-amber-400 dark:focus-visible:ring-amber-400/40 [a&]:hover:bg-amber-600/5 dark:[a&]:hover:bg-amber-400/5'\n }[availability]\n\n return (\n {row.getValue('availability')} \n )\n }\n }\n]\n\nconst PaginatedDataTableDemo = () => {\n const id = useId()\n\n const [pagination, setPagination] = useState({\n pageIndex: 0,\n pageSize: 5\n })\n\n const [sorting, setSorting] = useState([\n {\n id: 'product_name',\n desc: false\n }\n ])\n\n const [data, setData] = useState- ([])\n\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch('https://cdn.jsdelivr.net/gh/themeselection/fy-assets/assets/json/mobile-stock.json')\n\n if (!res.ok) {\n throw new Error('Failed to fetch data')\n }\n\n const items = await res.json()\n\n const data = await items.data\n\n setData([...data, ...data])\n }\n\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n enableSortingRemoval: false,\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: setPagination,\n state: {\n sorting,\n pagination\n }\n })\n\n return (\n
\n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n {\n if (header.column.getCanSort() && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n tabIndex={header.column.getCanSort() ? 0 : undefined}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {{\n asc: ,\n desc: \n }[header.column.getIsSorted() as string] ?? null}\n
\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n\n
\n
\n \n Rows per page\n \n {\n table.setPageSize(Number(value))\n }}\n >\n \n \n \n \n {[5, 10, 25, 50].map(pageSize => (\n \n {pageSize}\n \n ))}\n \n \n
\n\n
\n
\n \n {table.getState().pagination.pageIndex * table.getState().pagination.pageSize + 1}-\n {Math.min(\n Math.max(\n table.getState().pagination.pageIndex * table.getState().pagination.pageSize +\n table.getState().pagination.pageSize,\n 0\n ),\n table.getRowCount()\n )}\n {' '}\n of {table.getRowCount().toString()} \n
\n
\n\n
\n
\n \n \n table.firstPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label='Go to first page'\n >\n \n \n \n\n \n table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label='Go to previous page'\n >\n \n \n \n\n \n table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label='Go to next page'\n >\n \n \n \n\n \n table.lastPage()}\n disabled={!table.getCanNextPage()}\n aria-label='Go to last page'\n >\n \n \n \n \n \n
\n
\n
Paginated data table
\n
\n )\n}\n\nexport default PaginatedDataTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-11.json b/public/r/data-table-11.json
new file mode 100644
index 0000000..a406f21
--- /dev/null
+++ b/public/r/data-table-11.json
@@ -0,0 +1,33 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-11",
+ "type": "registry:component",
+ "title": "Data Table 11",
+ "description": "data table with sorting, row selection, and pagination—styled with Origin UI and powered by @tanstack/react-table",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "checkbox",
+ "pagination",
+ "select",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-11.tsx",
+ "content": "'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon } from 'lucide-react'\n\nimport type { ColumnDef, PaginationState, SortingState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Pagination, PaginationContent, PaginationEllipsis, PaginationItem } from '@/components/ui/pagination'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nimport { usePagination } from '@/hooks/use-pagination'\n\nimport { cn } from '@/lib/utils'\n\ntype Item = {\n product_name: string\n price: string\n availability: 'In Stock' | 'Out of Stock' | 'Limited'\n}\n\nconst columns: ColumnDef- [] = [\n {\n id: 'select',\n header: ({ table }) => (\n
table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n size: 28,\n enableSorting: false\n },\n {\n header: 'Product Name',\n accessorKey: 'product_name',\n cell: ({ row }) => {row.getValue('product_name')}
\n },\n {\n header: 'Price',\n accessorKey: 'price',\n cell: ({ row }) => {row.getValue('price')}
\n },\n {\n header: 'Availability',\n accessorKey: 'availability',\n cell: ({ row }) => {\n const availability = row.getValue('availability') as string\n\n const styles = {\n 'In Stock':\n 'bg-green-600/10 text-green-600 focus-visible:ring-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:focus-visible:ring-green-400/40 [a&]:hover:bg-green-600/5 dark:[a&]:hover:bg-green-400/5',\n 'Out of Stock':\n 'bg-destructive/10 [a&]:hover:bg-destructive/5 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive',\n Limited:\n 'bg-amber-600/10 text-amber-600 focus-visible:ring-amber-600/20 dark:bg-amber-400/10 dark:text-amber-400 dark:focus-visible:ring-amber-400/40 [a&]:hover:bg-amber-600/5 dark:[a&]:hover:bg-amber-400/5'\n }[availability]\n\n return (\n {row.getValue('availability')} \n )\n }\n }\n]\n\nconst DataTableWithPaginationDemo = () => {\n const pageSize = 5\n\n const [pagination, setPagination] = useState({\n pageIndex: 0,\n pageSize: pageSize\n })\n\n const [sorting, setSorting] = useState([\n {\n id: 'product_name',\n desc: false\n }\n ])\n\n const [data, setData] = useState- ([])\n\n useEffect(() => {\n async function fetchPosts() {\n const res = await fetch('https://cdn.jsdelivr.net/gh/themeselection/fy-assets/assets/json/mobile-stock.json')\n\n if (!res.ok) {\n throw new Error('Failed to fetch data')\n }\n\n const items = await res.json()\n\n const data = await items.data\n\n setData([...data, ...data])\n }\n\n fetchPosts()\n }, [])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n enableSortingRemoval: false,\n getPaginationRowModel: getPaginationRowModel(),\n onPaginationChange: setPagination,\n state: {\n sorting,\n pagination\n }\n })\n\n const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({\n currentPage: table.getState().pagination.pageIndex + 1,\n totalPages: table.getPageCount(),\n paginationItemsToDisplay: 5\n })\n\n return (\n
\n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n {\n if (header.column.getCanSort() && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n header.column.getToggleSortingHandler()?.(e)\n }\n }}\n tabIndex={header.column.getCanSort() ? 0 : undefined}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {{\n asc: ,\n desc: \n }[header.column.getIsSorted() as string] ?? null}\n
\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n\n
\n
\n Page {table.getState().pagination.pageIndex + 1} of{' '}\n {table.getPageCount()} \n
\n\n
\n
\n \n \n table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label='Go to previous page'\n >\n \n \n \n\n {showLeftEllipsis && (\n \n \n \n )}\n\n {pages.map(page => {\n const isActive = page === table.getState().pagination.pageIndex + 1\n\n return (\n \n table.setPageIndex(page - 1)}\n aria-current={isActive ? 'page' : undefined}\n >\n {page}\n \n \n )\n })}\n\n {showRightEllipsis && (\n \n \n \n )}\n\n \n table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label='Go to next page'\n >\n \n \n \n \n \n
\n\n
\n {\n table.setPageSize(Number(value))\n }}\n >\n \n \n \n \n {[5, 10, 25, 50].map(pageSize => (\n \n {pageSize} / page\n \n ))}\n \n \n
\n
\n
\n Data table with pagination{' '}\n \n Origin UI\n \n
\n
\n )\n}\n\nexport default DataTableWithPaginationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-11.tsx"
+ },
+ {
+ "path": "src/hooks/use-pagination.ts",
+ "content": "type UsePaginationProps = {\n currentPage: number\n totalPages: number\n paginationItemsToDisplay: number\n}\n\ntype UsePaginationReturn = {\n pages: number[]\n showLeftEllipsis: boolean\n showRightEllipsis: boolean\n}\n\nexport function usePagination({\n currentPage,\n totalPages,\n paginationItemsToDisplay\n}: UsePaginationProps): UsePaginationReturn {\n function calculatePaginationRange(): number[] {\n if (totalPages <= paginationItemsToDisplay) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const halfDisplay = Math.floor(paginationItemsToDisplay / 2)\n\n const initialRange = {\n start: currentPage - halfDisplay,\n end: currentPage + halfDisplay\n }\n\n const adjustedRange = {\n start: Math.max(1, initialRange.start),\n end: Math.min(totalPages, initialRange.end)\n }\n\n if (adjustedRange.start === 1) {\n adjustedRange.end = Math.min(paginationItemsToDisplay, totalPages)\n }\n\n if (adjustedRange.end === totalPages) {\n adjustedRange.start = Math.max(1, totalPages - paginationItemsToDisplay + 1)\n }\n\n return Array.from({ length: adjustedRange.end - adjustedRange.start + 1 }, (_, i) => adjustedRange.start + i)\n }\n\n const pages = calculatePaginationRange()\n\n // Determine ellipsis display based on the actual pages shown\n const showLeftEllipsis = pages.length > 0 && pages[0] > 1 && pages[0] > 2\n\n const showRightEllipsis =\n pages.length > 0 && pages[pages.length - 1] < totalPages && pages[pages.length - 1] < totalPages - 1\n\n return {\n pages,\n showLeftEllipsis,\n showRightEllipsis\n }\n}\n",
+ "type": "registry:hook",
+ "target": "hooks/use-pagination.ts"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-12.json b/public/r/data-table-12.json
new file mode 100644
index 0000000..052fc54
--- /dev/null
+++ b/public/r/data-table-12.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-12",
+ "type": "registry:component",
+ "title": "Data Table 12",
+ "description": "Data table with export functionality supporting CSV, Excel, and multiple formats",
+ "dependencies": [
+ "lucide-react",
+ "papaparse",
+ "@tanstack/react-table",
+ "xlsx"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "checkbox",
+ "dropdown-menu",
+ "input",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-12.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { DownloadIcon, FileTextIcon, FileSpreadsheetIcon } from 'lucide-react'\n\nimport Papa from 'papaparse'\nimport * as XLSX from 'xlsx'\n\nimport type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\nimport { Input } from '@/components/ui/input'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nimport { cn } from '@/lib/utils'\n\nconst data: Payment[] = [\n {\n id: '1',\n name: 'Shang Chain',\n amount: 699,\n status: 'success',\n email: 'shang07@yahoo.com'\n },\n {\n id: '2',\n name: 'Kevin Lincoln',\n amount: 242,\n status: 'success',\n email: 'kevinli09@gmail.com'\n },\n {\n id: '3',\n name: 'Milton Rose',\n amount: 655,\n status: 'processing',\n email: 'rose96@gmail.com'\n },\n {\n id: '4',\n name: 'Silas Ryan',\n amount: 874,\n status: 'success',\n email: 'silas22@gmail.com'\n },\n {\n id: '5',\n name: 'Ben Tenison',\n amount: 541,\n status: 'failed',\n email: 'bent@hotmail.com'\n },\n {\n id: '6',\n name: 'Alice Cooper',\n amount: 321,\n status: 'processing',\n email: 'alice@email.com'\n },\n {\n id: '7',\n name: 'Bob Johnson',\n amount: 789,\n status: 'success',\n email: 'bob.j@company.com'\n },\n {\n id: '8',\n name: 'Carol Williams',\n amount: 456,\n status: 'processing',\n email: 'carol.w@domain.org'\n }\n]\n\nexport type Payment = {\n id: string\n name: string\n amount: number\n status: 'processing' | 'success' | 'failed'\n email: string\n}\n\nexport const columns: ColumnDef[] = [\n {\n id: 'select',\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n enableSorting: false,\n enableHiding: false\n },\n {\n accessorKey: 'name',\n header: 'Name',\n cell: ({ row }) => {row.getValue('name')}
\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: ({ row }) => {\n const status = row.getValue('status') as string\n\n const styles = {\n success:\n 'bg-green-600/10 text-green-600 focus-visible:ring-green-600/20 dark:bg-green-400/10 dark:text-green-400 dark:focus-visible:ring-green-400/40 [a&]:hover:bg-green-600/5 dark:[a&]:hover:bg-green-400/5',\n failed:\n 'bg-destructive/10 [a&]:hover:bg-destructive/5 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive',\n processing:\n 'bg-amber-600/10 text-amber-600 focus-visible:ring-amber-600/20 dark:bg-amber-400/10 dark:text-amber-400 dark:focus-visible:ring-amber-400/40 [a&]:hover:bg-amber-600/5 dark:[a&]:hover:bg-amber-400/5'\n }[status]\n\n return {row.getValue('status')} \n }\n },\n {\n accessorKey: 'email',\n header: 'Email',\n cell: ({ row }) => {row.getValue('email')}
\n },\n {\n accessorKey: 'amount',\n header: () => Amount
,\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('amount'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted}
\n }\n }\n]\n\nconst DataTableWithExportDemo = () => {\n const [sorting, setSorting] = useState([])\n const [columnFilters, setColumnFilters] = useState([])\n const [columnVisibility, setColumnVisibility] = useState({})\n const [rowSelection, setRowSelection] = useState({})\n const [globalFilter, setGlobalFilter] = useState('')\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n onGlobalFilterChange: setGlobalFilter,\n globalFilterFn: 'includesString',\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n globalFilter\n }\n })\n\n const exportToCSV = () => {\n const selectedRows = table.getSelectedRowModel().rows\n\n const dataToExport =\n selectedRows.length > 0\n ? selectedRows.map(row => row.original)\n : table.getFilteredRowModel().rows.map(row => row.original)\n\n const csv = Papa.unparse(dataToExport, {\n header: true\n })\n\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' })\n const link = document.createElement('a')\n const url = URL.createObjectURL(blob)\n\n link.setAttribute('href', url)\n link.setAttribute('download', `payments-export-${new Date().toISOString().split('T')[0]}.csv`)\n link.style.visibility = 'hidden'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n }\n\n const exportToExcel = () => {\n const selectedRows = table.getSelectedRowModel().rows\n\n const dataToExport =\n selectedRows.length > 0\n ? selectedRows.map(row => row.original)\n : table.getFilteredRowModel().rows.map(row => row.original)\n\n const worksheet = XLSX.utils.json_to_sheet(dataToExport)\n const workbook = XLSX.utils.book_new()\n\n XLSX.utils.book_append_sheet(workbook, worksheet, 'Payments')\n\n const cols = [{ wch: 10 }, { wch: 20 }, { wch: 15 }, { wch: 25 }, { wch: 15 }]\n\n worksheet['!cols'] = cols\n\n XLSX.writeFile(workbook, `payments-export-${new Date().toISOString().split('T')[0]}.xlsx`)\n }\n\n const exportToJSON = () => {\n const selectedRows = table.getSelectedRowModel().rows\n\n const dataToExport =\n selectedRows.length > 0\n ? selectedRows.map(row => row.original)\n : table.getFilteredRowModel().rows.map(row => row.original)\n\n const json = JSON.stringify(dataToExport, null, 2)\n const blob = new Blob([json], { type: 'application/json' })\n const link = document.createElement('a')\n const url = URL.createObjectURL(blob)\n\n link.setAttribute('href', url)\n link.setAttribute('download', `payments-export-${new Date().toISOString().split('T')[0]}.json`)\n link.style.visibility = 'hidden'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n }\n\n return (\n \n
\n
\n setGlobalFilter(String(event.target.value))}\n className='max-w-sm'\n />\n
\n
\n
\n {table.getSelectedRowModel().rows.length > 0 && (\n \n {table.getSelectedRowModel().rows.length} of {table.getFilteredRowModel().rows.length} row(s) selected\n \n )}\n
\n
\n \n \n \n Export\n \n \n \n \n \n Export as CSV\n \n \n \n Export as Excel\n \n \n \n \n Export as JSON\n \n \n \n
\n
\n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
\n Data table with export functionality (CSV, Excel, JSON)\n
\n
\n )\n}\n\nexport default DataTableWithExportDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/data-table-13.json b/public/r/data-table-13.json
new file mode 100644
index 0000000..79d19ed
--- /dev/null
+++ b/public/r/data-table-13.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "data-table-13",
+ "type": "registry:component",
+ "title": "Data Table 13",
+ "description": "editable data table with inline cell editing for text, status, and progress—supports row selection and live updates.",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "input",
+ "select",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-13.tsx",
+ "content": "'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport type {\n ColumnDef,\n ColumnFiltersState,\n RowData,\n SortingState,\n VisibilityState,\n CellContext\n} from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Input } from '@/components/ui/input'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\n// Extend TanStack Table's meta interface\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface TableMeta {\n updateData: (rowIndex: number, columnId: string, value: string | number) => void\n }\n}\n\n// Sample data\nconst initialData: Person[] = [\n {\n id: '1',\n firstName: 'John',\n lastName: 'Doe',\n email: 'john.doe@example.com',\n status: 'active',\n progress: 75\n },\n {\n id: '2',\n firstName: 'Jane',\n lastName: 'Smith',\n email: 'jane.smith@example.com',\n status: 'inactive',\n progress: 45\n },\n {\n id: '3',\n firstName: 'Bob',\n lastName: 'Johnson',\n email: 'bob.johnson@example.com',\n status: 'active',\n progress: 90\n },\n {\n id: '4',\n firstName: 'Alice',\n lastName: 'Brown',\n email: 'alice.brown@example.com',\n status: 'pending',\n progress: 60\n },\n {\n id: '5',\n firstName: 'Charlie',\n lastName: 'Wilson',\n email: 'charlie.wilson@example.com',\n status: 'active',\n progress: 80\n }\n]\n\nexport type Person = {\n id: string\n firstName: string\n lastName: string\n email: string\n status: 'active' | 'inactive' | 'pending'\n progress: number\n}\n\n// Editable cell component for text inputs\nconst EditableTextCell = ({ getValue, row: { index }, column: { id }, table }: CellContext) => {\n const initialValue = getValue() as string\n const [value, setValue] = useState(initialValue)\n\n const onBlur = () => {\n table.options.meta?.updateData(index, id, value)\n }\n\n useEffect(() => {\n setValue(initialValue)\n }, [initialValue])\n\n return (\n setValue(e.target.value)}\n onBlur={onBlur}\n className='focus-visible:ring-ring h-8 w-full border-0 bg-transparent p-1 focus-visible:ring-1'\n aria-label='editable-text-input'\n />\n )\n}\n\n// Editable cell component for select inputs\nconst EditableSelectCell = ({ getValue, row: { index }, column: { id }, table }: CellContext) => {\n const initialValue = getValue() as string\n\n const handleValueChange = (newValue: string) => {\n table.options.meta?.updateData(index, id, newValue)\n }\n\n return (\n \n \n \n \n \n Active \n Inactive \n Pending \n \n \n )\n}\n\n// Editable cell component for progress (0-100%)\nconst EditableProgressCell = ({ getValue, row: { index }, column: { id }, table }: CellContext) => {\n const initialValue = getValue() as number\n const [value, setValue] = useState(initialValue.toString())\n\n const onBlur = () => {\n const numValue = parseFloat(value)\n const clampedValue = Math.max(0, Math.min(100, isNaN(numValue) ? initialValue : numValue))\n\n table.options.meta?.updateData(index, id, clampedValue)\n }\n\n useEffect(() => {\n setValue(initialValue.toString())\n }, [initialValue])\n\n return (\n \n setValue(e.target.value)}\n onBlur={onBlur}\n className='focus-visible:ring-ring h-8 w-20 border-0 bg-transparent p-1 focus-visible:ring-1'\n aria-label='editable-progress-input'\n />\n % \n
\n )\n}\n\n// Column definitions with editable cells\nexport const columns: ColumnDef[] = [\n {\n id: 'select',\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n enableSorting: false,\n enableHiding: false\n },\n {\n accessorKey: 'firstName',\n header: 'First Name',\n cell: EditableTextCell\n },\n {\n accessorKey: 'lastName',\n header: 'Last Name',\n cell: EditableTextCell\n },\n {\n accessorKey: 'email',\n header: 'Email',\n cell: EditableTextCell\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: EditableSelectCell\n },\n {\n accessorKey: 'progress',\n header: 'Progress',\n cell: EditableProgressCell\n }\n]\n\nconst EditableDataTableDemo = () => {\n const [data, setData] = useState(() => [...initialData])\n const [sorting, setSorting] = useState([])\n const [columnFilters, setColumnFilters] = useState([])\n const [columnVisibility, setColumnVisibility] = useState({})\n const [rowSelection, setRowSelection] = useState({})\n\n const refreshData = () => setData(() => [...initialData])\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n meta: {\n updateData: (rowIndex, columnId, value) => {\n setData(old =>\n old.map((row, index) => {\n if (index === rowIndex) {\n return {\n ...old[rowIndex]!,\n [columnId]: value\n }\n }\n\n return row\n })\n )\n }\n },\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection\n }\n })\n\n return (\n \n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : (\n {flexRender(header.column.columnDef.header, header.getContext())}
\n )}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n\n
\n
{table.getRowModel().rows.length} rows total
\n
\n \n Refresh Data\n \n
\n
\n\n
\n Editable data table - Click on cells to edit values\n
\n
\n )\n}\n\nexport default EditableDataTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-01.json b/public/r/date-picker-01.json
new file mode 100644
index 0000000..bc43abe
--- /dev/null
+++ b/public/r/date-picker-01.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-01",
+ "type": "registry:component",
+ "title": "Date Picker 1",
+ "description": "Basic single date picker with popover calendar display",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-01.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst DatePickerDemo = () => {\n const [open, setOpen] = useState(false)\n const [date, setDate] = useState(undefined)\n\n return (\n \n
\n Date picker\n \n
\n \n \n {date ? date.toLocaleDateString() : 'Pick a date'}\n \n \n \n \n {\n setDate(date)\n setOpen(false)\n }}\n />\n \n \n
\n )\n}\n\nexport default DatePickerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-02.json b/public/r/date-picker-02.json
new file mode 100644
index 0000000..412ed8b
--- /dev/null
+++ b/public/r/date-picker-02.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-02",
+ "type": "registry:component",
+ "title": "Date Picker 2",
+ "description": "Date range picker with popover calendar for selecting start and end dates",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-02.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\nimport { type DateRange } from 'react-day-picker'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst DatePickerRangeDemo = () => {\n const [range, setRange] = useState(undefined)\n\n return (\n \n
\n Range date picker\n \n
\n \n \n {range?.from && range?.to\n ? `${range.from.toLocaleDateString()} - ${range.to.toLocaleDateString()}`\n : 'Pick a date'}\n \n \n \n \n {\n setRange(range)\n }}\n />\n \n \n
\n )\n}\n\nexport default DatePickerRangeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-03.json b/public/r/date-picker-03.json
new file mode 100644
index 0000000..a3d70e2
--- /dev/null
+++ b/public/r/date-picker-03.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-03",
+ "type": "registry:component",
+ "title": "Date Picker 3",
+ "description": "Single date picker with calendar icon and enhanced visual styling",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-03.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CalendarIcon, ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst DatePickerWithIconDemo = () => {\n const [open, setOpen] = useState(false)\n const [date, setDate] = useState(undefined)\n\n return (\n \n
\n Date picker with icon\n \n
\n \n \n \n \n {date ? date.toLocaleDateString() : 'Pick a date'}\n \n \n \n \n \n {\n setDate(date)\n setOpen(false)\n }}\n />\n \n \n
\n )\n}\n\nexport default DatePickerWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-04.json b/public/r/date-picker-04.json
new file mode 100644
index 0000000..3398f7c
--- /dev/null
+++ b/public/r/date-picker-04.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-04",
+ "type": "registry:component",
+ "title": "Date Picker 4",
+ "description": "Date picker with integrated input field for manual date entry and calendar popup",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-04.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CalendarIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nfunction formatDate(date: Date | undefined) {\n if (!date) {\n return ''\n }\n\n return date.toLocaleDateString('en-US', {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n })\n}\n\nfunction isValidDate(date: Date | undefined) {\n if (!date) {\n return false\n }\n\n return !isNaN(date.getTime())\n}\n\nconst DatePickerWithinInputDemo = () => {\n const [open, setOpen] = useState(false)\n const [date, setDate] = useState(new Date())\n const [month, setMonth] = useState(date)\n const [value, setValue] = useState(formatDate(date))\n\n return (\n \n
\n Date picker within input\n \n
\n
{\n const date = new Date(e.target.value)\n\n setValue(e.target.value)\n\n if (isValidDate(date)) {\n setDate(date)\n setMonth(date)\n }\n }}\n onKeyDown={e => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setOpen(true)\n }\n }}\n />\n
\n \n \n \n Pick a date \n \n \n \n {\n setDate(date)\n setValue(formatDate(date))\n setOpen(false)\n }}\n />\n \n \n
\n
\n )\n}\n\nexport default DatePickerWithinInputDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-05.json b/public/r/date-picker-05.json
new file mode 100644
index 0000000..90bf803
--- /dev/null
+++ b/public/r/date-picker-05.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-05",
+ "type": "registry:component",
+ "title": "Date Picker 5",
+ "description": "Natural language date picker supporting phrases like \"tomorrow\" or \"next week\"",
+ "dependencies": [
+ "chrono-node",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-05.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { parseDate } from 'chrono-node'\nimport { CalendarIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nfunction formatDate(date: Date | undefined) {\n if (!date) {\n return ''\n }\n\n return date.toLocaleDateString('en-US', {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n })\n}\n\nconst DatePickerWithNaturalLanguageDemo = () => {\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('In 2 days')\n const [date, setDate] = useState(parseDate(value) || undefined)\n const [month, setMonth] = useState(date)\n\n return (\n \n
\n Date picker with natural language input\n \n
\n
{\n setValue(e.target.value)\n const date = parseDate(e.target.value)\n\n if (date) {\n setDate(date)\n setMonth(date)\n }\n }}\n onKeyDown={e => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setOpen(true)\n }\n }}\n />\n
\n \n \n \n Pick a date \n \n \n \n {\n setDate(date)\n setValue(formatDate(date))\n setOpen(false)\n }}\n />\n \n \n
\n
\n Your post will be published on {formatDate(date)} .\n
\n
\n )\n}\n\nexport default DatePickerWithNaturalLanguageDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-06.json b/public/r/date-picker-06.json
new file mode 100644
index 0000000..fddd379
--- /dev/null
+++ b/public/r/date-picker-06.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-06",
+ "type": "registry:component",
+ "title": "Date Picker 6",
+ "description": "Date range picker with compact date formatting using little-date library",
+ "dependencies": [
+ "little-date",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-06.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { formatDateRange } from 'little-date'\nimport { ChevronDownIcon } from 'lucide-react'\nimport { type DateRange } from 'react-day-picker'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst DatePickerWithShortDateDisplayDemo = () => {\n const [range, setRange] = useState({\n from: new Date(2025, 10, 20),\n to: new Date(2025, 10, 24)\n })\n\n return (\n \n
\n Date picker with short date\n \n
\n \n \n {range?.from && range?.to\n ? formatDateRange(range.from, range.to, {\n includeTime: false\n })\n : 'Pick a date'}\n \n \n \n \n {\n setRange(range)\n }}\n />\n \n \n
\n )\n}\n\nexport default DatePickerWithShortDateDisplayDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-07.json b/public/r/date-picker-07.json
new file mode 100644
index 0000000..9115665
--- /dev/null
+++ b/public/r/date-picker-07.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-07",
+ "type": "registry:component",
+ "title": "Date Picker 7",
+ "description": "Single date picker with disabled outside days for cleaner calendar view",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-07.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst DatePickerDisableOutsideDaysDemo = () => {\n const [open, setOpen] = useState(false)\n const [date, setDate] = useState(undefined)\n\n return (\n \n
\n Disable outside days\n \n
\n \n \n {date ? date.toLocaleDateString() : 'Pick a date'}\n \n \n \n \n {\n setDate(date)\n setOpen(false)\n }}\n />\n \n \n
\n )\n}\n\nexport default DatePickerDisableOutsideDaysDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-08.json b/public/r/date-picker-08.json
new file mode 100644
index 0000000..45dcf8b
--- /dev/null
+++ b/public/r/date-picker-08.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-08",
+ "type": "registry:component",
+ "title": "Date Picker 8",
+ "description": "Simple time input field with step control for precise time selection",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-08.tsx",
+ "content": "import { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DatePickerDemo = () => {\n return (\n \n \n Time input\n \n \n
\n )\n}\n\nexport default DatePickerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-09.json b/public/r/date-picker-09.json
new file mode 100644
index 0000000..6f6e6f8
--- /dev/null
+++ b/public/r/date-picker-09.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-09",
+ "type": "registry:component",
+ "title": "Date Picker 9",
+ "description": "Time input field with clock icon for enhanced visual identification",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-09.tsx",
+ "content": "import { Clock8Icon } from 'lucide-react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst TimePickerWithIconDemo = () => {\n return (\n \n
Time input with start icon \n
\n
\n )\n}\n\nexport default TimePickerWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-10.json b/public/r/date-picker-10.json
new file mode 100644
index 0000000..6768cea
--- /dev/null
+++ b/public/r/date-picker-10.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-10",
+ "type": "registry:component",
+ "title": "Date Picker 10",
+ "description": "Combined date picker and time input displayed side by side for datetime selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-10.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst DatePickerAndTimePickerDemo = () => {\n const [open, setOpen] = useState(false)\n const [date, setDate] = useState(undefined)\n\n return (\n \n
\n
\n Date picker\n \n
\n \n \n {date ? date.toLocaleDateString() : 'Pick a date'}\n \n \n \n \n {\n setDate(date)\n setOpen(false)\n }}\n />\n \n \n
\n
\n \n Time input\n \n \n
\n
\n )\n}\n\nexport default DatePickerAndTimePickerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-11.json b/public/r/date-picker-11.json
new file mode 100644
index 0000000..da84d7b
--- /dev/null
+++ b/public/r/date-picker-11.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-11",
+ "type": "registry:component",
+ "title": "Date Picker 11",
+ "description": "Date picker with time range selection (from/to times) for event scheduling",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-11.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst DatePickerAndTimeRangePicker = () => {\n const [open, setOpen] = useState(false)\n const [date, setDate] = useState(undefined)\n\n return (\n \n
\n
\n Date\n \n
\n \n \n {date ? date.toLocaleDateString() : 'Pick a date'}\n \n \n \n \n {\n setDate(date)\n setOpen(false)\n }}\n />\n \n \n
\n
\n
\n )\n}\n\nexport default DatePickerAndTimeRangePicker\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-12.json b/public/r/date-picker-12.json
new file mode 100644
index 0000000..c66d7d0
--- /dev/null
+++ b/public/r/date-picker-12.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-12",
+ "type": "registry:component",
+ "title": "Date Picker 12",
+ "description": "Travel date picker with departure/return dates and time selection for bookings",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-12.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst DatePickerRangeAndTimePickerDemo = () => {\n const [openFrom, setOpenFrom] = useState(false)\n const [openTo, setOpenTo] = useState(false)\n const [dateFrom, setDateFrom] = useState(new Date('2025-06-18'))\n const [dateTo, setDateTo] = useState(new Date('2025-06-25'))\n\n return (\n \n
\n
\n
\n Departure date\n \n
\n \n \n {dateFrom\n ? dateFrom.toLocaleDateString('en-US', {\n day: '2-digit',\n month: 'short',\n year: 'numeric'\n })\n : 'Pick a date'}\n \n \n \n \n {\n setDateFrom(date)\n setOpenFrom(false)\n }}\n />\n \n \n
\n
\n \n From\n \n \n
\n
\n
\n
\n
\n Return date\n \n
\n \n \n {dateTo\n ? dateTo.toLocaleDateString('en-US', {\n day: '2-digit',\n month: 'short',\n year: 'numeric'\n })\n : 'Pick a date'}\n \n \n \n \n {\n setDateTo(date)\n setOpenTo(false)\n }}\n disabled={dateFrom && { before: dateFrom }}\n />\n \n \n
\n
\n \n To\n \n \n
\n
\n
\n )\n}\n\nexport default DatePickerRangeAndTimePickerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/date-picker-13.json b/public/r/date-picker-13.json
new file mode 100644
index 0000000..9c63888
--- /dev/null
+++ b/public/r/date-picker-13.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "date-picker-13",
+ "type": "registry:component",
+ "title": "Date Picker 13",
+ "description": "Analytics chart with date range filter showing visitor data and interactive filtering",
+ "dependencies": [
+ "lucide-react",
+ "recharts"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card",
+ "chart",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-13.tsx",
+ "content": "'use client'\n\nimport { useState, useMemo } from 'react'\n\nimport { CalendarIcon } from 'lucide-react'\nimport type { DateRange } from 'react-day-picker'\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'\nimport type { ChartConfig } from '@/components/ui/chart'\nimport { ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst chartData = [\n { date: '2025-01-01', visitors: 178 },\n { date: '2025-01-02', visitors: 470 },\n { date: '2025-01-03', visitors: 103 },\n { date: '2025-01-04', visitors: 439 },\n { date: '2025-01-05', visitors: 88 },\n { date: '2025-01-06', visitors: 294 },\n { date: '2025-01-07', visitors: 323 },\n { date: '2025-01-08', visitors: 385 },\n { date: '2025-01-09', visitors: 438 },\n { date: '2025-01-10', visitors: 155 },\n { date: '2025-01-11', visitors: 92 },\n { date: '2025-01-12', visitors: 492 },\n { date: '2025-01-13', visitors: 81 },\n { date: '2025-01-14', visitors: 426 },\n { date: '2025-01-15', visitors: 307 },\n { date: '2025-01-16', visitors: 371 },\n { date: '2025-01-17', visitors: 475 },\n { date: '2025-01-18', visitors: 107 },\n { date: '2025-01-19', visitors: 341 },\n { date: '2025-01-20', visitors: 408 },\n { date: '2025-01-21', visitors: 169 },\n { date: '2025-01-22', visitors: 317 },\n { date: '2025-01-23', visitors: 480 },\n { date: '2025-01-24', visitors: 132 },\n { date: '2025-01-25', visitors: 141 },\n { date: '2025-01-26', visitors: 434 },\n { date: '2025-01-27', visitors: 448 },\n { date: '2025-01-28', visitors: 149 },\n { date: '2025-01-29', visitors: 103 },\n { date: '2025-01-30', visitors: 446 },\n { date: '2025-01-31', visitors: 320 }\n]\n\nconst total = chartData.reduce((acc, curr) => acc + curr.visitors, 0)\n\nconst chartConfig = {\n visitors: {\n label: 'Visitors',\n color: 'var(--color-primary)'\n }\n} satisfies ChartConfig\n\nconst ChartFilterDemo = () => {\n const [range, setRange] = useState({\n from: new Date(2025, 0, 1),\n to: new Date(2025, 0, 31)\n })\n\n const filteredData = useMemo(() => {\n if (!range?.from && !range?.to) {\n return chartData\n }\n\n return chartData.filter(item => {\n const date = new Date(item.date)\n\n return date >= range.from! && date <= range.to!\n })\n }, [range])\n\n return (\n \n \n Web Analytics \n Showing total visitors for this month. \n \n \n \n \n \n {range?.from && range?.to\n ? `${range.from.toLocaleDateString()} - ${range.to.toLocaleDateString()}`\n : 'January 2025'}\n \n \n \n \n \n \n \n \n \n \n \n \n {\n const date = new Date(value)\n\n return date.toLocaleDateString('en-US', {\n day: 'numeric'\n })\n }}\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n })\n }}\n />\n }\n />\n \n \n \n \n \n \n You had {total.toLocaleString()} visitors for the month of January.\n
\n \n \n )\n}\n\nexport default ChartFilterDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-13.tsx"
+ }
+ ],
+ "meta": {
+ "className": "col-span-full border-r-0"
+ }
+}
\ No newline at end of file
diff --git a/public/r/dialog-01.json b/public/r/dialog-01.json
new file mode 100644
index 0000000..8327fb7
--- /dev/null
+++ b/public/r/dialog-01.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-01",
+ "type": "registry:component",
+ "title": "Dialog 1",
+ "description": "Basic alert dialog with confirmation for destructive actions",
+ "registryDependencies": [
+ "alert-dialog",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-01.tsx",
+ "content": "import {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger\n} from '@/components/ui/alert-dialog'\nimport { Button } from '@/components/ui/button'\n\nconst AlertDialogDemo = () => {\n return (\n \n \n Alert Dialog \n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your account and remove your data from our\n servers.\n \n \n \n Cancel \n Continue \n \n \n \n )\n}\n\nexport default AlertDialogDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-02.json b/public/r/dialog-02.json
new file mode 100644
index 0000000..db7c436
--- /dev/null
+++ b/public/r/dialog-02.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-02",
+ "type": "registry:component",
+ "title": "Dialog 2",
+ "description": "Alert dialog with icon and detailed feature list for update notifications",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert-dialog",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-02.tsx",
+ "content": "import { UploadIcon } from 'lucide-react'\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger\n} from '@/components/ui/alert-dialog'\nimport { Button } from '@/components/ui/button'\n\nconst AlertDialogWithIconDemo = () => {\n return (\n \n \n Alert Dialog (With Icon) \n \n \n \n \n \n
\n New Update is Available \n \n New update is available for your application. Please update to the latest version to enjoy new features.\n \n \n New analytics widgets for daily/weekly metrics \n Simplified navigation menu \n Dark mode support \n Timeline: 6 weeks \n Follow-up meeting scheduled for next Tuesday \n \n \n \n Cancel \n \n Update Now\n \n \n \n \n )\n}\n\nexport default AlertDialogWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-03.json b/public/r/dialog-03.json
new file mode 100644
index 0000000..39d0a10
--- /dev/null
+++ b/public/r/dialog-03.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-03",
+ "type": "registry:component",
+ "title": "Dialog 3",
+ "description": "Destructive alert dialog with warning icon and checkbox for permanent deletion",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert-dialog",
+ "button",
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-03.tsx",
+ "content": "import { TriangleAlertIcon } from 'lucide-react'\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger\n} from '@/components/ui/alert-dialog'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\n\nconst AlertDialogDestructiveDemo = () => {\n return (\n \n \n Alert Dialog Destructive \n \n \n \n \n \n
\n Are you absolutely sure you want to delete? \n \n This action cannot be undone. This will permanently delete your account and remove your data from our\n servers.\n \n \n Don't ask next again \n \n \n \n \n Cancel \n \n Delete\n \n \n \n \n )\n}\n\nexport default AlertDialogDestructiveDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-04.json b/public/r/dialog-04.json
new file mode 100644
index 0000000..dd8ba85
--- /dev/null
+++ b/public/r/dialog-04.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-04",
+ "type": "registry:component",
+ "title": "Dialog 4",
+ "description": "Scrollable dialog with long content and scroll area for product information",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-04.tsx",
+ "content": "import { ChevronLeftIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { ScrollArea } from '@/components/ui/scroll-area'\n\nconst DialogScrollableDemo = () => {\n return (\n \n \n Scrollable Dialog \n \n \n \n \n Product Information \n \n \n
\n
\n
\n Product Name: SuperTech 2000\n
\n
\n The SuperTech 2000 is a high-performance device designed for tech enthusiasts and professionals\n alike, offering superior functionality and innovative features.\n
\n
\n
\n
\n Specifications: \n
\n
\n Processor: 3.6GHz Octa-Core \n Memory: 16GB RAM \n Storage: 1TB SSD \n Display: 15.6” 4K UHD \n Battery Life: 12 hours \n Weight: 2.1kg \n \n
\n
\n
\n Key Features: \n
\n
\n Ultra-fast processing speed for intensive tasks \n Long battery life, perfect for on-the-go professionals \n Sleek and portable design \n Advanced cooling system \n Excellent build quality for durability \n \n
\n
\n
\n Price: \n
\n
$2,499.99 (Includes 1-year warranty)
\n
\n
\n
\n Customer Reviews: \n
\n
\n ”Absolutely fantastic device! The performance is exceptional, and it handles all of my\n design software without any lag.” - John D.\n
\n
\n ”Best purchase I've made in years. The display quality is stunning, and the battery\n lasts all day.” - Sarah L.\n
\n
\n ”The SuperTech 2000 is a game-changer in the tech industry. Worth every penny!” - Emma\n W.\n
\n
\n
\n
\n Return Policy: \n
\n
\n If you're not satisfied with your purchase, we offer a 30-day return policy. Return the\n product within 30 days of purchase for a full refund.\n
\n
\n
\n
\n Warranty: \n
\n
\n Comes with a standard 1-year warranty covering defects in materials and workmanship. Extended\n warranty plans are available.\n
\n
\n
\n
\n \n \n \n \n \n \n Back\n \n \n Read More \n \n \n \n \n )\n}\n\nexport default DialogScrollableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-05.json b/public/r/dialog-05.json
new file mode 100644
index 0000000..ffe7fd8
--- /dev/null
+++ b/public/r/dialog-05.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-05",
+ "type": "registry:component",
+ "title": "Dialog 5",
+ "description": "Scrollable dialog with sticky header for fixed navigation while scrolling content",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-05.tsx",
+ "content": "import { ChevronLeftIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { ScrollArea } from '@/components/ui/scroll-area'\n\nconst DialogStickyHeaderDemo = () => {\n return (\n \n \n Sticky Header Dialog \n \n \n \n Product Information \n \n \n \n
\n
\n
\n Product Name: SuperTech 2000\n
\n
\n The SuperTech 2000 is a high-performance device designed for tech enthusiasts and professionals\n alike, offering superior functionality and innovative features.\n
\n
\n
\n
\n Specifications: \n
\n
\n Processor: 3.6GHz Octa-Core \n Memory: 16GB RAM \n Storage: 1TB SSD \n Display: 15.6” 4K UHD \n Battery Life: 12 hours \n Weight: 2.1kg \n \n
\n
\n
\n Key Features: \n
\n
\n Ultra-fast processing speed for intensive tasks \n Long battery life, perfect for on-the-go professionals \n Sleek and portable design \n Advanced cooling system \n Excellent build quality for durability \n \n
\n
\n
\n Price: \n
\n
$2,499.99 (Includes 1-year warranty)
\n
\n
\n
\n Customer Reviews: \n
\n
\n ”Absolutely fantastic device! The performance is exceptional, and it handles all of my\n design software without any lag.” - John D.\n
\n
\n ”Best purchase I've made in years. The display quality is stunning, and the battery\n lasts all day.” - Sarah L.\n
\n
\n ”The SuperTech 2000 is a game-changer in the tech industry. Worth every penny!” - Emma\n W.\n
\n
\n
\n
\n Return Policy: \n
\n
\n If you're not satisfied with your purchase, we offer a 30-day return policy. Return the\n product within 30 days of purchase for a full refund.\n
\n
\n
\n
\n Warranty: \n
\n
\n Comes with a standard 1-year warranty covering defects in materials and workmanship. Extended\n warranty plans are available.\n
\n
\n
\n
\n \n \n \n \n \n Back\n \n \n Read More \n \n \n \n \n \n )\n}\n\nexport default DialogStickyHeaderDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-06.json b/public/r/dialog-06.json
new file mode 100644
index 0000000..8d84209
--- /dev/null
+++ b/public/r/dialog-06.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-06",
+ "type": "registry:component",
+ "title": "Dialog 6",
+ "description": "Scrollable dialog with sticky footer for persistent action buttons",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-06.tsx",
+ "content": "import { ChevronLeftIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { ScrollArea } from '@/components/ui/scroll-area'\n\nconst DialogStickyFooterDemo = () => {\n return (\n \n \n Sticky Footer Dialog \n \n \n \n \n Product Information \n \n \n
\n
\n
\n Product Name: SuperTech 2000\n
\n
\n The SuperTech 2000 is a high-performance device designed for tech enthusiasts and professionals\n alike, offering superior functionality and innovative features.\n
\n
\n
\n
\n Specifications: \n
\n
\n Processor: 3.6GHz Octa-Core \n Memory: 16GB RAM \n Storage: 1TB SSD \n Display: 15.6” 4K UHD \n Battery Life: 12 hours \n Weight: 2.1kg \n \n
\n
\n
\n Key Features: \n
\n
\n Ultra-fast processing speed for intensive tasks \n Long battery life, perfect for on-the-go professionals \n Sleek and portable design \n Advanced cooling system \n Excellent build quality for durability \n \n
\n
\n
\n Price: \n
\n
$2,499.99 (Includes 1-year warranty)
\n
\n
\n
\n Customer Reviews: \n
\n
\n ”Absolutely fantastic device! The performance is exceptional, and it handles all of my\n design software without any lag.” - John D.\n
\n
\n ”Best purchase I've made in years. The display quality is stunning, and the battery\n lasts all day.” - Sarah L.\n
\n
\n ”The SuperTech 2000 is a game-changer in the tech industry. Worth every penny!” - Emma\n W.\n
\n
\n
\n
\n Return Policy: \n
\n
\n If you're not satisfied with your purchase, we offer a 30-day return policy. Return the\n product within 30 days of purchase for a full refund.\n
\n
\n
\n
\n Warranty: \n
\n
\n Comes with a standard 1-year warranty covering defects in materials and workmanship. Extended\n warranty plans are available.\n
\n
\n
\n
\n \n \n \n \n \n \n \n Back\n \n \n Read More \n \n \n \n )\n}\n\nexport default DialogStickyFooterDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-07.json b/public/r/dialog-07.json
new file mode 100644
index 0000000..4560f76
--- /dev/null
+++ b/public/r/dialog-07.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-07",
+ "type": "registry:component",
+ "title": "Dialog 7",
+ "description": "Full-screen dialog taking up the entire viewport for immersive content",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-07.tsx",
+ "content": "import { ChevronLeftIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { ScrollArea } from '@/components/ui/scroll-area'\n\nconst DialogFullScreenDemo = () => {\n return (\n \n \n Fullscreen Dialog \n \n \n \n \n Product Information \n \n \n
\n
\n
\n Product Name: SuperTech 2000\n
\n
\n The SuperTech 2000 is a high-performance device designed for tech enthusiasts and professionals\n alike, offering superior functionality and innovative features.\n
\n
\n
\n
\n Specifications: \n
\n
\n Processor: 3.6GHz Octa-Core \n Memory: 16GB RAM \n Storage: 1TB SSD \n Display: 15.6” 4K UHD \n Battery Life: 12 hours \n Weight: 2.1kg \n \n
\n
\n
\n Key Features: \n
\n
\n Ultra-fast processing speed for intensive tasks \n Long battery life, perfect for on-the-go professionals \n Sleek and portable design \n Advanced cooling system \n Excellent build quality for durability \n \n
\n
\n
\n Price: \n
\n
$2,499.99 (Includes 1-year warranty)
\n
\n
\n
\n Customer Reviews: \n
\n
\n ”Absolutely fantastic device! The performance is exceptional, and it handles all of my\n design software without any lag.” - John D.\n
\n
\n ”Best purchase I've made in years. The display quality is stunning, and the battery\n lasts all day.” - Sarah L.\n
\n
\n ”The SuperTech 2000 is a game-changer in the tech industry. Worth every penny!” - Emma\n W.\n
\n
\n
\n
\n Return Policy: \n
\n
\n If you're not satisfied with your purchase, we offer a 30-day return policy. Return the\n product within 30 days of purchase for a full refund.\n
\n
\n
\n
\n Warranty: \n
\n
\n Comes with a standard 1-year warranty covering defects in materials and workmanship. Extended\n warranty plans are available.\n
\n
\n
\n
\n \n \n \n \n \n \n \n Back\n \n \n Read More \n \n \n \n )\n}\n\nexport default DialogFullScreenDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-08.json b/public/r/dialog-08.json
new file mode 100644
index 0000000..b23ccf0
--- /dev/null
+++ b/public/r/dialog-08.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-08",
+ "type": "registry:component",
+ "title": "Dialog 8",
+ "description": "Terms and conditions dialog with structured content and accept/decline actions",
+ "registryDependencies": [
+ "button",
+ "dialog"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-08.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\n\nconst DialogTermsAndConditionDemo = () => {\n return (\n \n \n Terms & Condition \n \n \n \n Terms and Condition \n \n
\n \n Eligibility: You must be at least 18 years old to use this\n service.\n \n \n Account Responsibility: You are responsible for maintaining the\n confidentiality of your account and password.\n \n \n Usage: Do not misuse or attempt to disrupt the service.\n \n \n Data Collection: We collect and use your data as described in\n our Privacy Policy.\n \n \n Modifications: We reserve the right to update or modify these\n terms at any time.\n \n \n Termination: YWe may suspend or terminate your access if you\n violate these terms.\n \n \n
\n For full details, please read our complete{' '}\n \n Terms & Conditions\n \n
\n
\n \n \n Cancel \n \n \n I Agree \n \n \n \n \n \n )\n}\n\nexport default DialogTermsAndConditionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-09.json b/public/r/dialog-09.json
new file mode 100644
index 0000000..215f0b8
--- /dev/null
+++ b/public/r/dialog-09.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-09",
+ "type": "registry:component",
+ "title": "Dialog 9",
+ "description": "Subscription dialog with input field and subscribe button",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-09.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogSubscribeDemo = () => {\n return (\n \n \n Subscribe \n \n \n \n Subscribe blog for latest updates \n \n Subscribe to our blog to stay updated with the latest posts and news. Simply enter your email address and\n click 'Subscribe' to receive notifications.\n \n \n \n \n \n )\n}\n\nexport default DialogSubscribeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-10.json b/public/r/dialog-10.json
new file mode 100644
index 0000000..cfe644e
--- /dev/null
+++ b/public/r/dialog-10.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-10",
+ "type": "registry:component",
+ "title": "Dialog 10",
+ "description": "Referral program dialog with avatar display and email sharing functionality",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-10.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n }\n]\n\nconst DialogReferAndEarnDemo = () => {\n return (\n \n \n \n )\n}\n\nexport default DialogReferAndEarnDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-11.json b/public/r/dialog-11.json
new file mode 100644
index 0000000..daa4dc4
--- /dev/null
+++ b/public/r/dialog-11.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-11",
+ "type": "registry:component",
+ "title": "Dialog 11",
+ "description": "Rating feedback dialog with emoji radio buttons and text area for comments",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "checkbox",
+ "label",
+ "radio-group",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-11.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\nimport { Textarea } from '@/components/ui/textarea'\n\nconst DialogRatingDemo = () => {\n const id = useId()\n\n const ratings = [\n { value: '1', label: 'Angry', icon: '😡' },\n { value: '2', label: 'Sad', icon: '🙁' },\n { value: '3', label: 'Neutral', icon: '🙂' },\n { value: '4', label: 'Happy', icon: '😁' },\n { value: '5', label: 'Laughing', icon: '🤩' }\n ]\n\n return (\n \n \n \n Rating \n \n \n \n Help us improve our product for you \n \n \n \n \n How would you like to describe your experience with the app today?\n \n \n {ratings.map(rating => (\n \n \n {rating.icon}\n \n ))}\n \n \n \n
\n
500/500 characters left
\n
\n \n \n I consent to Shadcn Studio contacting me based on my feedback \n
\n\n \n \n Cancel \n \n Submit \n \n \n \n \n \n )\n}\n\nexport default DialogRatingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-12.json b/public/r/dialog-12.json
new file mode 100644
index 0000000..a94ecfb
--- /dev/null
+++ b/public/r/dialog-12.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-12",
+ "type": "registry:component",
+ "title": "Dialog 12",
+ "description": "OTP verification dialog with input-otp component and validation feedback",
+ "dependencies": [
+ "input-otp",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-12.tsx",
+ "content": "'use client'\n\nimport { useEffect, useRef, useState } from 'react'\n\nimport { CheckIcon, MailIcon } from 'lucide-react'\n\nimport { OTPInput, type SlotProps } from 'input-otp'\n\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\n\nimport { cn } from '@/lib/utils'\n\nconst CORRECT_CODE = '11208'\n\nconst DialogOTPVerificationDemo = () => {\n const [value, setValue] = useState('')\n const [hasGuessed, setHasGuessed] = useState(undefined)\n const inputRef = useRef(null)\n const closeButtonRef = useRef(null)\n\n useEffect(() => {\n if (hasGuessed) {\n closeButtonRef.current?.focus()\n }\n }, [hasGuessed])\n\n async function onSubmit(e?: React.FormEvent) {\n e?.preventDefault?.()\n\n inputRef.current?.select()\n await new Promise(r => setTimeout(r, 1_00))\n\n setHasGuessed(value === CORRECT_CODE)\n\n setValue('')\n setTimeout(() => {\n inputRef.current?.blur()\n }, 20)\n }\n\n return (\n \n \n OTP code \n \n \n \n
\n {hasGuessed ? (\n \n ) : (\n \n )}\n
\n
\n \n {hasGuessed ? 'Account verified!' : 'Check Your Email'}\n \n \n {hasGuessed ? (\n \n Congratulations! your email account exa**le@gmail.com has been verified\n \n ) : (\n \n We have sent a verification code to exa**le@gmail.com . Please check your inbox and\n input the code below to activate your account. Try {CORRECT_CODE}\n \n )}\n \n \n
\n\n {hasGuessed ? (\n \n \n \n Continue\n \n \n
\n ) : (\n \n
\n
setHasGuessed(undefined)}\n render={({ slots }) => (\n \n {slots.map((slot, idx) => (\n \n ))}\n
\n )}\n onComplete={onSubmit}\n />\n \n {hasGuessed === false && (\n
\n Invalid code. Please try again.\n
\n )}\n
\n Didn't get a code?{' '}\n \n Resend\n \n
\n
\n )}\n \n \n )\n}\n\nfunction Slot(props: SlotProps) {\n return (\n \n {props.char !== null &&
{props.char}
}\n
\n )\n}\n\nexport default DialogOTPVerificationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-13.json b/public/r/dialog-13.json
new file mode 100644
index 0000000..0819f27
--- /dev/null
+++ b/public/r/dialog-13.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-13",
+ "type": "registry:component",
+ "title": "Dialog 13",
+ "description": "Sign up dialog with gradient background and terms acceptance checkbox",
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-13.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogSignUpDemo = () => {\n const id = useId()\n\n return (\n \n \n \n Sign Up \n \n \n \n Sign Up \n Start your 60-day free trial now. \n \n \n \n \n Email \n \n
\n \n Password \n \n
\n \n \n \n \n Start your trial\n \n \n Or \n
\n \n \n Continue with Google \n \n \n \n \n \n )\n}\n\nexport default DialogSignUpDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-14.json b/public/r/dialog-14.json
new file mode 100644
index 0000000..ae5bf41
--- /dev/null
+++ b/public/r/dialog-14.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-14",
+ "type": "registry:component",
+ "title": "Dialog 14",
+ "description": "Sign in dialog with gradient background and social login options",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-14.tsx",
+ "content": "import { LogInIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogSignInDemo = () => {\n return (\n \n \n \n Sign In \n \n \n \n \n \n
\n Sign in with email \n \n Make a new doc to bring your words, data and teams together. For free.\n \n \n \n \n Email \n \n
\n \n Password \n \n
\n \n \n \n Get Started\n \n \n Or sign in with \n
\n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n )\n}\n\nexport default DialogSignInDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-15.json b/public/r/dialog-15.json
new file mode 100644
index 0000000..06f0696
--- /dev/null
+++ b/public/r/dialog-15.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-15",
+ "type": "registry:component",
+ "title": "Dialog 15",
+ "description": "Invite friends dialog with avatar list and email invitation functionality",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-15.tsx",
+ "content": "import { UserPlusIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst friends = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n fallback: 'CP',\n name: 'Cristofer Press',\n mail: 'cristoferpress@gmail.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n fallback: 'Ck',\n name: 'Carla Korsgaard',\n mail: 'carlakorsgaard@gmail.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'HB',\n name: 'Hanna Baptista',\n mail: 'hannabaptista@gmail.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-4.png',\n fallback: 'ZD',\n name: 'Zord Dorwart',\n mail: 'zorddorwart@gmail.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'CB',\n name: 'Corey Bergson',\n mail: 'coreybergson@gmail.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'JL',\n name: 'James Lubin',\n mail: 'jameslubin@gmail.com'\n }\n]\n\nconst DialogInviteFriendsDemo = () => {\n return (\n \n \n Invite \n \n \n \n Invite new members \n \n \n \n Email \n \n
\n \n Send Invite\n \n \n Invite Friends
\n \n {friends.map((item, index) => (\n \n \n
\n \n {item.fallback} \n \n
\n {item.name} \n {item.mail} \n
\n
\n \n \n Invite\n \n \n ))}\n \n \n \n )\n}\n\nexport default DialogInviteFriendsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-16.json b/public/r/dialog-16.json
new file mode 100644
index 0000000..416ea27
--- /dev/null
+++ b/public/r/dialog-16.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-16",
+ "type": "registry:component",
+ "title": "Dialog 16",
+ "description": "Profile edit dialog positioned at top-left corner of screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-16.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogTopLeftAlignDemo = () => {\n return (\n \n \n \n Top left align \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogTopLeftAlignDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-17.json b/public/r/dialog-17.json
new file mode 100644
index 0000000..2ea64e3
--- /dev/null
+++ b/public/r/dialog-17.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-17",
+ "type": "registry:component",
+ "title": "Dialog 17",
+ "description": "Profile edit dialog positioned at top-align corner of screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-17.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogTopAlignDemo = () => {\n return (\n \n \n \n Top align \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogTopAlignDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-18.json b/public/r/dialog-18.json
new file mode 100644
index 0000000..5c391e6
--- /dev/null
+++ b/public/r/dialog-18.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-18",
+ "type": "registry:component",
+ "title": "Dialog 18",
+ "description": "Profile edit dialog positioned at top-right-aligned of screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-18.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogTopRightAlignDemo = () => {\n return (\n \n \n \n Top right align \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogTopRightAlignDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-19.json b/public/r/dialog-19.json
new file mode 100644
index 0000000..4efc938
--- /dev/null
+++ b/public/r/dialog-19.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-19",
+ "type": "registry:component",
+ "title": "Dialog 19",
+ "description": "Profile edit dialog positioned at middle-left-aligned of screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-19.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogMiddleLeftAlignDemo = () => {\n return (\n \n \n \n Middle left align \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogMiddleLeftAlignDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-20.json b/public/r/dialog-20.json
new file mode 100644
index 0000000..49cd954
--- /dev/null
+++ b/public/r/dialog-20.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-20",
+ "type": "registry:component",
+ "title": "Dialog 20",
+ "description": "Profile edit dialog positioned at middle-right side of screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-20.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogMiddleRightAlignDemo = () => {\n return (\n \n \n \n Middle right align \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogMiddleRightAlignDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-21.json b/public/r/dialog-21.json
new file mode 100644
index 0000000..9dadcee
--- /dev/null
+++ b/public/r/dialog-21.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-21",
+ "type": "registry:component",
+ "title": "Dialog 21",
+ "description": "Profile edit dialog positioned at bottom-left-aligned of screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-21.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogBottomLeftAlignDemo = () => {\n return (\n \n \n \n Bottom left align \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogBottomLeftAlignDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-22.json b/public/r/dialog-22.json
new file mode 100644
index 0000000..f5a204a
--- /dev/null
+++ b/public/r/dialog-22.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-22",
+ "type": "registry:component",
+ "title": "Dialog 22",
+ "description": "Profile edit dialog positioned at center left of screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-22.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogBottomAlignDemo = () => {\n return (\n \n \n \n Bottom align \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogBottomAlignDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-22.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-23.json b/public/r/dialog-23.json
new file mode 100644
index 0000000..6357604
--- /dev/null
+++ b/public/r/dialog-23.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-23",
+ "type": "registry:component",
+ "title": "Dialog 23",
+ "description": "Profile edit dialog positioned at bottom right aligned of screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-23.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogBottomRightAlignDemo = () => {\n return (\n \n \n \n Bottom right align \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogBottomRightAlignDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-23.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dialog-24.json b/public/r/dialog-24.json
new file mode 100644
index 0000000..5c4d3c3
--- /dev/null
+++ b/public/r/dialog-24.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-24",
+ "type": "registry:component",
+ "title": "Dialog 24",
+ "description": "Profile edit dialog with slide-up animation from bottom",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-24.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogSlideToTopDemo = () => {\n return (\n \n \n \n Slide to top \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogSlideToTopDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-24.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/dialog-25.json b/public/r/dialog-25.json
new file mode 100644
index 0000000..7213bd6
--- /dev/null
+++ b/public/r/dialog-25.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-25",
+ "type": "registry:component",
+ "title": "Dialog 25",
+ "description": "Profile edit dialog with slide-right animation from left side of the screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-25.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogSlideToRightDemo = () => {\n return (\n \n \n \n Slide to right \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogSlideToRightDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-25.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/dialog-26.json b/public/r/dialog-26.json
new file mode 100644
index 0000000..8b92a85
--- /dev/null
+++ b/public/r/dialog-26.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dialog-26",
+ "type": "registry:component",
+ "title": "Dialog 26",
+ "description": "Profile edit dialog with zoom in animation from center of the screen",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-26.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst DialogZoomInDemo = () => {\n return (\n \n \n \n Zoom in \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n \n Cancel \n \n Save changes \n \n \n \n \n )\n}\n\nexport default DialogZoomInDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-26.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-01.json b/public/r/dropdown-menu-01.json
new file mode 100644
index 0000000..47b7256
--- /dev/null
+++ b/public/r/dropdown-menu-01.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-01",
+ "type": "registry:component",
+ "title": "Dropdown Menu 1",
+ "description": "Basic dropdown menu with groups, separators, and submenu for account actions",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-01.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst DropdownMenuDemo = () => {\n return (\n \n \n Basic \n \n \n My Account \n \n \n Profile \n Billing \n \n \n \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n GitHub \n Support \n API \n \n \n \n )\n}\n\nexport default DropdownMenuDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-02.json b/public/r/dropdown-menu-02.json
new file mode 100644
index 0000000..ba25b77
--- /dev/null
+++ b/public/r/dropdown-menu-02.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-02",
+ "type": "registry:component",
+ "title": "Dropdown Menu 2",
+ "description": "User switcher dropdown with avatar display and task assignment selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-02.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CheckIcon } from 'lucide-react'\n\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst users = [\n {\n id: 1,\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n fallback: 'PG',\n name: 'Phillip George',\n mail: 'phillip12@gmail.com'\n },\n {\n id: 2,\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n fallback: 'JD',\n name: 'Jaylon Donin',\n mail: 'jaylo-don@yahoo.com'\n },\n {\n id: 3,\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'TC',\n name: 'Tiana Curtis',\n mail: 'Tiana_curtis@gmail.com'\n }\n]\n\nconst DropdownMenuUserSwitcherDemo = () => {\n const [selectUser, setSelectUser] = useState(users[0])\n\n return (\n \n \n \n \n {selectUser.fallback} \n \n \n {selectUser.name} \n {selectUser.mail} \n
\n \n \n Task Assignment \n {users.map(user => (\n setSelectUser(user)}>\n \n
\n \n {user.fallback} \n \n
\n {user.name} \n {user.mail} \n
\n
\n {selectUser.id === user.id && }\n \n ))}\n \n \n )\n}\n\nexport default DropdownMenuUserSwitcherDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-03.json b/public/r/dropdown-menu-03.json
new file mode 100644
index 0000000..6b3d3b2
--- /dev/null
+++ b/public/r/dropdown-menu-03.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-03",
+ "type": "registry:component",
+ "title": "Dropdown Menu 3",
+ "description": "Chat list dropdown with avatars, message previews, and notification badges",
+ "registryDependencies": [
+ "avatar",
+ "badge",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-03.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst listItems = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n fallback: 'PG',\n name: 'Phillip George',\n message: 'Hii samira, thanks for the...',\n time: '9:00AM',\n newMessages: 1\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n fallback: 'JD',\n name: 'Jaylon Donin',\n message: \"I'll send the texts and...\",\n time: '10:00PM',\n newMessages: 3\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'TC',\n name: 'Tiana Curtis',\n message: \"That's Great!\",\n time: '8:30AM',\n newMessages: null\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-4.png',\n fallback: 'ZV',\n name: 'Zaire Vetrovs',\n message: 'https://www.youtub...',\n time: '5:50AM',\n newMessages: 2\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'KP',\n name: 'Kianna Philips',\n message: 'Okay, It was awesome.',\n time: '6.45PM',\n newMessages: null\n }\n]\n\nconst DropdownMenuItemAvatarDemo = () => {\n return (\n \n \n Menu item with avatar \n \n \n Chat List \n \n {listItems.map((item, index) => (\n \n \n \n {item.fallback} \n \n \n {item.name} \n {item.message} \n
\n {item.newMessages ? (\n \n {item.time} \n {item.newMessages} \n
\n ) : (\n {item.time} \n )}\n \n ))}\n \n \n \n )\n}\n\nexport default DropdownMenuItemAvatarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-04.json b/public/r/dropdown-menu-04.json
new file mode 100644
index 0000000..ef2588d
--- /dev/null
+++ b/public/r/dropdown-menu-04.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-04",
+ "type": "registry:component",
+ "title": "Dropdown Menu 4",
+ "description": "Contact list dropdown with avatars, email display, and send action buttons",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-04.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst listItems = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'AD',\n name: 'Angel Dorwart',\n mail: 'sbaker@hotmail.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-7.png',\n fallback: 'SR',\n name: 'Skylar Rosser',\n mail: 'gbaker@yahoo.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-8.png',\n fallback: 'DB',\n name: 'Dulce Botosh',\n mail: 'tlee@gmail.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-9.png',\n fallback: 'AS',\n name: 'Ahmad Stanton',\n mail: 'kdavis@hotmail.com'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-10.png',\n fallback: 'RG',\n name: 'Randy Gouse',\n mail: 'ijackson@yahoo.com'\n }\n]\n\nconst DropdownMenuItemActionDemo = () => {\n return (\n \n \n Menu item with action \n \n \n Contact List \n \n {listItems.map((item, index) => (\n \n \n \n {item.fallback} \n \n \n {item.name} \n {item.mail} \n
\n \n Send\n \n \n ))}\n \n Add Contact \n \n \n \n \n )\n}\n\nexport default DropdownMenuItemActionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-05.json b/public/r/dropdown-menu-05.json
new file mode 100644
index 0000000..b046c20
--- /dev/null
+++ b/public/r/dropdown-menu-05.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-05",
+ "type": "registry:component",
+ "title": "Dropdown Menu 5",
+ "description": "Meeting schedule dropdown with avatars, switch toggles for scheduling control",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-05.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\nimport { Switch } from '@/components/ui/switch'\n\nconst avatars = [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'OS',\n name: 'Olivia Sparks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'HL',\n name: 'Howard Lloyd'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-16.png',\n fallback: 'JW',\n name: 'Jenny Wilson'\n }\n]\n\nconst DropdownMeetingScheduleDemo = () => {\n const [firstMeeting, setFirstMeeting] = useState(false)\n const [secondMeeting, setSecondMeeting] = useState(true)\n const [thirdMeeting, setThirdMeeting] = useState(false)\n const [forthMeeting, setForthMeeting] = useState(true)\n const [fifthMeeting, setFifthMeeting] = useState(false)\n\n return (\n \n \n Meetings Schedule \n \n \n Today's meetings \n \n event.preventDefault()}>\n 08:30 \n \n Daily Project Review \n Team organization \n
\n \n \n Angel \n \n \n Privacy \n \n
\n \n event.preventDefault()}>\n 09:00 \n \n Sprint Surge \n Daily Boost for Agile Progress \n
\n \n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n \n Privacy \n \n
\n \n event.preventDefault()}>\n 11:45 \n \n Project Status Update \n Progress Overview Update \n
\n \n \n Angel \n \n \n Privacy \n \n
\n \n event.preventDefault()}>\n 06:30 \n \n Team Performance \n Team Metrics Evaluation \n
\n \n {avatars.map((avatar, index) => (\n
\n \n {avatar.fallback} \n \n ))}\n
\n \n Privacy \n \n
\n \n event.preventDefault()}>\n 10:50 \n \n Stakeholder Feedback \n Feedback from Stakeholders \n
\n \n \n Angel \n \n \n Privacy \n \n
\n \n \n \n \n )\n}\n\nexport default DropdownMeetingScheduleDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-06.json b/public/r/dropdown-menu-06.json
new file mode 100644
index 0000000..5a6bc33
--- /dev/null
+++ b/public/r/dropdown-menu-06.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-06",
+ "type": "registry:component",
+ "title": "Dropdown Menu 6",
+ "description": "Text editing dropdown menu with formatting options and descriptions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-06.tsx",
+ "content": "import { AlignJustifyIcon, Heading1Icon, Heading2Icon, PencilIcon, TextSearchIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst listItems = [\n {\n icon: Heading1Icon,\n property: 'Heading 1',\n description: 'big section or hero heading'\n },\n {\n icon: Heading2Icon,\n property: 'Heading 2',\n description: 'Sub section heading'\n },\n {\n icon: AlignJustifyIcon,\n property: 'Align justify',\n description: 'text will fill all area'\n },\n {\n icon: TextSearchIcon,\n property: 'text search',\n description: 'find any text'\n }\n]\n\nconst DropdownMenuEditMenuDemo = () => {\n return (\n \n \n \n \n Edit menu \n \n \n \n Edit text \n \n {listItems.map((item, index) => (\n \n \n \n \n \n {item.property} \n {item.description} \n
\n \n ))}\n \n \n \n )\n}\n\nexport default DropdownMenuEditMenuDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-07.json b/public/r/dropdown-menu-07.json
new file mode 100644
index 0000000..d0c9a22
--- /dev/null
+++ b/public/r/dropdown-menu-07.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-07",
+ "type": "registry:component",
+ "title": "Dropdown Menu 7",
+ "description": "User account menu dropdown with avatar trigger and profile management options",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-07.tsx",
+ "content": "import { UserIcon, SettingsIcon, BellIcon, LogOutIcon, CreditCardIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst listItems = [\n {\n icon: UserIcon,\n property: 'Profile'\n },\n {\n icon: SettingsIcon,\n property: 'Settings'\n },\n {\n icon: CreditCardIcon,\n property: 'Billing'\n },\n {\n icon: BellIcon,\n property: 'Notifications'\n },\n {\n icon: LogOutIcon,\n property: 'Sign Out'\n }\n]\n\nconst DropdownMenuUserMenuDemo = () => {\n return (\n \n \n \n \n \n \n \n My Account \n \n {listItems.map((item, index) => (\n \n \n {item.property} \n \n ))}\n \n \n \n )\n}\n\nexport default DropdownMenuUserMenuDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-08.json b/public/r/dropdown-menu-08.json
new file mode 100644
index 0000000..1151295
--- /dev/null
+++ b/public/r/dropdown-menu-08.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-08",
+ "type": "registry:component",
+ "title": "Dropdown Menu 8",
+ "description": "User profile dropdown with avatar header, user info, and submenu for invitations",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-08.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst DropdownMenuUserProfileDemo = () => {\n return (\n \n \n User Profile \n \n \n \n \n \n PG \n \n \n Phillip George \n phillip@example.com \n
\n \n \n \n Profile \n Billing \n \n \n \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n GitHub \n Support \n API \n \n \n \n )\n}\n\nexport default DropdownMenuUserProfileDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-09.json b/public/r/dropdown-menu-09.json
new file mode 100644
index 0000000..2b020f2
--- /dev/null
+++ b/public/r/dropdown-menu-09.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-09",
+ "type": "registry:component",
+ "title": "Dropdown Menu 9",
+ "description": "Start-aligned dropdown menu with edit, share, and delete actions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-09.tsx",
+ "content": "import { PencilLineIcon, UploadIcon, Trash2Icon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuSeparator,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst DropdownMenuAlignStartDemo = () => {\n return (\n \n \n Align Start \n \n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n Delete \n \n \n \n \n )\n}\n\nexport default DropdownMenuAlignStartDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-10.json b/public/r/dropdown-menu-10.json
new file mode 100644
index 0000000..d7d5829
--- /dev/null
+++ b/public/r/dropdown-menu-10.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-10",
+ "type": "registry:component",
+ "title": "Dropdown Menu 10",
+ "description": "End-aligned dropdown menu with browser actions and keyboard shortcuts",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-10.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst DropdownMenuAlignEndDemo = () => {\n return (\n \n \n Align End \n \n \n \n \n New Tab⌘ + T \n \n \n New Window ⌘ + N \n \n \n \n New Incognito Window ⌘ + ⇧ + N \n \n \n History ⌘ + Y \n \n \n Downloads ⌥ + ⇧ + L \n \n \n \n \n )\n}\n\nexport default DropdownMenuAlignEndDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-11.json b/public/r/dropdown-menu-11.json
new file mode 100644
index 0000000..f432c30
--- /dev/null
+++ b/public/r/dropdown-menu-11.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-11",
+ "type": "registry:component",
+ "title": "Dropdown Menu 11",
+ "description": "Task priority selector dropdown with icons and priority levels",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-11.tsx",
+ "content": "import { ChevronDownIcon, ChevronUpIcon, ChevronsUpIcon, EqualIcon, ChevronsDownIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst listItems = [\n {\n icon: ChevronsUpIcon,\n color: 'text-destructive',\n priority: 'Highest'\n },\n {\n icon: ChevronUpIcon,\n color: 'text-destructive/60',\n priority: 'High'\n },\n {\n icon: EqualIcon,\n color: 'text-amber-600 dark:text-amber-400',\n priority: 'Medium'\n },\n {\n icon: ChevronDownIcon,\n color: 'text-green-600/60 dark:text-green-400/60',\n priority: 'Low'\n },\n {\n icon: ChevronsDownIcon,\n color: 'text-green-600 dark:text-green-400',\n priority: 'Lowest'\n }\n]\n\nconst DropdownMenuBorderedMenuDemo = () => {\n return (\n \n \n Bordered Menu \n \n \n Task priority \n \n {listItems.map((item, index) => (\n \n \n {item.priority}\n \n ))}\n \n \n \n )\n}\n\nexport default DropdownMenuBorderedMenuDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-12.json b/public/r/dropdown-menu-12.json
new file mode 100644
index 0000000..2fb13ce
--- /dev/null
+++ b/public/r/dropdown-menu-12.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-12",
+ "type": "registry:component",
+ "title": "Dropdown Menu 12",
+ "description": "User profile menu dropdown with icons for profile, settings, billing, and FAQ",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-12.tsx",
+ "content": "import { CircleHelpIcon, DollarSignIcon, ReceiptIcon, SettingsIcon, UserIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst DropdownMenuItemIconDemo = () => {\n return (\n \n \n Menu item with icon \n \n \n User Profile \n \n \n \n Profile\n \n \n \n Settings\n \n \n \n Billing Plans\n \n \n \n Pricing\n \n \n \n FAQ\n \n \n \n \n )\n}\n\nexport default DropdownMenuItemIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-13.json b/public/r/dropdown-menu-13.json
new file mode 100644
index 0000000..dbd376b
--- /dev/null
+++ b/public/r/dropdown-menu-13.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-13",
+ "type": "registry:component",
+ "title": "Dropdown Menu 13",
+ "description": "Dropdown with checkbox controls for UI elements",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-13.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst DropdownMenuCheckboxDemo = () => {\n const [showStatusBar, setShowStatusBar] = useState(true)\n const [showActivityBar, setShowActivityBar] = useState(false)\n const [showPanel, setShowPanel] = useState(false)\n\n return (\n \n \n With checkbox \n \n \n Appearance \n \n \n Status Bar\n \n \n API\n \n \n Invite users\n \n \n \n )\n}\n\nexport default DropdownMenuCheckboxDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-14.json b/public/r/dropdown-menu-14.json
new file mode 100644
index 0000000..0ba2a67
--- /dev/null
+++ b/public/r/dropdown-menu-14.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-14",
+ "type": "registry:component",
+ "title": "Dropdown Menu 14",
+ "description": "Radio group selection dropdown for panel position with single choice selection",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-14.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nconst DropdownMenuRadioGroupDemo = () => {\n const [position, setPosition] = useState('bottom')\n\n return (\n \n \n With radio \n \n \n Panel Position \n \n \n Top \n Bottom \n \n Right\n \n \n \n \n )\n}\n\nexport default DropdownMenuRadioGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-15.json b/public/r/dropdown-menu-15.json
new file mode 100644
index 0000000..f04dffe
--- /dev/null
+++ b/public/r/dropdown-menu-15.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-15",
+ "type": "registry:component",
+ "title": "Dropdown Menu 15",
+ "description": "Left side animation dropdown menu",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-15.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n DropdownMenuSeparator\n} from '@/components/ui/dropdown-menu'\n\nconst DropdownSlideLeftAnimationDemo = () => {\n return (\n \n \n Slide Left Animation \n \n \n Settings \n \n My Profile \n Settings \n Billing \n FAQs \n \n \n Contact \n \n Call Support \n Chat with us \n \n \n \n )\n}\n\nexport default DropdownSlideLeftAnimationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-15.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/dropdown-menu-16.json b/public/r/dropdown-menu-16.json
new file mode 100644
index 0000000..4cd72f5
--- /dev/null
+++ b/public/r/dropdown-menu-16.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "dropdown-menu-16",
+ "type": "registry:component",
+ "title": "Dropdown Menu 16",
+ "description": "Animated dropdown menu with slide up animation effect",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-16.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\nimport { Switch } from '@/components/ui/switch'\n\nconst DropdownMenuSlideUpAnimationDemo = () => {\n const [googleSwitch, setGoogleSwitch] = useState(false)\n const [twitterSwitch, setTwitterSwitch] = useState(false)\n const [linkedinSwitch, setLinkedinSwitch] = useState(false)\n const [dribbbleSwitch, setDribbbleSwitch] = useState(false)\n const [behanceSwitch, setBehanceSwitch] = useState(false)\n\n return (\n \n \n Slide Up Animation \n \n \n Apps notification \n \n event.preventDefault()}>\n \n Google \n \n \n event.preventDefault()}>\n \n Twitter \n \n \n event.preventDefault()}>\n \n Linkedin \n \n \n event.preventDefault()}>\n \n Dribbble \n \n \n event.preventDefault()}>\n \n Behance \n \n \n \n \n \n )\n}\n\nexport default DropdownMenuSlideUpAnimationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-16.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/elegant-luxury.json b/public/r/elegant-luxury.json
new file mode 100644
index 0000000..03fe7c8
--- /dev/null
+++ b/public/r/elegant-luxury.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "elegant-luxury",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Poppins, sans-serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "font-serif": "Libre Baskerville, serif",
+ "radius": "0.375rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.22 0 0)",
+ "card": "oklch(0.98 0 0)",
+ "card-foreground": "oklch(0.22 0 0)",
+ "popover": "oklch(0.98 0 0)",
+ "popover-foreground": "oklch(0.22 0 0)",
+ "primary": "oklch(0.47 0.15 25.06)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.96 0.04 88.18)",
+ "secondary-foreground": "oklch(0.48 0.10 75.09)",
+ "muted": "oklch(0.94 0.01 48.70)",
+ "muted-foreground": "oklch(0.44 0.01 73.63)",
+ "accent": "oklch(0.96 0.06 94.84)",
+ "accent-foreground": "oklch(0.40 0.13 25.81)",
+ "destructive": "oklch(0.44 0.16 26.84)",
+ "border": "oklch(0.94 0.03 81.74)",
+ "input": "oklch(0.94 0.03 81.74)",
+ "ring": "oklch(0.47 0.15 25.06)",
+ "chart-1": "oklch(0.51 0.19 27.52)",
+ "chart-2": "oklch(0.47 0.15 25.06)",
+ "chart-3": "oklch(0.40 0.13 25.81)",
+ "chart-4": "oklch(0.56 0.15 49.06)",
+ "chart-5": "oklch(0.47 0.12 46.52)",
+ "sidebar": "oklch(0.94 0.01 48.70)",
+ "sidebar-foreground": "oklch(0.22 0 0)",
+ "sidebar-primary": "oklch(0.47 0.15 25.06)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.96 0.06 94.84)",
+ "sidebar-accent-foreground": "oklch(0.40 0.13 25.81)",
+ "sidebar-border": "oklch(0.94 0.03 81.74)",
+ "sidebar-ring": "oklch(0.47 0.15 25.06)",
+ "font-sans": "Poppins, sans-serif",
+ "font-serif": "Libre Baskerville, serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "radius": "0.375rem",
+ "shadow-color": "hsl(0 63% 18%)",
+ "shadow-opacity": "0.12",
+ "shadow-blur": "16px",
+ "shadow-spread": "-2px",
+ "shadow-offset-x": "1px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.06)",
+ "shadow-xs": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.06)",
+ "shadow-sm": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 1px 2px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 1px 2px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow-md": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 2px 4px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow-lg": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 4px 6px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow-xl": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 8px 10px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow-2xl": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.30)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.22 0.01 52.96)",
+ "foreground": "oklch(0.97 0 0)",
+ "card": "oklch(0.27 0.01 39.35)",
+ "card-foreground": "oklch(0.97 0 0)",
+ "popover": "oklch(0.27 0.01 39.35)",
+ "popover-foreground": "oklch(0.97 0 0)",
+ "primary": "oklch(0.51 0.19 27.52)",
+ "primary-foreground": "oklch(0.98 0 0)",
+ "secondary": "oklch(0.47 0.12 46.52)",
+ "secondary-foreground": "oklch(0.96 0.06 94.84)",
+ "muted": "oklch(0.27 0.01 39.35)",
+ "muted-foreground": "oklch(0.87 0 0)",
+ "accent": "oklch(0.56 0.15 49.06)",
+ "accent-foreground": "oklch(0.96 0.06 94.84)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.37 0.01 73.58)",
+ "input": "oklch(0.37 0.01 73.58)",
+ "ring": "oklch(0.51 0.19 27.52)",
+ "chart-1": "oklch(0.71 0.17 21.96)",
+ "chart-2": "oklch(0.64 0.21 25.39)",
+ "chart-3": "oklch(0.58 0.22 27.29)",
+ "chart-4": "oklch(0.84 0.16 84.06)",
+ "chart-5": "oklch(0.77 0.16 69.82)",
+ "sidebar": "oklch(0.22 0.01 52.96)",
+ "sidebar-foreground": "oklch(0.97 0 0)",
+ "sidebar-primary": "oklch(0.51 0.19 27.52)",
+ "sidebar-primary-foreground": "oklch(0.98 0 0)",
+ "sidebar-accent": "oklch(0.56 0.15 49.06)",
+ "sidebar-accent-foreground": "oklch(0.96 0.06 94.84)",
+ "sidebar-border": "oklch(0.37 0.01 73.58)",
+ "sidebar-ring": "oklch(0.51 0.19 27.52)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/error-page-01.json b/public/r/error-page-01.json
new file mode 100644
index 0000000..a8db39d
--- /dev/null
+++ b/public/r/error-page-01.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "error-page-01",
+ "type": "registry:block",
+ "title": "Error 1",
+ "description": "Two-column error page layout with left-side text content (Whoops heading, error message, description) and right-side black background featuring centered astronaut illustration",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/error-page/error-page-01/page.tsx",
+ "content": "import Error from '@/components/shadcn-studio/blocks/error-page-01/error-page-01'\n\nconst ErrorPage = () => {\n return \n}\n\nexport default ErrorPage\n",
+ "type": "registry:page",
+ "target": "app/error-page-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/error-page-01/error-page-01.tsx",
+ "content": "import { Button } from '@/components/ui/button'\n\nconst Error = () => {\n return (\n \n
\n
Whoops! \n
Something went wrong \n
\n The page you're looking for isn't found, we suggest you back to home.\n
\n
\n Back to home page \n \n
\n\n {/* Right Section: Illustration */}\n
\n
\n
\n
\n
\n )\n}\n\nexport default Error\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/error-page-01/error-page-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "error-page"
+ }
+}
\ No newline at end of file
diff --git a/public/r/faq-component-01.json b/public/r/faq-component-01.json
new file mode 100644
index 0000000..691cd95
--- /dev/null
+++ b/public/r/faq-component-01.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "faq-component-01",
+ "type": "registry:block",
+ "title": "FAQ 1",
+ "description": "Simple accordion-style FAQ section with collapsible questions and answers using shadcn/ui accordion component, featuring a clean header and single-column layout for basic Q&A display",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/faq-component/faq-component-01/page.tsx",
+ "content": "import FAQ from '@/components/shadcn-studio/blocks/faq-component-01/faq-component-01'\n\nconst faqItems = [\n {\n question: 'Do you charge for each upgrade?',\n answer:\n 'Some upgrades are free, while others may have an additional cost, depending on the type of upgrade and your current plan. For specific pricing details, please check our pricing page or contact our support team.'\n },\n {\n question: 'Do I need to purchase a license for each website?',\n answer:\n 'Yes, you need to purchase a separate license for each website where you plan to use our components. Each license is tied to a single domain and its subdomains. This ensures proper licensing compliance and helps us maintain and improve our products for all users.'\n },\n {\n question: 'What is regular license?',\n answer:\n 'A regular license grants you the right to use our components on a single website or project. It includes access to all basic features, documentation, and standard support. This license is perfect for individual developers or small businesses working on a single project.'\n },\n {\n question: 'What is extended license?',\n answer:\n 'An extended license provides additional rights and features beyond the regular license. It includes usage rights for multiple websites, priority support, access to premium components, and the ability to use components in commercial projects that you sell to end customers. Perfect for agencies and large enterprises.'\n }\n]\n\nconst FAQPage = () => {\n return \n}\n\nexport default FAQPage\n",
+ "type": "registry:page",
+ "target": "app/faq-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/faq-component-01/faq-component-01.tsx",
+ "content": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'\n\ntype FAQs = {\n question: string\n answer: string\n}[]\n\nconst FAQ = ({ faqItems }: { faqItems: FAQs }) => {\n return (\n \n \n {/* FAQ Header */}\n
\n
Need Help? We've Got Answers \n
\n Explore Our Most Commonly Asked Questions and Find the Information You Need.\n
\n
\n\n
\n {faqItems.map((item, index) => (\n \n {item.question} \n {item.answer} \n \n ))}\n \n
\n \n )\n}\n\nexport default FAQ\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/faq-component-01/faq-component-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "faq-component"
+ }
+}
\ No newline at end of file
diff --git a/public/r/features-section-01.json b/public/r/features-section-01.json
new file mode 100644
index 0000000..07c52ed
--- /dev/null
+++ b/public/r/features-section-01.json
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "features-section-01",
+ "type": "registry:block",
+ "title": "Features 1",
+ "description": "Three-column grid features section with header, description, \"See all features\" button, and feature cards containing avatar icons, titles, and descriptions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card",
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/features-section/features-section-01/page.tsx",
+ "content": "import { SwatchBookIcon, SearchIcon, StarIcon, SmartphoneIcon, LockKeyholeIcon, ShieldBanIcon } from 'lucide-react'\n\nimport Features from '@/components/shadcn-studio/blocks/features-section-01/features-section-01'\n\nconst featuresList = [\n {\n icon: SwatchBookIcon,\n title: 'User-Friendly Interface',\n description:\n \"Navigate effortlessly with our intuitive design, optimised for all devices. Enjoy a seamless experience whether you're on a computer or mobile.\",\n cardBorderColor: 'border-primary/40 hover:border-primary',\n avatarTextColor: 'text-primary',\n avatarBgColor: 'bg-primary/10'\n },\n {\n icon: ShieldBanIcon,\n title: 'Secure Checkout',\n description:\n 'Enjoy a safe shopping experience with multiple payment options and SSL encryption. Your personal and financial information is always protected.',\n cardBorderColor: 'border-green-600/40 hover:border-green-600 dark:border-green-400/40 dark:hover:border-green-400',\n avatarTextColor: 'text-green-600 dark:text-green-400',\n avatarBgColor: 'bg-green-600/10 dark:bg-green-400/10'\n },\n {\n icon: SearchIcon,\n title: 'Advanced Search',\n description:\n 'Find products quickly with advanced filters, sorting options, and suggestion. Save time and effortlessly locate exactly what you need with ease.',\n cardBorderColor: 'border-amber-600/40 hover:border-amber-600 dark:border-amber-400/40 dark:hover:border-amber-400',\n avatarTextColor: 'text-amber-600 dark:text-amber-400',\n avatarBgColor: 'bg-amber-600/10 dark:bg-amber-400/10'\n },\n {\n icon: StarIcon,\n title: 'Customer Reviews and Ratings',\n description:\n 'Make informed decisions with detailed product reviews and ratings from other buyers. Trust the experiences of fellow shoppers to guide choices.',\n cardBorderColor: 'border-destructive/40 hover:border-destructive',\n avatarTextColor: 'text-destructive',\n avatarBgColor: 'bg-destructive/10'\n },\n {\n icon: SmartphoneIcon,\n title: 'Mobile App Integration',\n description:\n 'Enhance your shopping experience with our mobile app and push notifications. Stay updated on arrivals and exclusive offers directly on phone.',\n cardBorderColor: 'border-sky-600/40 hover:border-sky-600 dark:border-sky-400/40 dark:hover:border-sky-400',\n avatarTextColor: 'text-sky-600 dark:text-sky-400',\n avatarBgColor: 'bg-sky-600/10 dark:bg-sky-400/10'\n },\n {\n icon: LockKeyholeIcon,\n title: 'Security Features',\n description:\n 'Protect your data with fraud detection and two-factor authentication. Ensure a secure environment for all transactions and account activities.',\n cardBorderColor: 'border-primary/40 hover:border-primary',\n avatarTextColor: 'text-primary',\n avatarBgColor: 'bg-primary/10'\n }\n]\n\nconst FeaturesPage = () => {\n return \n}\n\nexport default FeaturesPage\n",
+ "type": "registry:page",
+ "target": "app/features-section-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/features-section-01/features-section-01.tsx",
+ "content": "import type { ComponentType } from 'react'\n\nimport { ArrowRightIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent } from '@/components/ui/card'\n\nimport { cn } from '@/lib/utils'\n\ntype Features = {\n icon: ComponentType\n title: string\n description: string\n cardBorderColor: string\n avatarTextColor: string\n avatarBgColor: string\n}[]\n\nconst Features = ({ featuresList }: { featuresList: Features }) => {\n return (\n \n \n {/* Header */}\n
\n
Discover the Exclusive Perks Today \n
\n Explore key features designed to enhance your shopping experience with intuitive navigation, robust\n security, and seamless functionality.\n
\n
\n \n See all features\n \n \n \n
\n\n
\n {featuresList.map((features, index) => (\n
\n \n \n svg]:size-6', features.avatarBgColor)}>\n \n \n \n {features.title} \n {features.description}
\n \n \n ))}\n
\n
\n \n )\n}\n\nexport default Features\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/features-section-01/features-section-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "features-section"
+ }
+}
\ No newline at end of file
diff --git a/public/r/footer-component-01.json b/public/r/footer-component-01.json
new file mode 100644
index 0000000..ba9f891
--- /dev/null
+++ b/public/r/footer-component-01.json
@@ -0,0 +1,44 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "footer-component-01",
+ "type": "registry:block",
+ "title": "Footer 1",
+ "description": "Simple three-section footer with logo and brand name, centered navigation links, social media icons, separator line, and copyright text with heart emoji",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/footer-component/footer-component-01/page.tsx",
+ "content": "import Footer from '@/components/shadcn-studio/blocks/footer-component-01/footer-component-01'\n\nconst FooterPage = () => {\n return \n}\n\nexport default FooterPage\n",
+ "type": "registry:page",
+ "target": "app/footer-component-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst Logo = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/footer-component-01/footer-component-01.tsx",
+ "content": "import { FacebookIcon, InstagramIcon, TwitterIcon, YoutubeIcon } from 'lucide-react'\n\nimport { Separator } from '@/components/ui/separator'\n\nimport Logo from '@/components/layout/logo'\n\nconst Footer = () => {\n return (\n \n )\n}\n\nexport default Footer\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/footer-component-01/footer-component-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "content": "// SVG Imports\nimport LogoSvg from '@/assets/svg/logo'\n\n// Util Imports\nimport { cn } from '@/lib/utils'\n\nconst Logo = ({ className }: { className?: string }) => {\n return (\n \n \n shadcn/studio \n
\n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "footer-component"
+ }
+}
\ No newline at end of file
diff --git a/public/r/forgot-password-01.json b/public/r/forgot-password-01.json
new file mode 100644
index 0000000..0ec4c97
--- /dev/null
+++ b/public/r/forgot-password-01.json
@@ -0,0 +1,56 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "forgot-password-01",
+ "type": "registry:block",
+ "title": "Forgot Password 1",
+ "description": "Centered card layout with logo header, title, description, and form input for password reset functionality with decorative background shape",
+ "registryDependencies": [
+ "button",
+ "card",
+ "input",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/forgot-password/forgot-password-01/page.tsx",
+ "content": "import ForgotPassword from '@/components/shadcn-studio/blocks/forgot-password-01/forgot-password-01'\n\nconst ForgotPasswordPage = () => {\n return \n}\n\nexport default ForgotPasswordPage\n",
+ "type": "registry:page",
+ "target": "app/forgot-password-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst AuthBackgroundShape = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n )\n}\n\nexport default AuthBackgroundShape\n",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst Logo = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/forgot-password-01/forgot-password-01.tsx",
+ "content": "import { ChevronLeftIcon } from 'lucide-react'\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\n\nimport ForgotPasswordForm from '@/components/shadcn-studio/blocks/forgot-password-01/forgot-password-form'\nimport AuthBackgroundShape from '@/assets/svg/auth-background-shape'\nimport Logo from '@/components/layout/logo'\n\nconst ForgotPassword = () => {\n return (\n \n
\n\n
\n \n \n\n \n Forgot Password? \n \n Enter your email and we'll send you instructions to reset your password\n \n
\n \n\n \n {/* ForgotPassword Form */}\n \n\n \n \n Back to login \n \n \n \n
\n )\n}\n\nexport default ForgotPassword\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/forgot-password-01/forgot-password-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/forgot-password-01/forgot-password-form.tsx",
+ "content": "'use client'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst ForgotPasswordForm = () => {\n return (\n e.preventDefault()}>\n {/* Email */}\n \n \n Email address*\n \n \n
\n\n \n Send Reset Link\n \n \n )\n}\n\nexport default ForgotPasswordForm\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/forgot-password-01/forgot-password-form.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "content": "// SVG Imports\nimport LogoSvg from '@/assets/svg/logo'\n\n// Util Imports\nimport { cn } from '@/lib/utils'\n\nconst Logo = ({ className }: { className?: string }) => {\n return (\n \n \n shadcn/studio \n
\n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "forgot-password"
+ }
+}
\ No newline at end of file
diff --git a/public/r/form-01.json b/public/r/form-01.json
new file mode 100644
index 0000000..8e16e48
--- /dev/null
+++ b/public/r/form-01.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-01",
+ "type": "registry:component",
+ "title": "Form 1",
+ "description": "Form with radio group selection and alert notifications for user feedback",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-01.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupFormDemo = () => {\n const FormSchema = z.object({\n selectedOption: z.string().nonempty({\n message: 'You must select an option.'\n })\n })\n\n const form = useForm>({\n resolver: zodResolver(FormSchema),\n defaultValues: { selectedOption: '' }\n })\n\n function onSubmit(data: z.infer) {\n toast.custom(() => (\n \n \n Selected Option: {data.selectedOption} \n \n ))\n }\n\n return (\n \n \n (\n \n Manage data sharing preferences \n \n \n \n \n \n Share Data for Personalized Experience\n \n
\n \n \n \n Do Not Share Any Data\n \n
\n \n \n \n Customize Data Sharing Preferences\n \n
\n \n \n Please select one of the options to proceed. \n \n \n )}\n />\n Update Preferences \n \n \n )\n}\n\nexport default RadioGroupFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-02.json b/public/r/form-02.json
new file mode 100644
index 0000000..21f83d4
--- /dev/null
+++ b/public/r/form-02.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-02",
+ "type": "registry:component",
+ "title": "Form 2",
+ "description": "Form with checkbox controls and alert integration for user selections",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "checkbox",
+ "form"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-02.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\n\nconst CheckboxFormDemo = () => {\n const FormSchema = z.object({\n acceptTerms: z.boolean().refine(val => val === true, {\n message: 'You must accept the terms and conditions.'\n })\n })\n\n const form = useForm>({\n resolver: zodResolver(FormSchema),\n defaultValues: { acceptTerms: false }\n })\n\n function onSubmit() {\n toast.custom(() => (\n \n \n Welcome to the community! \n \n ))\n }\n\n return (\n \n \n (\n \n \n \n \n \n Agree to Join the Community \n
\n \n By clicking 'Join Now', you accept our Community Guidelines and Privacy Policy. We're\n excited to have you on board!\n \n \n \n )}\n />\n\n Join Now \n \n \n )\n}\n\nexport default CheckboxFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-03.json b/public/r/form-03.json
new file mode 100644
index 0000000..82cabe5
--- /dev/null
+++ b/public/r/form-03.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-03",
+ "type": "registry:component",
+ "title": "Form 3",
+ "description": "Form with switch toggle controls for settings and preferences",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-03.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchFormDemo = () => {\n const FormSchema = z.object({\n stepTracker: z.boolean().refine(val => val === true, {\n message: 'You must enable step tracker to proceed.'\n })\n })\n\n const form = useForm>({\n resolver: zodResolver(FormSchema),\n defaultValues: { stepTracker: false }\n })\n\n function onSubmit(data: z.infer) {\n toast.custom(() => (\n \n \n Step tracker is {data.stepTracker ? 'enabled' : 'disabled'} "Go! Run". \n \n ))\n }\n\n return (\n \n \n (\n \n \n \n \n \n Enable Daily Step Tracker \n
\n Track your daily steps to help you reach your fitness goals. \n \n \n )}\n />\n\n Activate \n \n \n )\n}\n\nexport default SwitchFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-04.json b/public/r/form-04.json
new file mode 100644
index 0000000..a343c90
--- /dev/null
+++ b/public/r/form-04.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-04",
+ "type": "registry:component",
+ "title": "Form 4",
+ "description": "Form with input fields and validation alerts for data entry",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "input"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-04.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Input } from '@/components/ui/input'\n\nconst FormSchema = z.object({\n email: z.string().min(1, 'Email is required').email({ message: 'Please enter a valid email address.' })\n})\n\nconst InputFormDemo = () => {\n const form = useForm>({\n resolver: zodResolver(FormSchema),\n defaultValues: { email: '' }\n })\n\n const onSubmit = () => {\n toast.custom(() => (\n \n \n Reset password link sent to your email \n \n ))\n }\n\n return (\n \n \n (\n \n Reset Your Password: \n \n \n \n Enter your email address to receive a reset link. \n \n \n )}\n />\n\n Send Link \n \n \n )\n}\n\nexport default InputFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-05.json b/public/r/form-05.json
new file mode 100644
index 0000000..3fc6eba
--- /dev/null
+++ b/public/r/form-05.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-05",
+ "type": "registry:component",
+ "title": "Form 5",
+ "description": "Form with OTP input component for secure verification codes",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "input-otp"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-05.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from '@/components/ui/input-otp'\n\nconst FormSchema = z.object({\n pin: z.string().min(6, {\n message: 'Your one-time password must be 6 characters.'\n })\n})\n\nconst InputOTPFormDemo = () => {\n const form = useForm>({\n resolver: zodResolver(FormSchema),\n defaultValues: {\n pin: ''\n }\n })\n\n function onSubmit() {\n toast.custom(() => (\n \n \n Your verification is complete. You can now proceed. \n \n ))\n }\n\n return (\n \n \n (\n \n One-Time Password \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Please enter the 6-digit OTP sent to your phone. \n \n \n )}\n />\n\n Submit \n \n \n )\n}\n\nexport default InputOTPFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-06.json b/public/r/form-06.json
new file mode 100644
index 0000000..98774fa
--- /dev/null
+++ b/public/r/form-06.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-06",
+ "type": "registry:component",
+ "title": "Form 6",
+ "description": "Form with textarea component for multi-line text input",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-06.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Textarea } from '@/components/ui/textarea'\n\nconst TextareaFormDemo = () => {\n // Validation schema\n const FormSchema = z.object({\n message: z\n .string()\n .min(50, 'Message must be at least 50 characters long.')\n .max(500, 'Message cannot exceed 500 characters.')\n })\n\n const form = useForm>({\n resolver: zodResolver(FormSchema),\n defaultValues: { message: '' }\n })\n\n function onSubmit() {\n toast.custom(() => (\n \n \n Your application is submitted. We will contact you soon. \n \n ))\n }\n\n return (\n \n \n {/* Textarea Field */}\n (\n \n Tell Us About Yourself \n \n \n \n \n Please include your qualifications, skills, and experiences that make you stand out.\n \n \n \n )}\n />\n\n Submit \n \n \n )\n}\n\nexport default TextareaFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-07.json b/public/r/form-07.json
new file mode 100644
index 0000000..f9719df
--- /dev/null
+++ b/public/r/form-07.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-07",
+ "type": "registry:component",
+ "title": "Form 7",
+ "description": "Form with select dropdown components for option selection",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-07.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectFormDemo = () => {\n const FormSchema = z.object({\n email: z\n .string({\n required_error: 'Please select an email.'\n })\n .email()\n })\n\n const form = useForm>({\n resolver: zodResolver(FormSchema)\n })\n\n function onSubmit() {\n toast.custom(() => (\n \n \n Your account has been recovered \n \n ))\n }\n\n return (\n \n \n (\n \n Email \n \n \n \n \n \n \n \n user1@gmail.com \n user007@gmail.com \n user69@outlook.com \n \n \n Recover Your Account \n \n \n )}\n />\n Recover \n \n \n )\n}\n\nexport default SelectFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-08.json b/public/r/form-08.json
new file mode 100644
index 0000000..60fd588
--- /dev/null
+++ b/public/r/form-08.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-08",
+ "type": "registry:component",
+ "title": "Form 8",
+ "description": "Form with command popover for searchable command selection",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "command",
+ "form",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-08.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CheckCheckIcon, CheckIcon, ChevronsUpDownIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst paymentMethod = [\n { value: 'credit-card', label: 'Credit Card' },\n { value: 'paypal', label: 'PayPal' },\n { value: 'apple-pay', label: 'Apple Pay' },\n { value: 'google-pay', label: 'Google Pay' },\n { value: 'bank_transfer', label: 'Bank Transfer' },\n { value: 'bitcoin', label: 'Bitcoin' },\n { value: 'cash-on-delivery', label: 'Cash on Delivery' }\n]\n\nconst FormSchema = z.object({\n method: z.string({ required_error: 'Payment method is required.' })\n})\n\nconst ComboboxFormDemo = () => {\n const form = useForm>({\n resolver: zodResolver(FormSchema)\n })\n\n const [open, setOpen] = useState(false)\n const [value, setValue] = useState('')\n\n function onSubmit() {\n toast.custom(() => (\n \n \n You select "{value}" for payment \n \n ))\n }\n\n return (\n \n \n (\n \n Select your payment method \n \n \n \n \n {field.value ? (\n paymentMethod.find(method => method.value === field.value)?.label\n ) : (\n Select a payment method... \n )}\n \n \n \n \n \n \n \n \n No payment method found. \n \n {paymentMethod.map(method => (\n {\n setValue(method.value)\n field.onChange(method.value)\n setOpen(false)\n }}\n >\n {method.label}\n \n \n ))}\n \n \n \n \n \n Select your preferred payment method. \n \n \n )}\n />\n\n Continue \n \n \n )\n}\n\nexport default ComboboxFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-09.json b/public/r/form-09.json
new file mode 100644
index 0000000..54b6a51
--- /dev/null
+++ b/public/r/form-09.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-09",
+ "type": "registry:component",
+ "title": "Form 9",
+ "description": "Form with date picker in popover for date selection",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "calendar",
+ "form",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-09.tsx",
+ "content": "'use client'\n\nimport { CalendarIcon, CheckCheckIcon } from 'lucide-react'\n\nimport { format } from 'date-fns'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { cn } from '@/lib/utils'\n\nconst FormSchema = z.object({\n dob: z.date({\n required_error: 'A date of birth is required.'\n })\n})\n\nconst DatePickerFormDemo = () => {\n const form = useForm>({\n resolver: zodResolver(FormSchema)\n })\n\n function onSubmit() {\n toast.custom(() => (\n \n \n Great we send you a personalized outfit suggestion! \n \n ))\n }\n\n return (\n \n \n (\n \n Timeless Trends for You \n \n \n \n \n {field.value ? format(field.value, 'PPP') : Pick a date }\n \n \n \n \n \n date > new Date() || date < new Date('1900-01-01')}\n />\n \n \n \n Enter your birth date to reveal styles and outfits tailored to your fashion journey.\n \n \n \n )}\n />\n Submit \n \n \n )\n}\n\nexport default DatePickerFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/form-10.json b/public/r/form-10.json
new file mode 100644
index 0000000..6b0adbd
--- /dev/null
+++ b/public/r/form-10.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-10",
+ "type": "registry:component",
+ "title": "Form 10",
+ "description": "Comprehensive form with multiple input types in card layout for complex data entry",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "card",
+ "form",
+ "input",
+ "radio-group",
+ "select",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-10.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Input } from '@/components/ui/input'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Textarea } from '@/components/ui/textarea'\n\nconst ContactUSFormDemo = () => {\n const FormSchema = z.object({\n email: z.string().min(1, 'Email is required').email({ message: 'Please enter a valid email address.' }),\n issue: z.string().min(1, {\n message: 'Kindly select an issue.'\n }),\n selectedOption: z.string().nonempty({\n message: 'Selection of an option is required.'\n }),\n message: z.string().min(50, 'Describe your issue using at least 50 characters.')\n })\n\n const form = useForm>({\n resolver: zodResolver(FormSchema),\n defaultValues: { email: '', issue: '', selectedOption: '', message: '' }\n })\n\n const onSubmit = () => {\n toast.custom(() => (\n \n \n Issue submitted successfully! Our team will reach out to you shortly. \n \n ))\n }\n\n return (\n \n \n Report Issue \n Describe the issue you're facing; our team will help you. \n \n \n \n \n (\n \n Email \n \n \n \n \n \n )}\n />\n (\n \n Issue \n \n \n \n \n \n \n \n Product is Damaged \n Received wrong product \n Not as expectation \n Other \n \n \n \n \n )}\n />\n (\n \n How can we help you? \n \n \n \n \n \n Need a product replacement\n \n
\n \n \n \n Need a refund\n \n
\n \n \n \n Need guidance or support\n \n
\n \n \n \n \n )}\n />\n (\n \n Please describe your issue \n \n \n \n \n \n )}\n />\n Submit \n \n \n \n \n )\n}\n\nexport default ContactUSFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/gallery-component-01.json b/public/r/gallery-component-01.json
new file mode 100644
index 0000000..ff12974
--- /dev/null
+++ b/public/r/gallery-component-01.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "gallery-component-01",
+ "type": "registry:block",
+ "title": "Gallery 1",
+ "description": "Gallery section with centered header featuring underlined text highlight, flexible grid layout supporting both single images and 2x2 grid sections for versatile image arrangement",
+ "registryDependencies": [
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/gallery-component/gallery-component-01/page.tsx",
+ "content": "import Gallery from '@/components/shadcn-studio/blocks/gallery-component-01/gallery-component-01'\n\nconst gallerySections = [\n {\n images: [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-10.png',\n alt: 'Coastal cliffs and ocean view'\n }\n ]\n },\n {\n type: 'grid',\n images: [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-9.png',\n alt: 'Silhouettes on beach'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-8.png',\n alt: 'Snowy mountain peaks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-7.png',\n alt: 'Rolling green hills'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-6.png',\n alt: 'Sunset landscape'\n }\n ]\n },\n {\n type: 'grid',\n images: [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-4.png',\n alt: 'Silhouettes on beach'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-3.png',\n alt: 'Snowy mountain peaks'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-2.png',\n alt: 'Rolling green hills'\n },\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-1.png',\n alt: 'Sunset landscape'\n }\n ]\n },\n {\n images: [\n {\n src: 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/gallery/image-5.png',\n alt: 'Coastal cliffs and ocean view'\n }\n ]\n }\n]\n\nconst GalleryPage = () => {\n return \n}\n\nexport default GalleryPage\n",
+ "type": "registry:page",
+ "target": "app/gallery-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/gallery-component-01/gallery-component-01.tsx",
+ "content": "import { cn } from '@/lib/utils'\n\ntype GalleryImage = {\n src: string\n alt: string\n}\n\ntype GallerySection = {\n type?: string\n images: GalleryImage[]\n}\n\nconst Gallery = ({ sections }: { sections: GallerySection[] }) => {\n return (\n \n \n {/* Header */}\n
\n
\n \n Explore our\n \n {' '}\n Gallery\n \n
\n Explore our gallery to learn more about our amazing products and their features.\n
\n
\n\n {/* Gallery Grid */}\n
\n {sections.map((section, sectionIndex) => (\n
\n {section.images.map((image, imageIndex) => (\n
\n ))}\n
\n ))}\n
\n
\n \n )\n}\n\nexport default Gallery\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/gallery-component-01/gallery-component-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "gallery-component"
+ }
+}
\ No newline at end of file
diff --git a/public/r/ghibli-studio.json b/public/r/ghibli-studio.json
new file mode 100644
index 0000000..c2bc644
--- /dev/null
+++ b/public/r/ghibli-studio.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "ghibli-studio",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Nunito, sans-serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "font-serif": "PT Serif, serif",
+ "radius": "0.625rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.91 0.05 82.78)",
+ "foreground": "oklch(0.41 0.08 78.86)",
+ "card": "oklch(0.92 0.04 84.56)",
+ "card-foreground": "oklch(0.41 0.08 74.04)",
+ "popover": "oklch(0.92 0.04 84.56)",
+ "popover-foreground": "oklch(0.41 0.08 74.04)",
+ "primary": "oklch(0.71 0.10 111.96)",
+ "primary-foreground": "oklch(0.98 0.01 2.18)",
+ "secondary": "oklch(0.88 0.05 83.32)",
+ "secondary-foreground": "oklch(0.51 0.08 78.21)",
+ "muted": "oklch(0.86 0.06 82.94)",
+ "muted-foreground": "oklch(0.51 0.08 74.78)",
+ "accent": "oklch(0.86 0.05 85.12)",
+ "accent-foreground": "oklch(0.26 0.02 356.72)",
+ "destructive": "oklch(0.63 0.24 29.21)",
+ "border": "oklch(0.74 0.06 79.64)",
+ "input": "oklch(0.74 0.06 79.64)",
+ "ring": "oklch(0.51 0.08 74.78)",
+ "chart-1": "oklch(0.66 0.19 41.68)",
+ "chart-2": "oklch(0.70 0.12 183.58)",
+ "chart-3": "oklch(0.48 0.08 211.35)",
+ "chart-4": "oklch(0.84 0.17 84.99)",
+ "chart-5": "oklch(0.74 0.17 60.02)",
+ "sidebar": "oklch(0.87 0.06 84.46)",
+ "sidebar-foreground": "oklch(0.41 0.08 78.86)",
+ "sidebar-primary": "oklch(0.26 0.02 356.72)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 2.18)",
+ "sidebar-accent": "oklch(0.83 0.06 84.44)",
+ "sidebar-accent-foreground": "oklch(0.26 0.02 356.72)",
+ "sidebar-border": "oklch(0.91 0 0)",
+ "sidebar-ring": "oklch(0.71 0 0)",
+ "font-sans": "Nunito, sans-serif",
+ "font-serif": "PT Serif, serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.20 0.01 52.89)",
+ "foreground": "oklch(0.88 0.05 79.11)",
+ "card": "oklch(0.25 0.01 48.28)",
+ "card-foreground": "oklch(0.88 0.05 79.11)",
+ "popover": "oklch(0.25 0.01 48.28)",
+ "popover-foreground": "oklch(0.88 0.05 79.11)",
+ "primary": "oklch(0.64 0.05 114.58)",
+ "primary-foreground": "oklch(0.98 0.01 2.18)",
+ "secondary": "oklch(0.33 0.02 60.70)",
+ "secondary-foreground": "oklch(0.88 0.05 83.32)",
+ "muted": "oklch(0.27 0.01 39.35)",
+ "muted-foreground": "oklch(0.74 0.06 79.64)",
+ "accent": "oklch(0.33 0.02 60.70)",
+ "accent-foreground": "oklch(0.86 0.05 85.12)",
+ "destructive": "oklch(0.63 0.24 29.21)",
+ "border": "oklch(0.33 0.02 60.70)",
+ "input": "oklch(0.33 0.02 60.70)",
+ "ring": "oklch(0.64 0.05 114.58)",
+ "chart-1": "oklch(0.66 0.19 41.68)",
+ "chart-2": "oklch(0.70 0.12 183.58)",
+ "chart-3": "oklch(0.48 0.08 211.35)",
+ "chart-4": "oklch(0.84 0.17 84.99)",
+ "chart-5": "oklch(0.74 0.17 60.02)",
+ "sidebar": "oklch(0.23 0.01 60.90)",
+ "sidebar-foreground": "oklch(0.88 0.05 79.11)",
+ "sidebar-primary": "oklch(0.64 0.05 114.58)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 2.18)",
+ "sidebar-accent": "oklch(0.33 0.02 60.70)",
+ "sidebar-accent-foreground": "oklch(0.86 0.05 85.12)",
+ "sidebar-border": "oklch(0.33 0.02 60.70)",
+ "sidebar-ring": "oklch(0.64 0.05 114.58)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/hero-section-01.json b/public/r/hero-section-01.json
new file mode 100644
index 0000000..6df99dd
--- /dev/null
+++ b/public/r/hero-section-01.json
@@ -0,0 +1,53 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "hero-section-01",
+ "type": "registry:block",
+ "title": "Hero 1",
+ "description": "Centered vertical layout hero with navigation header, AI-powered badge in muted container, decorative SVG underline animation on \"Effortless\" text, call-to-action button, and full-width bottom dish image showcase",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "dropdown-menu",
+ "navigation-menu",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/hero-section/hero-section-01/page.tsx",
+ "content": "import HeroSection from '@/components/shadcn-studio/blocks/hero-section-01/hero-section-01'\nimport Header from '@/components/shadcn-studio/blocks/hero-section-01/header'\nimport type { NavigationSection } from '@/components/shadcn-studio/blocks/hero-section-01/header'\n\nconst navigationData: NavigationSection[] = [\n {\n title: 'Home',\n href: '#'\n },\n {\n title: 'Products',\n href: '#'\n },\n {\n title: 'About Us',\n href: '#'\n },\n {\n title: 'Contacts',\n href: '#'\n }\n]\n\nconst HeroSectionPage = () => {\n return (\n \n {/* Header Section */}\n \n\n {/* Main Content */}\n \n \n \n
\n )\n}\n\nexport default HeroSectionPage\n",
+ "type": "registry:page",
+ "target": "app/hero-section-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst Logo = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/hero-section-01/header.tsx",
+ "content": "import { MenuIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList\n} from '@/components/ui/navigation-menu'\n\nimport { cn } from '@/lib/utils'\n\nimport Logo from '@/components/layout/logo'\n\nexport type NavigationSection = {\n title: string\n href: string\n}\n\ntype HeaderProps = {\n navigationData: NavigationSection[]\n className?: string\n}\n\nconst Header = ({ navigationData, className }: HeaderProps) => {\n return (\n \n )\n}\n\nexport default Header\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/hero-section-01/header.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/hero-section-01/hero-section-01.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\n\nconst HeroSection = () => {\n return (\n \n {/* Hero Content */}\n \n
\n AI-Powered \n Solution for client-facing businesses \n
\n\n
\n Sizzling Summer Delights\n \n \n Effortless\n \n \n \n \n \n \n \n \n \n {' '}\n Recipes for Parties!\n \n\n
\n Dive into a world of flavor this summer with our collection of Sizzling Summer Delights!\n \n From refreshing appetizers to delightful desserts\n
\n\n
\n Try It Now \n \n
\n\n {/* Image */}\n \n \n )\n}\n\nexport default HeroSection\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/hero-section-01/hero-section-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "content": "// SVG Imports\nimport LogoSvg from '@/assets/svg/logo'\n\n// Util Imports\nimport { cn } from '@/lib/utils'\n\nconst Logo = ({ className }: { className?: string }) => {\n return (\n \n \n shadcn/studio \n
\n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "hero-section"
+ }
+}
\ No newline at end of file
diff --git a/public/r/input-01.json b/public/r/input-01.json
new file mode 100644
index 0000000..ec061a4
--- /dev/null
+++ b/public/r/input-01.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-01",
+ "type": "registry:component",
+ "title": "Input 1",
+ "description": "A basic email input field with placeholder text",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-01.tsx",
+ "content": "import { Input } from '@/components/ui/input'\n\nconst InputDemo = () => {\n return \n}\n\nexport default InputDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-02.json b/public/r/input-02.json
new file mode 100644
index 0000000..f9230c2
--- /dev/null
+++ b/public/r/input-02.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-02",
+ "type": "registry:component",
+ "title": "Input 2",
+ "description": "An email input field with a descriptive label for improved accessibility",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-02.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputLabelDemo = () => {\n const id = useId()\n\n return (\n \n Input with label \n \n
\n )\n}\n\nexport default InputLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-03.json b/public/r/input-03.json
new file mode 100644
index 0000000..d55ce42
--- /dev/null
+++ b/public/r/input-03.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-03",
+ "type": "registry:component",
+ "title": "Input 3",
+ "description": "A required email input field with a red asterisk indicator and validation",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-03.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputRequiredDemo = () => {\n const id = useId()\n\n return (\n \n \n Required input * \n \n \n
\n )\n}\n\nexport default InputRequiredDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-04.json b/public/r/input-04.json
new file mode 100644
index 0000000..009e81b
--- /dev/null
+++ b/public/r/input-04.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-04",
+ "type": "registry:component",
+ "title": "Input 4",
+ "description": "A disabled email input field that prevents user interaction",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-04.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputDisabledDemo = () => {\n const id = useId()\n\n return (\n \n Disabled input \n \n
\n )\n}\n\nexport default InputDisabledDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-05.json b/public/r/input-05.json
new file mode 100644
index 0000000..470bfe5
--- /dev/null
+++ b/public/r/input-05.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-05",
+ "type": "registry:component",
+ "title": "Input 5",
+ "description": "A read-only email input field with default value and muted styling",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-05.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputReadOnlyDemo = () => {\n const id = useId()\n\n return (\n \n Read-only input \n \n
\n )\n}\n\nexport default InputReadOnlyDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-06.json b/public/r/input-06.json
new file mode 100644
index 0000000..7aac4e3
--- /dev/null
+++ b/public/r/input-06.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-06",
+ "type": "registry:component",
+ "title": "Input 6",
+ "description": "Text input fields showcasing different size variants (small, medium, large)",
+ "registryDependencies": [
+ "input"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-06.tsx",
+ "content": "import { Input } from '@/components/ui/input'\n\nconst InputSizesDemo = () => {\n return (\n \n \n \n \n
\n )\n}\n\nexport default InputSizesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-07.json b/public/r/input-07.json
new file mode 100644
index 0000000..888fa2d
--- /dev/null
+++ b/public/r/input-07.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-07",
+ "type": "registry:component",
+ "title": "Input 7",
+ "description": "An email input field with a pre-filled default value",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-07.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputDefaultValueDemo = () => {\n const id = useId()\n\n return (\n \n Input with default value \n \n
\n )\n}\n\nexport default InputDefaultValueDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-08.json b/public/r/input-08.json
new file mode 100644
index 0000000..9a412cb
--- /dev/null
+++ b/public/r/input-08.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-08",
+ "type": "registry:component",
+ "title": "Input 8",
+ "description": "An input field with fully rounded borders for a modern appearance",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-08.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputRoundedDemo = () => {\n const id = useId()\n\n return (\n \n Rounded input \n \n
\n )\n}\n\nexport default InputRoundedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-09.json b/public/r/input-09.json
new file mode 100644
index 0000000..2ae98c8
--- /dev/null
+++ b/public/r/input-09.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-09",
+ "type": "registry:component",
+ "title": "Input 9",
+ "description": "An input field with helper text below for additional guidance",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-09.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputStartHelperTextDemo = () => {\n const id = useId()\n\n return (\n \n
Input with start helper text \n
\n
We'll never share your email with anyone else.
\n
\n )\n}\n\nexport default InputStartHelperTextDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-10.json b/public/r/input-10.json
new file mode 100644
index 0000000..d9f54d0
--- /dev/null
+++ b/public/r/input-10.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-10",
+ "type": "registry:component",
+ "title": "Input 10",
+ "description": "An email input field with right-aligned helper text for privacy assurance",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-10.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputEndHelperTextDemo = () => {\n const id = useId()\n\n return (\n \n
Input with end helper text \n
\n
We'll never share your email with anyone else.
\n
\n )\n}\n\nexport default InputEndHelperTextDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-11.json b/public/r/input-11.json
new file mode 100644
index 0000000..3da416d
--- /dev/null
+++ b/public/r/input-11.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-11",
+ "type": "registry:component",
+ "title": "Input 11",
+ "description": "An email input field with hint text indicating the field is optional",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-11.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputHintTextDemo = () => {\n const id = useId()\n\n return (\n \n
\n Input with hint text \n Optional field \n
\n
\n
\n )\n}\n\nexport default InputHintTextDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-12.json b/public/r/input-12.json
new file mode 100644
index 0000000..a0725c0
--- /dev/null
+++ b/public/r/input-12.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-12",
+ "type": "registry:component",
+ "title": "Input 12",
+ "description": "An email input field with error validation and dynamic error message display",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-12.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputErrorDemo = () => {\n const id = useId()\n\n return (\n \n
Input with error \n
\n
This email is invalid.
\n
\n )\n}\n\nexport default InputErrorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-13.json b/public/r/input-13.json
new file mode 100644
index 0000000..0c6fd1a
--- /dev/null
+++ b/public/r/input-13.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-13",
+ "type": "registry:component",
+ "title": "Input 13",
+ "description": "An email input field with custom indigo focus ring styling",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-13.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputColoredRingDemo = () => {\n const id = useId()\n\n return (\n \n Input with colored ring \n \n
\n )\n}\n\nexport default InputColoredRingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-14.json b/public/r/input-14.json
new file mode 100644
index 0000000..08cab6a
--- /dev/null
+++ b/public/r/input-14.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-14",
+ "type": "registry:component",
+ "title": "Input 14",
+ "description": "A username input field with a user icon positioned at the start",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-14.tsx",
+ "content": "import { useId } from 'react'\n\nimport { UserIcon } from 'lucide-react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputStartIconDemo = () => {\n const id = useId()\n\n return (\n \n
Input with start icon \n
\n
\n )\n}\n\nexport default InputStartIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-15.json b/public/r/input-15.json
new file mode 100644
index 0000000..73d371f
--- /dev/null
+++ b/public/r/input-15.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-15",
+ "type": "registry:component",
+ "title": "Input 15",
+ "description": "An email input field with a mail icon positioned at the end",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-15.tsx",
+ "content": "import { useId } from 'react'\n\nimport { MailIcon } from 'lucide-react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputEndIconDemo = () => {\n const id = useId()\n\n return (\n \n
Input with end icon \n
\n
\n )\n}\n\nexport default InputEndIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-16.json b/public/r/input-16.json
new file mode 100644
index 0000000..70a7837
--- /dev/null
+++ b/public/r/input-16.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-16",
+ "type": "registry:component",
+ "title": "Input 16",
+ "description": "A URL input field with \"https://\" text prefix positioned at the start",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-16.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputStartTextAddOnDemo = () => {\n const id = useId()\n\n return (\n \n
Input with start text add-on \n
\n \n \n https://\n \n
\n
\n )\n}\n\nexport default InputStartTextAddOnDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-17.json b/public/r/input-17.json
new file mode 100644
index 0000000..3ee0ec4
--- /dev/null
+++ b/public/r/input-17.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-17",
+ "type": "registry:component",
+ "title": "Input 17",
+ "description": "A domain input field with \".com\" text suffix positioned at the end",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-17.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputEndTextAddOnDemo = () => {\n const id = useId()\n\n return (\n \n
Input with end text add-on \n
\n \n \n .com\n \n
\n
\n )\n}\n\nexport default InputEndTextAddOnDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-18.json b/public/r/input-18.json
new file mode 100644
index 0000000..6c4d674
--- /dev/null
+++ b/public/r/input-18.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-18",
+ "type": "registry:component",
+ "title": "Input 18",
+ "description": "A URL input field with both \"https://\" prefix and \".com\" suffix text add-ons",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-18.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputTextAddOnsDemo = () => {\n const id = useId()\n\n return (\n \n
Input with text add-ons \n
\n \n \n https://\n \n \n .com\n \n
\n
\n )\n}\n\nexport default InputTextAddOnsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-19.json b/public/r/input-19.json
new file mode 100644
index 0000000..945aece
--- /dev/null
+++ b/public/r/input-19.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-19",
+ "type": "registry:component",
+ "title": "Input 19",
+ "description": "A URL input field with an external \"https://\" add-on box at the start",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-19.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputStartAddOnDemo = () => {\n const id = useId()\n\n return (\n \n
Input with start add-on \n
\n \n https://\n \n \n
\n
\n )\n}\n\nexport default InputStartAddOnDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-20.json b/public/r/input-20.json
new file mode 100644
index 0000000..9bf55bc
--- /dev/null
+++ b/public/r/input-20.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-20",
+ "type": "registry:component",
+ "title": "Input 20",
+ "description": "A domain input field with an external \".com\" add-on box at the end",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-20.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputEndAddOnDemo = () => {\n const id = useId()\n\n return (\n \n
Input with end add-on \n
\n \n \n .com\n \n
\n
\n )\n}\n\nexport default InputEndAddOnDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-21.json b/public/r/input-21.json
new file mode 100644
index 0000000..d9f69a8
--- /dev/null
+++ b/public/r/input-21.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-21",
+ "type": "registry:component",
+ "title": "Input 21",
+ "description": "A URL input field with both external \"https://\" and \".com\" add-on boxes",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-21.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputAddOnsDemo = () => {\n const id = useId()\n\n return (\n \n
Input with add-ons \n
\n \n https://\n \n \n \n .com\n \n
\n
\n )\n}\n\nexport default InputAddOnsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-22.json b/public/r/input-22.json
new file mode 100644
index 0000000..6df2a55
--- /dev/null
+++ b/public/r/input-22.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-22",
+ "type": "registry:component",
+ "title": "Input 22",
+ "description": "An email input field with a filled muted background style and no border",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-22.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputFilledDemo = () => {\n const id = useId()\n\n return (\n \n Filled input \n \n
\n )\n}\n\nexport default InputFilledDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-22.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-23.json b/public/r/input-23.json
new file mode 100644
index 0000000..daeed4f
--- /dev/null
+++ b/public/r/input-23.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-23",
+ "type": "registry:component",
+ "title": "Input 23",
+ "description": "An email input field with an overlapping label positioned over the border",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-23.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputOverlappingLabelDemo = () => {\n const id = useId()\n\n return (\n \n \n Input with overlapping label\n \n \n
\n )\n}\n\nexport default InputOverlappingLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-23.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-24.json b/public/r/input-24.json
new file mode 100644
index 0000000..f5d3ed1
--- /dev/null
+++ b/public/r/input-24.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-24",
+ "type": "registry:component",
+ "title": "Input 24",
+ "description": "An email input field with an animated floating label that moves on focus",
+ "registryDependencies": [
+ "input"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-24.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\n\nconst InputFloatingLabelDemo = () => {\n const id = useId()\n\n return (\n \n \n Input with floating label \n \n \n
\n )\n}\n\nexport default InputFloatingLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-24.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-25.json b/public/r/input-25.json
new file mode 100644
index 0000000..c2e5563
--- /dev/null
+++ b/public/r/input-25.json
@@ -0,0 +1,15 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-25",
+ "type": "registry:component",
+ "title": "Input 25",
+ "description": "An email input field with an inset label positioned above the input area",
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-25.tsx",
+ "content": "import { useId } from 'react'\n\nconst InputInsetLabelDemo = () => {\n const id = useId()\n\n return (\n \n \n Input with inset label\n \n \n
\n )\n}\n\nexport default InputInsetLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-25.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-26.json b/public/r/input-26.json
new file mode 100644
index 0000000..5a81a9c
--- /dev/null
+++ b/public/r/input-26.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-26",
+ "type": "registry:component",
+ "title": "Input 26",
+ "description": "A password input field with a toggle button to show/hide password visibility",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-26.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputPasswordDemo = () => {\n const [isVisible, setIsVisible] = useState(false)\n\n const id = useId()\n\n return (\n \n
Password input \n
\n \n setIsVisible(prevState => !prevState)}\n className='text-muted-foreground focus-visible:ring-ring/50 absolute inset-y-0 right-0 rounded-l-none hover:bg-transparent'\n >\n {isVisible ? : }\n {isVisible ? 'Hide password' : 'Show password'} \n \n
\n
\n )\n}\n\nexport default InputPasswordDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-26.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-27.json b/public/r/input-27.json
new file mode 100644
index 0000000..a1be7b3
--- /dev/null
+++ b/public/r/input-27.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-27",
+ "type": "registry:component",
+ "title": "Input 27",
+ "description": "A file input field with custom styling for the file picker button",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-27.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputFileDemo = () => {\n const id = useId()\n\n return (\n \n File input \n \n
\n )\n}\n\nexport default InputFileDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-27.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-28.json b/public/r/input-28.json
new file mode 100644
index 0000000..716c823
--- /dev/null
+++ b/public/r/input-28.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-28",
+ "type": "registry:component",
+ "title": "Input 28",
+ "description": "A URL input field with a protocol selector dropdown at the start",
+ "registryDependencies": [
+ "input",
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-28.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst InputStartSelectDemo = () => {\n const id = useId()\n\n return (\n \n
Input with start select \n
\n \n \n \n \n \n \n https://\n \n \n http://\n \n \n ftp://\n \n \n sftp://\n \n \n ws://\n \n \n wss://\n \n \n \n \n
\n
\n )\n}\n\nexport default InputStartSelectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-28.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-29.json b/public/r/input-29.json
new file mode 100644
index 0000000..cf936a0
--- /dev/null
+++ b/public/r/input-29.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-29",
+ "type": "registry:component",
+ "title": "Input 29",
+ "description": "A domain input field with a TLD selector dropdown at the end",
+ "registryDependencies": [
+ "input",
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-29.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst InputEndSelectDemo = () => {\n const id = useId()\n\n return (\n \n
Input with end select \n
\n \n \n \n \n \n \n \n .com\n \n \n .org\n \n \n .net\n \n \n \n
\n
\n )\n}\n\nexport default InputEndSelectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-29.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-30.json b/public/r/input-30.json
new file mode 100644
index 0000000..e9d2c0c
--- /dev/null
+++ b/public/r/input-30.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-30",
+ "type": "registry:component",
+ "title": "Input 30",
+ "description": "An email input field paired with a subscribe button for newsletter signups",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-30.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputButtonDemo = () => {\n const id = useId()\n\n return (\n \n
Input with button \n
\n \n Subscribe \n
\n
\n )\n}\n\nexport default InputButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-30.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-31.json b/public/r/input-31.json
new file mode 100644
index 0000000..9d45f18
--- /dev/null
+++ b/public/r/input-31.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-31",
+ "type": "registry:component",
+ "title": "Input 31",
+ "description": "An email input field with an inline send button positioned at the end",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-31.tsx",
+ "content": "import { useId } from 'react'\n\nimport { SendHorizonalIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputEndInlineButtonDemo = () => {\n const id = useId()\n\n return (\n \n
Input with end inline button \n
\n \n \n \n Subscribe \n \n
\n
\n )\n}\n\nexport default InputEndInlineButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-31.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-32.json b/public/r/input-32.json
new file mode 100644
index 0000000..1d205b7
--- /dev/null
+++ b/public/r/input-32.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-32",
+ "type": "registry:component",
+ "title": "Input 32",
+ "description": "Input field with a right-aligned icon button, ideal for actions like downloading or submitting email addresses",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-32.tsx",
+ "content": "import { useId } from 'react'\n\nimport { DownloadIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputIconButtonDemo = () => {\n const id = useId()\n\n return (\n \n
Input with icon button \n
\n \n \n \n Download \n \n
\n
\n )\n}\n\nexport default InputIconButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-32.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-33.json b/public/r/input-33.json
new file mode 100644
index 0000000..9ce0990
--- /dev/null
+++ b/public/r/input-33.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-33",
+ "type": "registry:component",
+ "title": "Input 33",
+ "description": "An email input field with an external subscribe button connected via styling",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-33.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputEndButtonDemo = () => {\n const id = useId()\n\n return (\n \n
Input with end button \n
\n \n Subscribe \n
\n
\n )\n}\n\nexport default InputEndButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-33.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-34.json b/public/r/input-34.json
new file mode 100644
index 0000000..1115cec
--- /dev/null
+++ b/public/r/input-34.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-34",
+ "type": "registry:component",
+ "title": "Input 34",
+ "description": "Input field with character limit counter showing current count out of maximum allowed",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-34.tsx",
+ "content": "'use client'\n\nimport { useId, useState, type ChangeEvent } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst maxLength = 50\nconst initialValue = ''\n\nconst InputCharacterLimitDemo = () => {\n const [value, setValue] = useState(initialValue)\n const [characterCount, setCharacterCount] = useState(initialValue.length)\n\n const id = useId()\n\n const handleChange = (e: ChangeEvent) => {\n if (e.target.value.length <= maxLength) {\n setValue(e.target.value)\n setCharacterCount(e.target.value.length)\n }\n }\n\n return (\n \n
Input with character limit \n
\n \n \n {characterCount}/{maxLength}\n \n
\n
\n )\n}\n\nexport default InputCharacterLimitDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-34.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-35.json b/public/r/input-35.json
new file mode 100644
index 0000000..e00310a
--- /dev/null
+++ b/public/r/input-35.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-35",
+ "type": "registry:component",
+ "title": "Input 35",
+ "description": "Input field with real-time character counter, guiding users on remaining character allowance.",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-35.tsx",
+ "content": "'use client'\n\nimport { useId, useState, type ChangeEvent } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst maxLength = 12\nconst initialValue = ''\n\nconst InputCharacterLeftDemo = () => {\n const [value, setValue] = useState(initialValue)\n const [characterCount, setCharacterCount] = useState(initialValue.length)\n\n const id = useId()\n\n const handleChange = (e: ChangeEvent) => {\n if (e.target.value.length <= maxLength) {\n setValue(e.target.value)\n setCharacterCount(e.target.value.length)\n }\n }\n\n return (\n \n
Input with characters left \n
\n
\n {maxLength - characterCount} characters left\n
\n
\n )\n}\n\nexport default InputCharacterLeftDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-35.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-36.json b/public/r/input-36.json
new file mode 100644
index 0000000..ddf174d
--- /dev/null
+++ b/public/r/input-36.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-36",
+ "type": "registry:component",
+ "title": "Input 36",
+ "description": "Input field with clear button to instantly reset the field value",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-36.tsx",
+ "content": "'use client'\n\nimport { useId, useRef, useState } from 'react'\n\nimport { CircleXIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputClearDemo = () => {\n const [value, setValue] = useState('Click to clear')\n\n const inputRef = useRef(null)\n\n const id = useId()\n\n const handleClearInput = () => {\n setValue('')\n\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }\n\n return (\n \n
Input with clear button \n
\n setValue(e.target.value)}\n className='pr-9'\n />\n {value && (\n \n \n Clear input \n \n )}\n
\n
\n )\n}\n\nexport default InputClearDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-36.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-37.json b/public/r/input-37.json
new file mode 100644
index 0000000..d02681d
--- /dev/null
+++ b/public/r/input-37.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-37",
+ "type": "registry:component",
+ "title": "Input 37",
+ "description": "Search input field with keyboard shortcut indicator (⌘K) for enhanced UX",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-37.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputSearchDemo = () => {\n const id = useId()\n\n return (\n \n
Search input with <kbd> \n
\n
\n )\n}\n\nexport default InputSearchDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-37.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-38.json b/public/r/input-38.json
new file mode 100644
index 0000000..8709e94
--- /dev/null
+++ b/public/r/input-38.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-38",
+ "type": "registry:component",
+ "title": "Input 38",
+ "description": "Search input field with search icon and microphone button for voice input",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-38.tsx",
+ "content": "import { useId } from 'react'\n\nimport { MicIcon, SearchIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputSearchIconDemo = () => {\n const id = useId()\n\n return (\n \n
Search input with icon and button \n
\n
\n \n Search \n
\n
\n
\n \n Press to speak \n \n
\n
\n )\n}\n\nexport default InputSearchIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-38.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-39.json b/public/r/input-39.json
new file mode 100644
index 0000000..d22d8c2
--- /dev/null
+++ b/public/r/input-39.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-39",
+ "type": "registry:component",
+ "title": "Input 39",
+ "description": "Search input field with loading indicator that shows during search operations",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-39.tsx",
+ "content": "'use client'\n\nimport { useEffect, useId, useState } from 'react'\n\nimport { LoaderCircleIcon, SearchIcon } from 'lucide-react'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputSearchLoaderDemo = () => {\n const [value, setValue] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n\n const id = useId()\n\n useEffect(() => {\n if (value) {\n setIsLoading(true)\n\n const timer = setTimeout(() => {\n setIsLoading(false)\n }, 500)\n\n return () => clearTimeout(timer)\n }\n\n setIsLoading(false)\n }, [value])\n\n return (\n \n
Search input with loader \n
\n
\n \n Search \n
\n
setValue(e.target.value)}\n className='peer px-9 [&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none [&::-webkit-search-results-button]:appearance-none [&::-webkit-search-results-decoration]:appearance-none'\n />\n {isLoading && (\n
\n \n Loading... \n
\n )}\n
\n
\n )\n}\n\nexport default InputSearchLoaderDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-39.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-40.json b/public/r/input-40.json
new file mode 100644
index 0000000..4bed3fc
--- /dev/null
+++ b/public/r/input-40.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-40",
+ "type": "registry:component",
+ "title": "Input 40",
+ "description": "Number input field with increment/decrement buttons using React Aria Components",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-40.tsx",
+ "content": "'use client'\n\nimport { MinusIcon, PlusIcon } from 'lucide-react'\n\nimport { Button, Group, Input, Label, NumberField } from 'react-aria-components'\n\nconst InputWithPlusMinusButtonsDemo = () => {\n return (\n \n \n Input with plus/minus buttons\n \n \n \n \n Decrement \n \n \n \n \n Increment \n \n \n \n Built with{' '}\n \n React Aria\n \n
\n \n )\n}\n\nexport default InputWithPlusMinusButtonsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-40.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-41.json b/public/r/input-41.json
new file mode 100644
index 0000000..39de0a8
--- /dev/null
+++ b/public/r/input-41.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-41",
+ "type": "registry:component",
+ "title": "Input 41",
+ "description": "Number field with increment/decrement buttons positioned at the end using React Aria",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-41.tsx",
+ "content": "'use client'\n\nimport { MinusIcon, PlusIcon } from 'lucide-react'\n\nimport { Button, Group, Input, Label, NumberField } from 'react-aria-components'\n\nconst InputWithEndButtonsDemo = () => {\n return (\n \n \n Input with end buttons\n \n \n \n \n \n Decrement \n \n \n \n Increment \n \n \n \n Built with{' '}\n \n React Aria\n \n
\n \n )\n}\n\nexport default InputWithEndButtonsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-41.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-42.json b/public/r/input-42.json
new file mode 100644
index 0000000..a8096a1
--- /dev/null
+++ b/public/r/input-42.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-42",
+ "type": "registry:component",
+ "title": "Input 42",
+ "description": "Number field with vertically stacked increment/decrement buttons using React Aria",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-42.tsx",
+ "content": "'use client'\n\nimport { MinusIcon, PlusIcon } from 'lucide-react'\n\nimport { Button, Group, Input, Label, NumberField } from 'react-aria-components'\n\nconst InputWithStackedButtonsDemo = () => {\n return (\n \n \n Input with stacked buttons\n \n \n \n \n
\n \n Increment \n \n
\n \n Decrement \n \n
\n \n \n Built with{' '}\n \n React Aria\n \n
\n \n )\n}\n\nexport default InputWithStackedButtonsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-42.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-43.json b/public/r/input-43.json
new file mode 100644
index 0000000..7814b0c
--- /dev/null
+++ b/public/r/input-43.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-43",
+ "type": "registry:component",
+ "title": "Input 43",
+ "description": "Number field with rounded increment/decrement buttons positioned inline using React Aria",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-43.tsx",
+ "content": "'use client'\n\nimport { MinusIcon, PlusIcon } from 'lucide-react'\n\nimport { Button, Group, Input, Label, NumberField } from 'react-aria-components'\n\nconst InputWithPlusMinusButtonsRoundedDemo = () => {\n return (\n \n \n Input with plus/minus buttons (rounded)\n \n \n \n \n Decrement \n \n \n \n \n Increment \n \n \n \n Built with{' '}\n \n React Aria\n \n
\n \n )\n}\n\nexport default InputWithPlusMinusButtonsRoundedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-43.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-44.json b/public/r/input-44.json
new file mode 100644
index 0000000..0ad5295
--- /dev/null
+++ b/public/r/input-44.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-44",
+ "type": "registry:component",
+ "title": "Input 44",
+ "description": "Number field with rounded increment/decrement buttons positioned at the end using React Aria",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-44.tsx",
+ "content": "'use client'\n\nimport { MinusIcon, PlusIcon } from 'lucide-react'\n\nimport { Button, Group, Input, Label, NumberField } from 'react-aria-components'\n\nconst InputWithEndButtonsRoundedDemo = () => {\n return (\n \n \n Input with end buttons (rounded)\n \n \n \n \n \n Decrement \n \n \n \n Increment \n \n \n \n Built with{' '}\n \n React Aria\n \n
\n \n )\n}\n\nexport default InputWithEndButtonsRoundedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-44.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-45.json b/public/r/input-45.json
new file mode 100644
index 0000000..dbc1c61
--- /dev/null
+++ b/public/r/input-45.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-45",
+ "type": "registry:component",
+ "title": "Input 45",
+ "description": "Number field with vertically stacked chevron buttons for increment/decrement using React Aria",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-45.tsx",
+ "content": "'use client'\n\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { Button, Group, Input, Label, NumberField } from 'react-aria-components'\n\nconst InputWithStackedChevronsDemo = () => {\n return (\n \n \n Input with stacked chevrons\n \n \n \n \n \n \n Increment \n \n \n \n Decrement \n \n
\n \n \n Built with{' '}\n \n React Aria\n \n
\n \n )\n}\n\nexport default InputWithStackedChevronsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-45.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-46.json b/public/r/input-46.json
new file mode 100644
index 0000000..4dbe49d
--- /dev/null
+++ b/public/r/input-46.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-46",
+ "type": "registry:component",
+ "title": "Input 46",
+ "description": "Password input field with strength meter and requirements validation checker",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-46.tsx",
+ "content": "'use client'\n\nimport { useId, useMemo, useState } from 'react'\n\nimport { CheckIcon, EyeIcon, EyeOffIcon, XIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nimport { cn } from '@/lib/utils'\n\nconst requirements = [\n { regex: /.{12,}/, text: 'At least 12 characters' },\n { regex: /[a-z]/, text: 'At least 1 lowercase letter' },\n { regex: /[A-Z]/, text: 'At least 1 uppercase letter' },\n { regex: /[0-9]/, text: 'At least 1 number' },\n {\n regex: /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>/?]/,\n text: 'At least 1 special character'\n }\n]\n\nconst InputPasswordStrengthDemo = () => {\n const [password, setPassword] = useState('')\n const [isVisible, setIsVisible] = useState(false)\n\n const id = useId()\n\n const toggleVisibility = () => setIsVisible(prevState => !prevState)\n\n const strength = requirements.map(req => ({\n met: req.regex.test(password),\n text: req.text\n }))\n\n const strengthScore = useMemo(() => {\n return strength.filter(req => req.met).length\n }, [strength])\n\n const getColor = (score: number) => {\n if (score === 0) return 'bg-border'\n if (score <= 1) return 'bg-destructive'\n if (score <= 2) return 'bg-orange-500 '\n if (score <= 3) return 'bg-amber-500'\n if (score === 4) return 'bg-yellow-400'\n\n return 'bg-green-500'\n }\n\n const getText = (score: number) => {\n if (score === 0) return 'Enter a password'\n if (score <= 2) return 'Weak password'\n if (score <= 3) return 'Medium password'\n if (score === 4) return 'Strong password'\n\n return 'Very strong password'\n }\n\n return (\n \n
Input with password strength \n
\n setPassword(e.target.value)}\n className='pr-9'\n />\n \n {isVisible ? : }\n {isVisible ? 'Hide password' : 'Show password'} \n \n
\n\n
\n {Array.from({ length: 5 }).map((_, index) => (\n \n ))}\n
\n\n
{getText(strengthScore)}. Must contain:
\n\n
\n {strength.map((req, index) => (\n \n {req.met ? (\n \n ) : (\n \n )}\n \n {req.text}\n {req.met ? ' - Requirement met' : ' - Requirement not met'} \n \n \n ))}\n \n\n
\n Inspired by{' '}\n \n FlyonUI\n \n
\n
\n )\n}\n\nexport default InputPasswordStrengthDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-46.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-mask-01.json b/public/r/input-mask-01.json
new file mode 100644
index 0000000..c6839ca
--- /dev/null
+++ b/public/r/input-mask-01.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-mask-01",
+ "type": "registry:component",
+ "title": "Input Mask 1",
+ "description": "An input field with custom alphanumeric mask pattern for structured data entry",
+ "dependencies": [
+ "use-mask-input"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-01.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { withMask } from 'use-mask-input'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputWithMaskDemo = () => {\n const id = useId()\n\n return (\n \n )\n}\n\nexport default InputWithMaskDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-mask-02.json b/public/r/input-mask-02.json
new file mode 100644
index 0000000..b0357a0
--- /dev/null
+++ b/public/r/input-mask-02.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-mask-02",
+ "type": "registry:component",
+ "title": "Input Mask 2",
+ "description": "A time input field with HH:MM:SS mask formatting for precise time entry",
+ "dependencies": [
+ "use-mask-input"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-02.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { withMask } from 'use-mask-input'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputTimeDemo = () => {\n const id = useId()\n\n return (\n \n )\n}\n\nexport default InputTimeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-mask-03.json b/public/r/input-mask-03.json
new file mode 100644
index 0000000..070e828
--- /dev/null
+++ b/public/r/input-mask-03.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-mask-03",
+ "type": "registry:component",
+ "title": "Input Mask 3",
+ "description": "A credit card number input with automatic formatting and card type detection",
+ "dependencies": [
+ "lucide-react",
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-03.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { CreditCardIcon } from 'lucide-react'\n\nimport { usePaymentInputs } from 'react-payment-inputs'\nimport images, { type CardImages } from 'react-payment-inputs/images'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputCardNumberDemo = () => {\n const id = useId()\n const { meta, getCardNumberProps, getCardImageProps } = usePaymentInputs()\n\n return (\n \n
Card number \n
\n
\n
\n {meta.cardType ? (\n \n ) : (\n \n )}\n Card Provider \n
\n
\n
\n Built with{' '}\n \n React Payment Inputs\n \n
\n
\n )\n}\n\nexport default InputCardNumberDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-mask-04.json b/public/r/input-mask-04.json
new file mode 100644
index 0000000..48680f6
--- /dev/null
+++ b/public/r/input-mask-04.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-mask-04",
+ "type": "registry:component",
+ "title": "Input Mask 4",
+ "description": "A credit card expiry date input with MM/YY formatting and validation",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-04.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { usePaymentInputs } from 'react-payment-inputs'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputExpiryDateDemo = () => {\n const id = useId()\n const { getExpiryDateProps } = usePaymentInputs()\n\n return (\n \n )\n}\n\nexport default InputExpiryDateDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-mask-05.json b/public/r/input-mask-05.json
new file mode 100644
index 0000000..a87aacf
--- /dev/null
+++ b/public/r/input-mask-05.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-mask-05",
+ "type": "registry:component",
+ "title": "Input Mask 5",
+ "description": "A credit card CVC input field with secure formatting and length validation",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-05.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { usePaymentInputs } from 'react-payment-inputs'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputCVCCodeDemo = () => {\n const id = useId()\n const { getCVCProps } = usePaymentInputs()\n\n return (\n \n )\n}\n\nexport default InputCVCCodeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-mask-06.json b/public/r/input-mask-06.json
new file mode 100644
index 0000000..4167af1
--- /dev/null
+++ b/public/r/input-mask-06.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-mask-06",
+ "type": "registry:component",
+ "title": "Input Mask 6",
+ "description": "A comprehensive credit card details form with card number, expiry, and CVC inputs with automatic formatting",
+ "dependencies": [
+ "lucide-react",
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-06.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { CreditCardIcon } from 'lucide-react'\n\nimport { usePaymentInputs } from 'react-payment-inputs'\nimport images, { type CardImages } from 'react-payment-inputs/images'\n\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst InputCardDetailsDemo = () => {\n const id = useId()\n const { meta, getCardNumberProps, getExpiryDateProps, getCVCProps, getCardImageProps } = usePaymentInputs()\n\n return (\n \n
Card details \n
\n
\n
\n
\n {meta.cardType ? (\n \n ) : (\n \n )}\n Card Provider \n
\n
\n
\n
\n
\n Built with{' '}\n \n React Payment Inputs\n \n
\n
\n )\n}\n\nexport default InputCardDetailsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-01.json b/public/r/input-otp-01.json
new file mode 100644
index 0000000..968019f
--- /dev/null
+++ b/public/r/input-otp-01.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-01",
+ "type": "registry:component",
+ "title": "Input OTP 1",
+ "description": "A 4-digit numeric OTP input field with individual slots for each digit",
+ "dependencies": [
+ "input-otp"
+ ],
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-01.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { REGEXP_ONLY_DIGITS } from 'input-otp'\n\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPNumberDemo = () => {\n const id = useId()\n\n return (\n \n Input OTP number \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default InputOTPNumberDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-02.json b/public/r/input-otp-02.json
new file mode 100644
index 0000000..a2f6966
--- /dev/null
+++ b/public/r/input-otp-02.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-02",
+ "type": "registry:component",
+ "title": "Input OTP 2",
+ "description": "A 4-character alphanumeric OTP input field supporting both letters and numbers",
+ "dependencies": [
+ "input-otp"
+ ],
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-02.tsx",
+ "content": "'use client'\n\nimport { useId } from 'react'\n\nimport { REGEXP_ONLY_DIGITS_AND_CHARS } from 'input-otp'\n\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPAlphanumericDemo = () => {\n const id = useId()\n\n return (\n \n Input OTP Alphanumeric \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default InputOTPAlphanumericDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-03.json b/public/r/input-otp-03.json
new file mode 100644
index 0000000..0ac9b0c
--- /dev/null
+++ b/public/r/input-otp-03.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-03",
+ "type": "registry:component",
+ "title": "Input OTP 3",
+ "description": "A 4-digit OTP input field with resend functionality and helper text",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-03.tsx",
+ "content": "import { useId } from 'react'\n\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPWithResendDemo = () => {\n const id = useId()\n\n return (\n \n
Input OTP with resend \n
\n \n \n \n \n \n \n \n
\n Didn't get the code?{' '}\n \n Resend code\n \n
\n
\n )\n}\n\nexport default InputOTPWithResendDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-04.json b/public/r/input-otp-04.json
new file mode 100644
index 0000000..d731bd7
--- /dev/null
+++ b/public/r/input-otp-04.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-04",
+ "type": "registry:component",
+ "title": "Input OTP 4",
+ "description": "A 4-digit OTP input field with countdown timer and automatic resend functionality",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-04.tsx",
+ "content": "'use client'\n\nimport { useEffect, useId, useState } from 'react'\n\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPWithResendTimerDemo = () => {\n const [timeLeft, setTimeLeft] = useState(30)\n const id = useId()\n\n useEffect(() => {\n if (timeLeft > 0) {\n const timer = setTimeout(() => {\n setTimeLeft(prev => prev - 1)\n }, 1000)\n\n return () => clearTimeout(timer)\n }\n }, [timeLeft])\n\n const formatTime = (seconds: number) => {\n const mins = Math.floor(seconds / 60)\n const secs = seconds % 60\n\n return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`\n }\n\n const handleResend = () => {\n setTimeLeft(60)\n }\n\n return (\n \n )\n}\n\nexport default InputOTPWithResendTimerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-05.json b/public/r/input-otp-05.json
new file mode 100644
index 0000000..d3e2017
--- /dev/null
+++ b/public/r/input-otp-05.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-05",
+ "type": "registry:component",
+ "title": "Input OTP 5",
+ "description": "A 4-digit OTP input field with outlined styling and rounded borders",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-05.tsx",
+ "content": "import { useId } from 'react'\n\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPOutlinedDemo = () => {\n const id = useId()\n\n return (\n \n Input OTP outlined \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default InputOTPOutlinedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-06.json b/public/r/input-otp-06.json
new file mode 100644
index 0000000..66bc9e2
--- /dev/null
+++ b/public/r/input-otp-06.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-06",
+ "type": "registry:component",
+ "title": "Input OTP 6",
+ "description": "A 4-digit OTP input field with filled background styling and muted appearance",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-06.tsx",
+ "content": "import { useId } from 'react'\n\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPFilledDemo = () => {\n const id = useId()\n\n return (\n \n Input OTP filled \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default InputOTPFilledDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-07.json b/public/r/input-otp-07.json
new file mode 100644
index 0000000..ebd3a79
--- /dev/null
+++ b/public/r/input-otp-07.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-07",
+ "type": "registry:component",
+ "title": "Input OTP 7",
+ "description": "A 4-digit OTP input field with minimal underline styling and no background",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-07.tsx",
+ "content": "import { useId } from 'react'\n\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPMinimalDemo = () => {\n const id = useId()\n\n return (\n \n Input OTP minimal \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default InputOTPMinimalDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-08.json b/public/r/input-otp-08.json
new file mode 100644
index 0000000..c799d92
--- /dev/null
+++ b/public/r/input-otp-08.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-08",
+ "type": "registry:component",
+ "title": "Input OTP 8",
+ "description": "A 6-digit OTP input field with grouped layout and visual separator between groups",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-08.tsx",
+ "content": "import { useId } from 'react'\n\nimport { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPGroupedDemo = () => {\n const id = useId()\n\n return (\n \n Input OTP Grouped \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default InputOTPGroupedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-09.json b/public/r/input-otp-09.json
new file mode 100644
index 0000000..13c7746
--- /dev/null
+++ b/public/r/input-otp-09.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-09",
+ "type": "registry:component",
+ "title": "Input OTP 9",
+ "description": "A 6-digit OTP input field with outlined grouped layout and visual separator",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-09.tsx",
+ "content": "import { useId } from 'react'\n\nimport { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPOutlinedGroupedDemo = () => {\n const id = useId()\n\n return (\n \n Input OTP Outline Grouped \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default InputOTPOutlinedGroupedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input-otp-10.json b/public/r/input-otp-10.json
new file mode 100644
index 0000000..dada180
--- /dev/null
+++ b/public/r/input-otp-10.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input-otp-10",
+ "type": "registry:component",
+ "title": "Input OTP 10",
+ "description": "A 6-digit OTP input field with custom dot separator and grouped layout",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-10.tsx",
+ "content": "import { useId } from 'react'\n\nimport { DotIcon } from 'lucide-react'\n\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp'\nimport { Label } from '@/components/ui/label'\n\nconst InputOTPCustomSeparatorDemo = () => {\n const id = useId()\n\n return (\n \n
Input OTP Custom Separator \n
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n
\n )\n}\n\nexport default InputOTPCustomSeparatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/login-page-01.json b/public/r/login-page-01.json
new file mode 100644
index 0000000..2ae3127
--- /dev/null
+++ b/public/r/login-page-01.json
@@ -0,0 +1,61 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "login-page-01",
+ "type": "registry:block",
+ "title": "Login 1",
+ "description": "Centered card layout with logo header, quick login buttons, and full authentication form featuring email/password inputs, social login options, and remember me functionality",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card",
+ "checkbox",
+ "input",
+ "label",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/login-page/login-page-01/page.tsx",
+ "content": "import Login from '@/components/shadcn-studio/blocks/login-page-01/login-page-01'\n\nconst LoginPage = () => {\n return \n}\n\nexport default LoginPage\n",
+ "type": "registry:page",
+ "target": "app/login-page-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst AuthBackgroundShape = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n )\n}\n\nexport default AuthBackgroundShape\n",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst Logo = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/login-page-01/login-form.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst LoginForm = () => {\n const [isVisible, setIsVisible] = useState(false)\n\n return (\n e.preventDefault()}>\n {/* Email */}\n \n \n Email address*\n \n \n
\n\n {/* Password */}\n \n
\n Password*\n \n
\n \n setIsVisible(prevState => !prevState)}\n className='text-muted-foreground focus-visible:ring-ring/50 absolute inset-y-0 right-0 rounded-l-none hover:bg-transparent'\n >\n {isVisible ? : }\n {isVisible ? 'Hide password' : 'Show password'} \n \n
\n
\n\n {/* Remember Me and Forgot Password */}\n \n\n \n Sign in to Shadcn Studio\n \n \n )\n}\n\nexport default LoginForm\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/login-page-01/login-form.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/login-page-01/login-page-01.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Separator } from '@/components/ui/separator'\n\nimport Logo from '@/components/layout/logo'\nimport AuthBackgroundShape from '@/assets/svg/auth-background-shape'\nimport LoginForm from '@/components/shadcn-studio/blocks/login-page-01/login-form'\n\nconst Login = () => {\n return (\n \n
\n\n
\n \n \n\n \n Sign in to Shadcn Studio \n Ship Faster and Focus on Growth. \n
\n \n\n \n \n Login with{' '}\n \n Magic Link\n \n
\n\n {/* Quick Login Buttons */}\n \n \n Login as User\n \n \n Login as Admin\n \n
\n\n {/* Login Form */}\n \n \n \n
\n )\n}\n\nexport default Login\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/login-page-01/login-page-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "content": "// SVG Imports\nimport LogoSvg from '@/assets/svg/logo'\n\n// Util Imports\nimport { cn } from '@/lib/utils'\n\nconst Logo = ({ className }: { className?: string }) => {\n return (\n \n \n shadcn/studio \n
\n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "login-page"
+ }
+}
\ No newline at end of file
diff --git a/public/r/logo-cloud-01.json b/public/r/logo-cloud-01.json
new file mode 100644
index 0000000..c22d9a6
--- /dev/null
+++ b/public/r/logo-cloud-01.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "logo-cloud-01",
+ "type": "registry:block",
+ "title": "Logo Cloud 1",
+ "description": "Muted background logo cloud with centered card container, underlined text highlight, and flexbox logo grid arrangement with responsive gap spacing and centered alignment",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/logo-cloud/logo-cloud-01/page.tsx",
+ "content": "import LogoCloud from '@/components/shadcn-studio/blocks/logo-cloud-01/logo-cloud-01'\n\nconst logos = [\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/amazon-logo-bw.png',\n alt: 'Amazon'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/hubspot-logo-bw.png',\n alt: 'HubSpot'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/walmart-logo-bw.png',\n alt: 'Walmart'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/microsoft-logo-bw.png',\n alt: 'Microsoft'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/evernote-icon-bw.png',\n alt: 'Evernote'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/paypal-logo-bw.png',\n alt: 'PayPal'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/airbnb-logo-bw.png',\n alt: 'Airbnb'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/adobe-logo-bw.png',\n alt: 'Adobe'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/shopify-logo-bw.png',\n alt: 'Shopify'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/brand-logo/huawei-logo-bw.png',\n alt: 'Huawei'\n }\n]\n\nconst LogoCloudPage = () => {\n return \n}\n\nexport default LogoCloudPage\n",
+ "type": "registry:page",
+ "target": "app/logo-cloud-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/logo-cloud-01/logo-cloud-01.tsx",
+ "content": "import { Card, CardContent } from '@/components/ui/card'\n\ntype Logos = {\n image: string\n alt: string\n}\n\nconst LogoCloud = ({ logos }: { logos: Logos[] }) => {\n return (\n \n \n {/* Header */}\n
\n
\n A thriving {' '}\n \n community of businesses\n \n {' '}\n driving innovation \n \n
Proudly partnering with top brands to drive success.
\n
\n\n
\n \n \n {logos.map((logo, index) => (\n
\n ))}\n
\n \n \n
\n \n )\n}\n\nexport default LogoCloud\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/logo-cloud-01/logo-cloud-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "logo-cloud"
+ }
+}
\ No newline at end of file
diff --git a/public/r/marshmallow.json b/public/r/marshmallow.json
new file mode 100644
index 0000000..e59add5
--- /dev/null
+++ b/public/r/marshmallow.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "marshmallow",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Gabriela, Geist Fallback, ui-sans-serif",
+ "font-mono": "Geist Mono, Geist Mono Fallback, ui-monospace",
+ "font-serif": "Gabriela, Geist Fallback, ui-serif",
+ "radius": "0rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.97 0.01 267.41)",
+ "foreground": "oklch(0.22 0 0)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.22 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.22 0 0)",
+ "primary": "oklch(0.80 0.14 348.82)",
+ "primary-foreground": "oklch(0 0 0)",
+ "secondary": "oklch(0.94 0.07 97.70)",
+ "secondary-foreground": "oklch(0 0 0)",
+ "muted": "oklch(0.92 0.01 273.42)",
+ "muted-foreground": "oklch(0.34 0 0)",
+ "accent": "oklch(0.83 0.09 247.96)",
+ "accent-foreground": "oklch(0 0 0)",
+ "destructive": "oklch(0.70 0.19 23.04)",
+ "border": "oklch(0.85 0 0)",
+ "input": "oklch(0.85 0 0)",
+ "ring": "oklch(0.83 0.09 247.96)",
+ "chart-1": "oklch(0.80 0.14 348.82)",
+ "chart-2": "oklch(0.77 0.15 306.21)",
+ "chart-3": "oklch(0.83 0.09 247.96)",
+ "chart-4": "oklch(0.88 0.09 66.79)",
+ "chart-5": "oklch(0.94 0.14 130.35)",
+ "sidebar": "oklch(1.00 0 0)",
+ "sidebar-foreground": "oklch(0.22 0 0)",
+ "sidebar-primary": "oklch(0.80 0.14 348.82)",
+ "sidebar-primary-foreground": "oklch(0 0 0)",
+ "sidebar-accent": "oklch(0.83 0.09 247.96)",
+ "sidebar-accent-foreground": "oklch(0 0 0)",
+ "sidebar-border": "oklch(0.85 0 0)",
+ "sidebar-ring": "oklch(0.83 0.09 247.96)",
+ "font-sans": "Gabriela, Geist Fallback, ui-sans-serif",
+ "font-serif": "Gabriela, Geist Fallback, ui-serif",
+ "font-mono": "Geist Mono, Geist Mono Fallback, ui-monospace",
+ "radius": "0rem",
+ "shadow-color": "oklch(0.83 0.09 248.95 )",
+ "shadow-opacity": "0.10",
+ "shadow-blur": "5px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "2px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.05)",
+ "shadow-xs": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.05)",
+ "shadow-sm": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 1px 2px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 1px 2px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-md": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 2px 4px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-lg": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 4px 6px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-xl": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 8px 10px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-2xl": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.22 0 0)",
+ "foreground": "oklch(0.97 0.01 267.41)",
+ "card": "oklch(0.29 0 0)",
+ "card-foreground": "oklch(0.97 0.01 267.41)",
+ "popover": "oklch(0.29 0 0)",
+ "popover-foreground": "oklch(0.97 0.01 267.41)",
+ "primary": "oklch(0.80 0.14 348.82)",
+ "primary-foreground": "oklch(0.22 0 0)",
+ "secondary": "oklch(0.77 0.15 306.21)",
+ "secondary-foreground": "oklch(0.22 0 0)",
+ "muted": "oklch(0.32 0 0)",
+ "muted-foreground": "oklch(0.85 0 0)",
+ "accent": "oklch(0.83 0.09 247.96)",
+ "accent-foreground": "oklch(0.22 0 0)",
+ "destructive": "oklch(0.70 0.19 23.04)",
+ "border": "oklch(0.39 0 0)",
+ "input": "oklch(0.39 0 0)",
+ "ring": "oklch(0.83 0.09 247.96)",
+ "chart-1": "oklch(0.80 0.14 348.82)",
+ "chart-2": "oklch(0.77 0.15 306.21)",
+ "chart-3": "oklch(0.83 0.09 247.96)",
+ "chart-4": "oklch(0.88 0.09 66.79)",
+ "chart-5": "oklch(0.94 0.14 130.35)",
+ "sidebar": "oklch(0.29 0 0)",
+ "sidebar-foreground": "oklch(0.97 0.01 267.41)",
+ "sidebar-primary": "oklch(0.80 0.14 348.82)",
+ "sidebar-primary-foreground": "oklch(0.22 0 0)",
+ "sidebar-accent": "oklch(0.83 0.09 247.96)",
+ "sidebar-accent-foreground": "oklch(0.22 0 0)",
+ "sidebar-border": "oklch(0.39 0 0)",
+ "sidebar-ring": "oklch(0.83 0.09 247.96)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0.83 0.09 248.95 / 0.10)",
+ "shadow-opacity": "0.10",
+ "shadow-blur": "2px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.05)",
+ "shadow-xs": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.05)",
+ "shadow-sm": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 1px 2px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 1px 2px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-md": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 2px 4px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-lg": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 4px 6px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-xl": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 8px 10px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-2xl": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/marvel.json b/public/r/marvel.json
new file mode 100644
index 0000000..4b6de0f
--- /dev/null
+++ b/public/r/marvel.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "marvel",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Outfit, sans-serif",
+ "font-mono": "Geist Mono, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0.01 25.23)",
+ "foreground": "oklch(0.20 0.01 18.05)",
+ "card": "oklch(0.95 0.01 25.23)",
+ "card-foreground": "oklch(0.18 0.01 29.18)",
+ "popover": "oklch(0.94 0.01 25.23)",
+ "popover-foreground": "oklch(0.22 0.01 29.09)",
+ "primary": "oklch(0.55 0.22 27.03)",
+ "primary-foreground": "oklch(0.98 0.01 100.72)",
+ "secondary": "oklch(0.52 0.14 247.51)",
+ "secondary-foreground": "oklch(0.98 0.01 100.72)",
+ "muted": "oklch(0.91 0.01 25.23)",
+ "muted-foreground": "oklch(0.38 0.01 17.71)",
+ "accent": "oklch(0.86 0.04 33.45)",
+ "accent-foreground": "oklch(0.18 0.01 29.18)",
+ "destructive": "oklch(0.56 0.23 29.23)",
+ "border": "oklch(0.84 0.01 25.22)",
+ "input": "oklch(0.80 0.01 25.22)",
+ "ring": "oklch(0.50 0.12 244.86)",
+ "chart-1": "oklch(0.58 0.23 27.06)",
+ "chart-2": "oklch(0.61 0.18 251.95)",
+ "chart-3": "oklch(0.72 0.15 83.50)",
+ "chart-4": "oklch(0.67 0.15 144.89)",
+ "chart-5": "oklch(0.75 0.15 304.74)",
+ "sidebar": "oklch(0.97 0 0)",
+ "sidebar-foreground": "oklch(0.20 0.01 18.05)",
+ "sidebar-primary": "oklch(0.52 0.14 247.51)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 100.72)",
+ "sidebar-accent": "oklch(0.69 0.14 79.70)",
+ "sidebar-accent-foreground": "oklch(0.20 0.01 18.05)",
+ "sidebar-border": "oklch(0.87 0.01 25.23)",
+ "sidebar-ring": "oklch(0.52 0.14 247.51)",
+ "font-sans": "Outfit, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "Geist Mono, monospace",
+ "radius": "0rem",
+ "shadow-color": "oklch(0 0 0 / 0.01)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.03)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.12 0.01 38.49)",
+ "foreground": "oklch(0.95 0.01 25.23)",
+ "card": "oklch(0.18 0.01 29.18)",
+ "card-foreground": "oklch(0.95 0.01 25.23)",
+ "popover": "oklch(0.18 0.01 29.18)",
+ "popover-foreground": "oklch(0.95 0.01 25.23)",
+ "primary": "oklch(0.65 0.23 27.09)",
+ "primary-foreground": "oklch(0.98 0.01 100.72)",
+ "secondary": "oklch(0.50 0.14 249.16)",
+ "secondary-foreground": "oklch(0.98 0.01 100.72)",
+ "muted": "oklch(0.20 0.01 18.05)",
+ "muted-foreground": "oklch(0.70 0.01 25.22)",
+ "accent": "oklch(0.59 0.12 78.19)",
+ "accent-foreground": "oklch(0.95 0.01 25.23)",
+ "destructive": "oklch(0.56 0.23 29.23)",
+ "border": "oklch(0.38 0.01 17.71)",
+ "input": "oklch(0.38 0.01 17.71)",
+ "ring": "oklch(0.49 0.14 250.75)",
+ "chart-1": "oklch(0.64 0.25 26.85)",
+ "chart-2": "oklch(0.66 0.19 250.17)",
+ "chart-3": "oklch(0.78 0.16 87.01)",
+ "chart-4": "oklch(0.68 0.15 144.94)",
+ "chart-5": "oklch(0.75 0.15 304.74)",
+ "sidebar": "oklch(0.14 0.01 33.25)",
+ "sidebar-foreground": "oklch(0.95 0.01 25.23)",
+ "sidebar-primary": "oklch(0.50 0.14 249.16)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 100.72)",
+ "sidebar-accent": "oklch(0.59 0.12 78.19)",
+ "sidebar-accent-foreground": "oklch(0.95 0.01 25.23)",
+ "sidebar-border": "oklch(0.32 0.01 27.45 / 30%)",
+ "sidebar-ring": "oklch(0.50 0.14 249.16)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0 0 0 / 0.01)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.03)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/material-design.json b/public/r/material-design.json
new file mode 100644
index 0000000..f46a43c
--- /dev/null
+++ b/public/r/material-design.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "material-design",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Roboto, sans-serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "1rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0.01 335.69)",
+ "foreground": "oklch(0.22 0 0)",
+ "card": "oklch(0.96 0.01 335.69)",
+ "card-foreground": "oklch(0.14 0 0)",
+ "popover": "oklch(0.95 0.01 316.67)",
+ "popover-foreground": "oklch(0.40 0.04 309.35)",
+ "primary": "oklch(0.51 0.21 286.50)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.49 0.04 300.23)",
+ "secondary-foreground": "oklch(1.00 0 0)",
+ "muted": "oklch(0.96 0.01 335.69)",
+ "muted-foreground": "oklch(0.14 0 0)",
+ "accent": "oklch(0.92 0.04 303.47)",
+ "accent-foreground": "oklch(0.14 0 0)",
+ "destructive": "oklch(0.57 0.23 29.21)",
+ "border": "oklch(0.83 0.02 308.26)",
+ "input": "oklch(0.57 0.02 309.68)",
+ "ring": "oklch(0.50 0.13 293.77)",
+ "chart-1": "oklch(0.61 0.21 279.42)",
+ "chart-2": "oklch(0.72 0.15 157.67)",
+ "chart-3": "oklch(0.66 0.17 324.24)",
+ "chart-4": "oklch(0.81 0.15 127.91)",
+ "chart-5": "oklch(0.68 0.17 258.25)",
+ "sidebar": "oklch(0.99 0 0)",
+ "sidebar-foreground": "oklch(0.15 0 0)",
+ "sidebar-primary": "oklch(0.56 0.11 228.27)",
+ "sidebar-primary-foreground": "oklch(0.98 0 0)",
+ "sidebar-accent": "oklch(0.95 0 0)",
+ "sidebar-accent-foreground": "oklch(0.25 0 0)",
+ "sidebar-border": "oklch(0.90 0 0)",
+ "sidebar-ring": "oklch(0.56 0.11 228.27)",
+ "font-sans": "Roboto, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "radius": "1rem",
+ "shadow-color": "oklch(0 0 0 / 0.01)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.03)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.15 0.01 317.69)",
+ "foreground": "oklch(0.95 0.01 321.50)",
+ "card": "oklch(0.22 0.02 322.13)",
+ "card-foreground": "oklch(0.95 0.01 321.50)",
+ "popover": "oklch(0.22 0.02 322.13)",
+ "popover-foreground": "oklch(0.95 0.01 321.50)",
+ "primary": "oklch(0.60 0.22 279.81)",
+ "primary-foreground": "oklch(0.98 0.01 321.51)",
+ "secondary": "oklch(0.45 0.03 294.79)",
+ "secondary-foreground": "oklch(0.95 0.01 321.50)",
+ "muted": "oklch(0.22 0.01 319.50)",
+ "muted-foreground": "oklch(0.70 0.01 320.70)",
+ "accent": "oklch(0.35 0.06 299.57)",
+ "accent-foreground": "oklch(0.95 0.01 321.50)",
+ "destructive": "oklch(0.57 0.23 29.21)",
+ "border": "oklch(0.40 0.04 309.35)",
+ "input": "oklch(0.40 0.04 309.35)",
+ "ring": "oklch(0.50 0.15 294.97)",
+ "chart-1": "oklch(0.50 0.25 274.99)",
+ "chart-2": "oklch(0.60 0.15 150.16)",
+ "chart-3": "oklch(0.65 0.20 309.96)",
+ "chart-4": "oklch(0.60 0.17 132.98)",
+ "chart-5": "oklch(0.60 0.20 255.25)",
+ "sidebar": "oklch(0.20 0.01 317.74)",
+ "sidebar-foreground": "oklch(0.95 0.01 321.50)",
+ "sidebar-primary": "oklch(0.59 0.11 225.82)",
+ "sidebar-primary-foreground": "oklch(0.95 0.01 321.50)",
+ "sidebar-accent": "oklch(0.30 0.01 319.52)",
+ "sidebar-accent-foreground": "oklch(0.95 0.01 321.50)",
+ "sidebar-border": "oklch(0.35 0.01 319.53 / 30%)",
+ "sidebar-ring": "oklch(0.59 0.11 225.82)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0 0 0 / 0.01)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.03)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/midnight-bloom.json b/public/r/midnight-bloom.json
new file mode 100644
index 0000000..886409d
--- /dev/null
+++ b/public/r/midnight-bloom.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "midnight-bloom",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Montserrat, sans-serif",
+ "font-mono": "Source Code Pro, monospace",
+ "font-serif": "Playfair Display, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.32 0 0)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.32 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.32 0 0)",
+ "primary": "oklch(0.57 0.20 283.26)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.82 0.07 249.99)",
+ "secondary-foreground": "oklch(0.32 0 0)",
+ "muted": "oklch(0.82 0.02 90.54)",
+ "muted-foreground": "oklch(0.54 0 0)",
+ "accent": "oklch(0.65 0.06 117.02)",
+ "accent-foreground": "oklch(1.00 0 0)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.87 0 0)",
+ "input": "oklch(0.87 0 0)",
+ "ring": "oklch(0.57 0.20 283.26)",
+ "chart-1": "oklch(0.57 0.20 283.26)",
+ "chart-2": "oklch(0.53 0.17 314.68)",
+ "chart-3": "oklch(0.34 0.18 301.34)",
+ "chart-4": "oklch(0.67 0.14 261.15)",
+ "chart-5": "oklch(0.59 0.10 245.35)",
+ "sidebar": "oklch(0.98 0 0)",
+ "sidebar-foreground": "oklch(0.32 0 0)",
+ "sidebar-primary": "oklch(0.57 0.20 283.26)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.65 0.06 117.02)",
+ "sidebar-accent-foreground": "oklch(1.00 0 0)",
+ "sidebar-border": "oklch(0.87 0 0)",
+ "sidebar-ring": "oklch(0.57 0.20 283.26)",
+ "font-sans": "Montserrat, sans-serif",
+ "font-serif": "Playfair Display, serif",
+ "font-mono": "Source Code Pro, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "10px",
+ "shadow-spread": "-2px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "5px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 5px 10px -2px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0px 5px 10px -2px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 1px 2px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 1px 2px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 2px 4px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 4px 6px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 8px 10px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0px 5px 10px -2px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.23 0.01 268.25)",
+ "foreground": "oklch(0.92 0 0)",
+ "card": "oklch(0.32 0.01 229.15)",
+ "card-foreground": "oklch(0.92 0 0)",
+ "popover": "oklch(0.32 0.01 229.15)",
+ "popover-foreground": "oklch(0.92 0 0)",
+ "primary": "oklch(0.57 0.20 283.26)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.34 0.18 301.34)",
+ "secondary-foreground": "oklch(0.92 0 0)",
+ "muted": "oklch(0.39 0 0)",
+ "muted-foreground": "oklch(0.72 0 0)",
+ "accent": "oklch(0.67 0.14 261.15)",
+ "accent-foreground": "oklch(0.92 0 0)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.39 0 0)",
+ "input": "oklch(0.39 0 0)",
+ "ring": "oklch(0.57 0.20 283.26)",
+ "chart-1": "oklch(0.57 0.20 283.26)",
+ "chart-2": "oklch(0.53 0.17 314.68)",
+ "chart-3": "oklch(0.34 0.18 301.34)",
+ "chart-4": "oklch(0.67 0.14 261.15)",
+ "chart-5": "oklch(0.59 0.10 245.35)",
+ "sidebar": "oklch(0.23 0.01 268.25)",
+ "sidebar-foreground": "oklch(0.92 0 0)",
+ "sidebar-primary": "oklch(0.57 0.20 283.26)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.67 0.14 261.15)",
+ "sidebar-accent-foreground": "oklch(0.92 0 0)",
+ "sidebar-border": "oklch(0.39 0 0)",
+ "sidebar-ring": "oklch(0.57 0.20 283.26)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/modern-minimal.json b/public/r/modern-minimal.json
new file mode 100644
index 0000000..e80184e
--- /dev/null
+++ b/public/r/modern-minimal.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "modern-minimal",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-mono": "JetBrains Mono, monospace",
+ "font-serif": "Source Serif 4, serif",
+ "radius": "0.375rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(1.00 0 0)",
+ "foreground": "oklch(0.32 0 0)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.32 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.32 0 0)",
+ "primary": "oklch(0.62 0.19 259.76)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.97 0 0)",
+ "secondary-foreground": "oklch(0.45 0.03 257.68)",
+ "muted": "oklch(0.98 0 0)",
+ "muted-foreground": "oklch(0.55 0.02 264.41)",
+ "accent": "oklch(0.95 0.03 233.56)",
+ "accent-foreground": "oklch(0.38 0.14 265.59)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.93 0.01 261.82)",
+ "input": "oklch(0.93 0.01 261.82)",
+ "ring": "oklch(0.62 0.19 259.76)",
+ "chart-1": "oklch(0.62 0.19 259.76)",
+ "chart-2": "oklch(0.55 0.22 262.96)",
+ "chart-3": "oklch(0.49 0.22 264.43)",
+ "chart-4": "oklch(0.42 0.18 265.55)",
+ "chart-5": "oklch(0.38 0.14 265.59)",
+ "sidebar": "oklch(0.98 0 0)",
+ "sidebar-foreground": "oklch(0.14 0 0)",
+ "sidebar-primary": "oklch(0.20 0 0)",
+ "sidebar-primary-foreground": "oklch(0.98 0 0)",
+ "sidebar-accent": "oklch(0.97 0 0)",
+ "sidebar-accent-foreground": "oklch(0.20 0 0)",
+ "sidebar-border": "oklch(0.92 0 0)",
+ "sidebar-ring": "oklch(0.71 0 0)",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "Source Serif 4, serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "radius": "0.375rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.20 0 0)",
+ "foreground": "oklch(0.92 0 0)",
+ "card": "oklch(0.27 0 0)",
+ "card-foreground": "oklch(0.92 0 0)",
+ "popover": "oklch(0.27 0 0)",
+ "popover-foreground": "oklch(0.92 0 0)",
+ "primary": "oklch(0.62 0.19 259.76)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.27 0 0)",
+ "secondary-foreground": "oklch(0.92 0 0)",
+ "muted": "oklch(0.27 0 0)",
+ "muted-foreground": "oklch(0.72 0 0)",
+ "accent": "oklch(0.38 0.14 265.59)",
+ "accent-foreground": "oklch(0.88 0.06 254.63)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.37 0 0)",
+ "input": "oklch(0.37 0 0)",
+ "ring": "oklch(0.62 0.19 259.76)",
+ "chart-1": "oklch(0.71 0.14 254.69)",
+ "chart-2": "oklch(0.62 0.19 259.76)",
+ "chart-3": "oklch(0.55 0.22 262.96)",
+ "chart-4": "oklch(0.49 0.22 264.43)",
+ "chart-5": "oklch(0.42 0.18 265.55)",
+ "sidebar": "oklch(0.21 0.01 285.56)",
+ "sidebar-foreground": "oklch(0.99 0 0)",
+ "sidebar-primary": "oklch(0.49 0.24 264.41)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.27 0.01 285.81)",
+ "sidebar-accent-foreground": "oklch(0.99 0 0)",
+ "sidebar-border": "oklch(1.00 0 0 / 10%)",
+ "sidebar-ring": "oklch(0.55 0.02 285.76)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/nature.json b/public/r/nature.json
new file mode 100644
index 0000000..b16610d
--- /dev/null
+++ b/public/r/nature.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "nature",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Montserrat, sans-serif",
+ "font-mono": "Source Code Pro, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.97 0.01 81.76)",
+ "foreground": "oklch(0.30 0.04 29.20)",
+ "card": "oklch(0.97 0.01 81.76)",
+ "card-foreground": "oklch(0.30 0.04 29.20)",
+ "popover": "oklch(0.97 0.01 81.76)",
+ "popover-foreground": "oklch(0.30 0.04 29.20)",
+ "primary": "oklch(0.52 0.13 144.33)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.96 0.02 147.54)",
+ "secondary-foreground": "oklch(0.43 0.12 144.33)",
+ "muted": "oklch(0.94 0.01 72.65)",
+ "muted-foreground": "oklch(0.45 0.05 38.69)",
+ "accent": "oklch(0.90 0.05 146.01)",
+ "accent-foreground": "oklch(0.43 0.12 144.33)",
+ "destructive": "oklch(0.54 0.19 26.90)",
+ "border": "oklch(0.88 0.02 77.29)",
+ "input": "oklch(0.88 0.02 77.29)",
+ "ring": "oklch(0.52 0.13 144.33)",
+ "chart-1": "oklch(0.67 0.16 144.06)",
+ "chart-2": "oklch(0.58 0.14 144.14)",
+ "chart-3": "oklch(0.52 0.13 144.33)",
+ "chart-4": "oklch(0.43 0.12 144.33)",
+ "chart-5": "oklch(0.22 0.05 145.19)",
+ "sidebar": "oklch(0.94 0.01 72.65)",
+ "sidebar-foreground": "oklch(0.30 0.04 29.20)",
+ "sidebar-primary": "oklch(0.52 0.13 144.33)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.90 0.05 146.01)",
+ "sidebar-accent-foreground": "oklch(0.43 0.12 144.33)",
+ "sidebar-border": "oklch(0.88 0.02 77.29)",
+ "sidebar-ring": "oklch(0.52 0.13 144.33)",
+ "font-sans": "Montserrat, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "Source Code Pro, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.27 0.03 150.18)",
+ "foreground": "oklch(0.94 0.01 72.65)",
+ "card": "oklch(0.33 0.03 146.53)",
+ "card-foreground": "oklch(0.94 0.01 72.65)",
+ "popover": "oklch(0.33 0.03 146.53)",
+ "popover-foreground": "oklch(0.94 0.01 72.65)",
+ "primary": "oklch(0.67 0.16 144.06)",
+ "primary-foreground": "oklch(0.22 0.05 145.19)",
+ "secondary": "oklch(0.39 0.03 143.09)",
+ "secondary-foreground": "oklch(0.90 0.02 142.94)",
+ "muted": "oklch(0.33 0.03 146.53)",
+ "muted-foreground": "oklch(0.86 0.02 77.29)",
+ "accent": "oklch(0.58 0.14 144.14)",
+ "accent-foreground": "oklch(0.94 0.01 72.65)",
+ "destructive": "oklch(0.54 0.19 26.90)",
+ "border": "oklch(0.39 0.03 143.09)",
+ "input": "oklch(0.39 0.03 143.09)",
+ "ring": "oklch(0.67 0.16 144.06)",
+ "chart-1": "oklch(0.77 0.12 145.23)",
+ "chart-2": "oklch(0.72 0.14 144.92)",
+ "chart-3": "oklch(0.67 0.16 144.06)",
+ "chart-4": "oklch(0.63 0.15 144.32)",
+ "chart-5": "oklch(0.58 0.14 144.14)",
+ "sidebar": "oklch(0.27 0.03 150.18)",
+ "sidebar-foreground": "oklch(0.94 0.01 72.65)",
+ "sidebar-primary": "oklch(0.67 0.16 144.06)",
+ "sidebar-primary-foreground": "oklch(0.22 0.05 145.19)",
+ "sidebar-accent": "oklch(0.58 0.14 144.14)",
+ "sidebar-accent-foreground": "oklch(0.94 0.01 72.65)",
+ "sidebar-border": "oklch(0.39 0.03 143.09)",
+ "sidebar-ring": "oklch(0.67 0.16 144.06)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/navbar-component-01.json b/public/r/navbar-component-01.json
new file mode 100644
index 0000000..5723810
--- /dev/null
+++ b/public/r/navbar-component-01.json
@@ -0,0 +1,45 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "navbar-component-01",
+ "type": "registry:block",
+ "title": "Navbar 1",
+ "description": "A sticky navigation header with centered logo and brand name flanked symmetrically by navigation links on both sides. Features a search icon button and responsive mobile dropdown menu, perfect for balanced logo-centric layouts.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/navbar-component/navbar-component-01/page.tsx",
+ "content": "import Navbar from '@/components/shadcn-studio/blocks/navbar-component-01/navbar-component-01'\n\nconst navigationData = [\n {\n title: 'Home',\n href: '#'\n },\n {\n title: 'Products',\n href: '#'\n },\n {\n title: 'About Us',\n href: '#'\n },\n {\n title: 'Contacts',\n href: '#'\n }\n]\n\nconst NavbarPage = () => {\n return (\n \n \n
\n )\n}\n\nexport default NavbarPage\n",
+ "type": "registry:page",
+ "target": "app/navbar-component-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst Logo = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/navbar-component-01/navbar-component-01.tsx",
+ "content": "import { MenuIcon, SearchIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\n\nimport Logo from '@/components/layout/logo'\n\ntype NavigationItem = {\n title: string\n href: string\n}[]\n\nconst Navbar = ({ navigationData }: { navigationData: NavigationItem }) => {\n return (\n \n \n
\n\n
\n
\n \n Search \n \n
\n \n \n \n Menu \n \n \n \n \n {navigationData.map((item, index) => (\n \n {item.title} \n \n ))}\n \n \n \n
\n
\n \n )\n}\n\nexport default Navbar\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/navbar-component-01/navbar-component-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "content": "// SVG Imports\nimport LogoSvg from '@/assets/svg/logo'\n\n// Util Imports\nimport { cn } from '@/lib/utils'\n\nconst Logo = ({ className }: { className?: string }) => {\n return (\n \n \n shadcn/studio \n
\n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "navbar-component"
+ }
+}
\ No newline at end of file
diff --git a/public/r/neo-brutalism.json b/public/r/neo-brutalism.json
new file mode 100644
index 0000000..48658c1
--- /dev/null
+++ b/public/r/neo-brutalism.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "neo-brutalism",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "DM Sans, sans-serif",
+ "font-mono": "Space Mono, monospace",
+ "font-serif": "ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "radius": "0px",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(1.00 0 0)",
+ "foreground": "oklch(0 0 0)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0 0 0)",
+ "primary": "oklch(0.65 0.24 26.92)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.97 0.21 109.74)",
+ "secondary-foreground": "oklch(0 0 0)",
+ "muted": "oklch(0.96 0 0)",
+ "muted-foreground": "oklch(0.32 0 0)",
+ "accent": "oklch(0.56 0.24 260.83)",
+ "accent-foreground": "oklch(1.00 0 0)",
+ "destructive": "oklch(0 0 0)",
+ "border": "oklch(0 0 0)",
+ "input": "oklch(0 0 0)",
+ "ring": "oklch(0.65 0.24 26.92)",
+ "chart-1": "oklch(0.65 0.24 26.92)",
+ "chart-2": "oklch(0.97 0.21 109.74)",
+ "chart-3": "oklch(0.56 0.24 260.83)",
+ "chart-4": "oklch(0.73 0.25 142.50)",
+ "chart-5": "oklch(0.59 0.27 328.36)",
+ "sidebar": "oklch(0.96 0 0)",
+ "sidebar-foreground": "oklch(0 0 0)",
+ "sidebar-primary": "oklch(0.65 0.24 26.92)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.56 0.24 260.83)",
+ "sidebar-accent-foreground": "oklch(1.00 0 0)",
+ "sidebar-border": "oklch(0 0 0)",
+ "sidebar-ring": "oklch(0.65 0.24 26.92)",
+ "font-sans": "DM Sans, sans-serif",
+ "font-serif": "ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "Space Mono, monospace",
+ "radius": "0px",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "1",
+ "shadow-blur": "0px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "4px",
+ "shadow-offset-y": "4px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "4px 4px 0px 0px oklch(0.00 0 0 / 0.50)",
+ "shadow-xs": "4px 4px 0px 0px oklch(0.00 0 0 / 0.50)",
+ "shadow-sm": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 1px 2px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 1px 2px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow-md": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 2px 4px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow-lg": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 4px 6px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow-xl": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 8px 10px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow-2xl": "4px 4px 0px 0px oklch(0.00 0 0 / 2.50)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0 0 0)",
+ "foreground": "oklch(1.00 0 0)",
+ "card": "oklch(0.32 0 0)",
+ "card-foreground": "oklch(1.00 0 0)",
+ "popover": "oklch(0.32 0 0)",
+ "popover-foreground": "oklch(1.00 0 0)",
+ "primary": "oklch(0.70 0.19 23.04)",
+ "primary-foreground": "oklch(0 0 0)",
+ "secondary": "oklch(0.97 0.20 109.61)",
+ "secondary-foreground": "oklch(0 0 0)",
+ "muted": "oklch(0.32 0 0)",
+ "muted-foreground": "oklch(0.85 0 0)",
+ "accent": "oklch(0.68 0.18 251.63)",
+ "accent-foreground": "oklch(0 0 0)",
+ "destructive": "oklch(1.00 0 0)",
+ "border": "oklch(1.00 0 0)",
+ "input": "oklch(1.00 0 0)",
+ "ring": "oklch(0.70 0.19 23.04)",
+ "chart-1": "oklch(0.70 0.19 23.04)",
+ "chart-2": "oklch(0.97 0.20 109.61)",
+ "chart-3": "oklch(0.68 0.18 251.63)",
+ "chart-4": "oklch(0.74 0.23 142.87)",
+ "chart-5": "oklch(0.61 0.25 328.13)",
+ "sidebar": "oklch(0 0 0)",
+ "sidebar-foreground": "oklch(1.00 0 0)",
+ "sidebar-primary": "oklch(0.70 0.19 23.04)",
+ "sidebar-primary-foreground": "oklch(0 0 0)",
+ "sidebar-accent": "oklch(0.68 0.18 251.63)",
+ "sidebar-accent-foreground": "oklch(0 0 0)",
+ "sidebar-border": "oklch(1.00 0 0)",
+ "sidebar-ring": "oklch(0.70 0.19 23.04)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/pagination-01.json b/public/r/pagination-01.json
new file mode 100644
index 0000000..7cbeb7b
--- /dev/null
+++ b/public/r/pagination-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-01",
+ "type": "registry:component",
+ "title": "Pagination 1",
+ "description": "A basic pagination component with previous, numbered pages, and next controls",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-01.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nconst PaginationDemo = () => {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n )\n}\n\nexport default PaginationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-02.json b/public/r/pagination-02.json
new file mode 100644
index 0000000..0066771
--- /dev/null
+++ b/public/r/pagination-02.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-02",
+ "type": "registry:component",
+ "title": "Pagination 2",
+ "description": "A pagination component with chevron icons for previous and next navigation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-02.tsx",
+ "content": "import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'\n\nimport { Pagination, PaginationContent, PaginationItem, PaginationLink } from '@/components/ui/pagination'\n\nconst PaginationWithIconDemo = () => {\n return (\n \n \n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n \n \n )\n}\n\nexport default PaginationWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-03.json b/public/r/pagination-03.json
new file mode 100644
index 0000000..2931713
--- /dev/null
+++ b/public/r/pagination-03.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-03",
+ "type": "registry:component",
+ "title": "Pagination 3",
+ "description": "A pagination component with primary button styling for the active page",
+ "registryDependencies": [
+ "button",
+ "pagination",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-03.tsx",
+ "content": "import { buttonVariants } from '@/components/ui/button'\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nimport { cn } from '@/lib/utils'\n\nconst PaginationWithPrimaryButtonDemo = () => {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n )\n}\n\nexport default PaginationWithPrimaryButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-04.json b/public/r/pagination-04.json
new file mode 100644
index 0000000..e810107
--- /dev/null
+++ b/public/r/pagination-04.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-04",
+ "type": "registry:component",
+ "title": "Pagination 4",
+ "description": "A pagination component with secondary button styling and custom variants",
+ "registryDependencies": [
+ "button",
+ "pagination",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-04.tsx",
+ "content": "import { buttonVariants } from '@/components/ui/button'\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nimport { cn } from '@/lib/utils'\n\nconst PaginationWithSecondaryButtonDemo = () => {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n )\n}\n\nexport default PaginationWithSecondaryButtonDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-05.json b/public/r/pagination-05.json
new file mode 100644
index 0000000..f2c9600
--- /dev/null
+++ b/public/r/pagination-05.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-05",
+ "type": "registry:component",
+ "title": "Pagination 5",
+ "description": "A bordered pagination component with dividers and connected button styling",
+ "registryDependencies": [
+ "button",
+ "pagination",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-05.tsx",
+ "content": "import { buttonVariants } from '@/components/ui/button'\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nimport { cn } from '@/lib/utils'\n\nconst pages = [1, 2, 3]\n\nconst BorderedPaginationDemo = () => {\n return (\n \n \n \n \n \n {pages.map(page => {\n const isActive = page === 2\n\n return (\n \n \n {page}\n \n \n )\n })}\n \n \n \n \n \n )\n}\n\nexport default BorderedPaginationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-06.json b/public/r/pagination-06.json
new file mode 100644
index 0000000..2d032b4
--- /dev/null
+++ b/public/r/pagination-06.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-06",
+ "type": "registry:component",
+ "title": "Pagination 6",
+ "description": "A pagination component with fully rounded button styling for modern appearance",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-06.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nconst pages = [1, 2, 3]\n\nconst PaginationWithRoundedButton = () => {\n return (\n \n \n \n \n \n {pages.map(page => (\n \n \n {page}\n \n \n ))}\n \n \n \n \n \n )\n}\n\nexport default PaginationWithRoundedButton\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-07.json b/public/r/pagination-07.json
new file mode 100644
index 0000000..56e4ecf
--- /dev/null
+++ b/public/r/pagination-07.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-07",
+ "type": "registry:component",
+ "title": "Pagination 7",
+ "description": "A pagination component with first and last page navigation buttons",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-07.tsx",
+ "content": "import { ChevronFirstIcon, ChevronLastIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'\n\nimport { Pagination, PaginationContent, PaginationItem, PaginationLink } from '@/components/ui/pagination'\n\nconst pages = [1, 2, 3]\n\nconst PaginationWithFirstAndLastPageButtonNavigation = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {pages.map(page => (\n \n \n {page}\n \n \n ))}\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default PaginationWithFirstAndLastPageButtonNavigation\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-08.json b/public/r/pagination-08.json
new file mode 100644
index 0000000..235be60
--- /dev/null
+++ b/public/r/pagination-08.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-08",
+ "type": "registry:component",
+ "title": "Pagination 8",
+ "description": "A pagination component with ellipsis and tooltip showing hidden page count",
+ "registryDependencies": [
+ "pagination",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-08.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst PaginationWithEllipsisDemo = () => {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n \n \n \n \n \n 8 other pages
\n \n \n \n \n \n \n \n \n )\n}\n\nexport default PaginationWithEllipsisDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-09.json b/public/r/pagination-09.json
new file mode 100644
index 0000000..9cc4859
--- /dev/null
+++ b/public/r/pagination-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-09",
+ "type": "registry:component",
+ "title": "Pagination 9",
+ "description": "A pagination component with underline styling for the active page indicator",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-09.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nconst PaginationUnderlineDemo = () => {\n return (\n \n \n \n \n \n \n \n 1\n \n \n \n \n 2\n \n \n \n \n 3\n \n \n \n \n \n \n \n )\n}\n\nexport default PaginationUnderlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-10.json b/public/r/pagination-10.json
new file mode 100644
index 0000000..cdf94ad
--- /dev/null
+++ b/public/r/pagination-10.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-10",
+ "type": "registry:component",
+ "title": "Pagination 10",
+ "description": "A card-style pagination component with border, shadow, and contained layout",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-10.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nconst CardPaginationDemo = () => {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n )\n}\n\nexport default CardPaginationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-11.json b/public/r/pagination-11.json
new file mode 100644
index 0000000..d3ca12c
--- /dev/null
+++ b/public/r/pagination-11.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-11",
+ "type": "registry:component",
+ "title": "Pagination 11",
+ "description": "A minimal numberless pagination component with only previous and next controls",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-11.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nconst NumberlessPaginationDemo = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default NumberlessPaginationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-12.json b/public/r/pagination-12.json
new file mode 100644
index 0000000..71ee4bf
--- /dev/null
+++ b/public/r/pagination-12.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-12",
+ "type": "registry:component",
+ "title": "Pagination 12",
+ "description": "A numberless pagination component with current page indicator text display",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-12.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\n\nconst NumberlessPaginationWithTextDemo = () => {\n return (\n \n \n \n \n \n \n \n Page 2 of 5 \n
\n \n \n \n \n \n \n )\n}\n\nexport default NumberlessPaginationWithTextDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-13.json b/public/r/pagination-13.json
new file mode 100644
index 0000000..ac9d492
--- /dev/null
+++ b/public/r/pagination-13.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-13",
+ "type": "registry:component",
+ "title": "Pagination 13",
+ "description": "A compact mini pagination component with page count display and icon navigation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-13.tsx",
+ "content": "import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'\n\nimport { Pagination, PaginationContent, PaginationItem, PaginationLink } from '@/components/ui/pagination'\n\nconst MiniPagination = () => {\n return (\n \n \n \n \n \n \n \n \n \n Page 2 of 5 \n
\n \n \n \n \n \n \n \n \n )\n}\n\nexport default MiniPagination\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-14.json b/public/r/pagination-14.json
new file mode 100644
index 0000000..aa84d6a
--- /dev/null
+++ b/public/r/pagination-14.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-14",
+ "type": "registry:component",
+ "title": "Pagination 14",
+ "description": "A pagination component with page size selector dropdown for customizable results per page",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "pagination",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-14.tsx",
+ "content": "import { ChevronFirstIcon, ChevronLastIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'\n\nimport { Pagination, PaginationContent, PaginationItem, PaginationLink } from '@/components/ui/pagination'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst PaginationWithSelectDemo = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n {Array.from({ length: 10 }, (_, i) => i + 1).map(page => (\n \n Page {page}\n \n ))}\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default PaginationWithSelectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/pagination-15.json b/public/r/pagination-15.json
new file mode 100644
index 0000000..053c36d
--- /dev/null
+++ b/public/r/pagination-15.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pagination-15",
+ "type": "registry:component",
+ "title": "Pagination 15",
+ "description": "A comprehensive pagination component with page size selector, tooltips, and detailed navigation controls",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "pagination",
+ "select",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-15.tsx",
+ "content": "import { useId } from 'react'\n\nimport { ChevronFirstIcon, ChevronLastIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink\n} from '@/components/ui/pagination'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst pages = [1, 2, 3]\n\nconst TablePaginationDemo = () => {\n const id = useId()\n\n return (\n \n
\n Rows per page \n \n \n \n \n \n 10 \n 25 \n 50 \n \n \n
\n
\n
\n Showing 1 to 10 of{' '}\n 100 products\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n {pages.map(page => (\n \n \n {page}\n \n \n ))}\n \n \n \n \n \n \n 2 other pages
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default TablePaginationDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-15.tsx"
+ }
+ ],
+ "meta": {
+ "className": "col-span-full border-r-0"
+ }
+}
\ No newline at end of file
diff --git a/public/r/pastel-dreams.json b/public/r/pastel-dreams.json
new file mode 100644
index 0000000..0d65773
--- /dev/null
+++ b/public/r/pastel-dreams.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pastel-dreams",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Open Sans, sans-serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "font-serif": "Source Serif 4, serif",
+ "radius": "1.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.97 0.01 316.68)",
+ "foreground": "oklch(0.37 0.03 259.73)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.37 0.03 259.73)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.37 0.03 259.73)",
+ "primary": "oklch(0.71 0.16 293.40)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.91 0.05 306.07)",
+ "secondary-foreground": "oklch(0.45 0.03 257.68)",
+ "muted": "oklch(0.95 0.03 307.19)",
+ "muted-foreground": "oklch(0.55 0.02 264.41)",
+ "accent": "oklch(0.94 0.03 322.47)",
+ "accent-foreground": "oklch(0.37 0.03 259.73)",
+ "destructive": "oklch(0.81 0.10 19.47)",
+ "border": "oklch(0.91 0.05 306.07)",
+ "input": "oklch(0.91 0.05 306.07)",
+ "ring": "oklch(0.71 0.16 293.40)",
+ "chart-1": "oklch(0.71 0.16 293.40)",
+ "chart-2": "oklch(0.61 0.22 292.63)",
+ "chart-3": "oklch(0.54 0.25 293.03)",
+ "chart-4": "oklch(0.49 0.24 292.70)",
+ "chart-5": "oklch(0.43 0.21 292.63)",
+ "sidebar": "oklch(0.91 0.05 306.07)",
+ "sidebar-foreground": "oklch(0.37 0.03 259.73)",
+ "sidebar-primary": "oklch(0.71 0.16 293.40)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.94 0.03 322.47)",
+ "sidebar-accent-foreground": "oklch(0.37 0.03 259.73)",
+ "sidebar-border": "oklch(0.91 0.05 306.07)",
+ "sidebar-ring": "oklch(0.71 0.16 293.40)",
+ "font-sans": "Open Sans, sans-serif",
+ "font-serif": "Source Serif 4, serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "radius": "1.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.08",
+ "shadow-blur": "16px",
+ "shadow-spread": "-4px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "8px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 8px 16px -4px oklch(0.00 0 0 / 0.04)",
+ "shadow-xs": "0px 8px 16px -4px oklch(0.00 0 0 / 0.04)",
+ "shadow-sm": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 1px 2px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 1px 2px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow-md": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 2px 4px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow-lg": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 4px 6px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow-xl": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 8px 10px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow-2xl": "0px 8px 16px -4px oklch(0.00 0 0 / 0.20)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.22 0.01 52.96)",
+ "foreground": "oklch(0.93 0.03 273.66)",
+ "card": "oklch(0.28 0.03 307.25)",
+ "card-foreground": "oklch(0.93 0.03 273.66)",
+ "popover": "oklch(0.28 0.03 307.25)",
+ "popover-foreground": "oklch(0.93 0.03 273.66)",
+ "primary": "oklch(0.79 0.12 295.97)",
+ "primary-foreground": "oklch(0.22 0.01 52.96)",
+ "secondary": "oklch(0.34 0.04 309.13)",
+ "secondary-foreground": "oklch(0.87 0.01 261.81)",
+ "muted": "oklch(0.28 0.03 307.25)",
+ "muted-foreground": "oklch(0.71 0.02 261.33)",
+ "accent": "oklch(0.39 0.05 304.68)",
+ "accent-foreground": "oklch(0.87 0.01 261.81)",
+ "destructive": "oklch(0.81 0.10 19.47)",
+ "border": "oklch(0.34 0.04 309.13)",
+ "input": "oklch(0.34 0.04 309.13)",
+ "ring": "oklch(0.79 0.12 295.97)",
+ "chart-1": "oklch(0.79 0.12 295.97)",
+ "chart-2": "oklch(0.71 0.16 293.40)",
+ "chart-3": "oklch(0.61 0.22 292.63)",
+ "chart-4": "oklch(0.54 0.25 293.03)",
+ "chart-5": "oklch(0.49 0.24 292.70)",
+ "sidebar": "oklch(0.34 0.04 309.13)",
+ "sidebar-foreground": "oklch(0.93 0.03 273.66)",
+ "sidebar-primary": "oklch(0.79 0.12 295.97)",
+ "sidebar-primary-foreground": "oklch(0.22 0.01 52.96)",
+ "sidebar-accent": "oklch(0.39 0.05 304.68)",
+ "sidebar-accent-foreground": "oklch(0.87 0.01 261.81)",
+ "sidebar-border": "oklch(0.34 0.04 309.13)",
+ "sidebar-ring": "oklch(0.79 0.12 295.97)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/perplexity.json b/public/r/perplexity.json
new file mode 100644
index 0000000..29c807e
--- /dev/null
+++ b/public/r/perplexity.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "perplexity",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Inter, sans-serif",
+ "font-mono": "Roboto Mono, monospace",
+ "font-serif": "Lora, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.95 0.01 196.81)",
+ "foreground": "oklch(0.38 0.06 211.49)",
+ "card": "oklch(0.97 0.01 196.81)",
+ "card-foreground": "oklch(0.38 0.06 211.49)",
+ "popover": "oklch(0.97 0.01 196.81)",
+ "popover-foreground": "oklch(0.38 0.06 211.49)",
+ "primary": "oklch(0.72 0.12 210.36)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.97 0.01 247.91)",
+ "secondary-foreground": "oklch(0.14 0 0)",
+ "muted": "oklch(0.97 0.01 247.91)",
+ "muted-foreground": "oklch(0.55 0.04 256.40)",
+ "accent": "oklch(0.96 0.02 204.34)",
+ "accent-foreground": "oklch(0.57 0.10 213.73)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.93 0.01 256.71)",
+ "input": "oklch(0.93 0.01 256.71)",
+ "ring": "oklch(0.72 0.12 210.36)",
+ "chart-1": "oklch(0.72 0.12 210.36)",
+ "chart-2": "oklch(0.57 0.10 213.73)",
+ "chart-3": "oklch(0.79 0.12 209.45)",
+ "chart-4": "oklch(0.76 0.11 208.70)",
+ "chart-5": "oklch(0.83 0.10 208.33)",
+ "sidebar": "oklch(0.98 0 0)",
+ "sidebar-foreground": "oklch(0.14 0 0)",
+ "sidebar-primary": "oklch(0.72 0.12 210.36)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.96 0.02 204.34)",
+ "sidebar-accent-foreground": "oklch(0.57 0.10 213.73)",
+ "sidebar-border": "oklch(0.93 0.01 256.71)",
+ "sidebar-ring": "oklch(0.72 0.12 210.36)",
+ "font-sans": "Inter, sans-serif",
+ "font-serif": "Lora, serif",
+ "font-mono": "Roboto Mono, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.21 0.02 226.02)",
+ "foreground": "oklch(0.85 0.13 194.97)",
+ "card": "oklch(0.23 0.03 218.18)",
+ "card-foreground": "oklch(0.85 0.13 194.97)",
+ "popover": "oklch(0.23 0.03 218.18)",
+ "popover-foreground": "oklch(0.85 0.13 194.97)",
+ "primary": "oklch(0.72 0.12 210.36)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.27 0.01 285.81)",
+ "secondary-foreground": "oklch(0.97 0 0)",
+ "muted": "oklch(0.24 0 0)",
+ "muted-foreground": "oklch(0.71 0.01 286.23)",
+ "accent": "oklch(0.24 0 0)",
+ "accent-foreground": "oklch(0.97 0 0)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.29 0 0)",
+ "input": "oklch(0.29 0 0)",
+ "ring": "oklch(0.72 0.12 210.36)",
+ "chart-1": "oklch(0.72 0.12 210.36)",
+ "chart-2": "oklch(0.79 0.12 209.45)",
+ "chart-3": "oklch(0.76 0.11 208.70)",
+ "chart-4": "oklch(0.83 0.10 208.33)",
+ "chart-5": "oklch(0.57 0.10 213.73)",
+ "sidebar": "oklch(0.19 0 0)",
+ "sidebar-foreground": "oklch(0.97 0 0)",
+ "sidebar-primary": "oklch(0.72 0.12 210.36)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.24 0 0)",
+ "sidebar-accent-foreground": "oklch(0.97 0 0)",
+ "sidebar-border": "oklch(0.29 0 0)",
+ "sidebar-ring": "oklch(0.72 0.12 210.36)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/popover-01.json b/public/r/popover-01.json
new file mode 100644
index 0000000..81ed7c5
--- /dev/null
+++ b/public/r/popover-01.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-01",
+ "type": "registry:component",
+ "title": "Popover 1",
+ "description": "A ratings popover displaying star ratings with progress bars and review statistics",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "popover",
+ "progress",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-01.tsx",
+ "content": "import { StarIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { Progress } from '@/components/ui/progress'\nimport { Separator } from '@/components/ui/separator'\n\nconst ratings = {\n 1: 0,\n 2: 15,\n 3: 30,\n 4: 30,\n 5: 225\n}\n\nconst PopoverRatingsDemo = () => {\n const totalReviews = Object.values(ratings).reduce((acc, count) => acc + count, 0)\n const totalRating = Object.entries(ratings).reduce((acc, [star, count]) => acc + Number(star) * count, 0)\n const averageRating = Number((totalRating / totalReviews || 0).toFixed(2))\n\n return (\n \n \n \n \n Ratings & reviews \n \n \n \n \n
\n
\n {averageRating} \n \n
\n
Total {totalReviews} reviews
\n
All reviews are from genuine customers.
\n
\n
\n
\n
\n
\n {Object.entries(ratings)\n .reverse()\n .map(([star, count]) => (\n \n {star} star \n \n {count.toString()} \n \n ))}\n \n
\n
\n \n \n )\n}\n\nexport default PopoverRatingsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-02.json b/public/r/popover-02.json
new file mode 100644
index 0000000..85d1b84
--- /dev/null
+++ b/public/r/popover-02.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-02",
+ "type": "registry:component",
+ "title": "Popover 2",
+ "description": "A dimensions popover with input fields for width, max width, height, and max height settings",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-02.tsx",
+ "content": "import { PencilRulerIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst PopoverDimensionsDemo = () => {\n return (\n \n \n \n \n Dimensions \n \n \n \n \n
\n
Dimensions \n
Set the dimensions for the layer.
\n
\n
\n
\n \n \n )\n}\n\nexport default PopoverDimensionsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-03.json b/public/r/popover-03.json
new file mode 100644
index 0000000..e4f7a4d
--- /dev/null
+++ b/public/r/popover-03.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-03",
+ "type": "registry:component",
+ "title": "Popover 3",
+ "description": "A pricing popover displaying plan details with features and pricing information",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-03.tsx",
+ "content": "import { DollarSignIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst PopoverPricingDemo = () => {\n return (\n \n \n \n \n Pricing details \n \n \n \n \n
\n Enterprise Plan \n $49.99/month \n
\n
\n Get unlimited access to all features including AI-powered analytics, custom branding, priority support, and\n advanced team collaboration tools.\n
\n
\n \n Limited Offer\n \n 20% discount on annual plan \n
\n
\n \n \n )\n}\n\nexport default PopoverPricingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-04.json b/public/r/popover-04.json
new file mode 100644
index 0000000..7a8ad35
--- /dev/null
+++ b/public/r/popover-04.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-04",
+ "type": "registry:component",
+ "title": "Popover 4",
+ "description": "A volume control popover with a slider for adjusting audio levels",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "label",
+ "popover",
+ "slider"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-04.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Volume2Icon, VolumeXIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { Slider } from '@/components/ui/slider'\n\nconst PopoverVolumeDemo = () => {\n const [value, setValue] = useState([45])\n\n return (\n \n \n \n \n Volume control \n \n \n \n \n
\n Volume \n {value[0]} \n
\n
\n \n \n \n
\n
\n \n \n )\n}\n\nexport default PopoverVolumeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-05.json b/public/r/popover-05.json
new file mode 100644
index 0000000..cbad169
--- /dev/null
+++ b/public/r/popover-05.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-05",
+ "type": "registry:component",
+ "title": "Popover 5",
+ "description": "An informational popover about Shadcn Studio with description and learn more link",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-05.tsx",
+ "content": "import { InfoIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst PopoverAboutDemo = () => {\n return (\n \n \n \n \n About Shadcn Studio \n \n \n \n \n
\n
About Shadcn Studio
\n
\n Welcome to Shadcn Studio — your toolkit for building sleek, customizable UI components with ease!\n
\n
\n
\n \n Learn More\n \n \n
\n \n \n )\n}\n\nexport default PopoverAboutDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-06.json b/public/r/popover-06.json
new file mode 100644
index 0000000..aa83c18
--- /dev/null
+++ b/public/r/popover-06.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-06",
+ "type": "registry:component",
+ "title": "Popover 6",
+ "description": "A download progress popover with progress bar and pause/cancel/retry controls",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover",
+ "progress",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-06.tsx",
+ "content": "'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport { DownloadIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { Progress } from '@/components/ui/progress'\n\nimport { cn } from '@/lib/utils'\n\nconst PopoverDownloadDemo = () => {\n const [isPaused, setIsPaused] = useState(false)\n const [isCanceled, setIsCanceled] = useState(false)\n const [value, setValue] = useState(0)\n const [open, setOpen] = useState(false)\n const [hasStarted, setHasStarted] = useState(false)\n\n useEffect(() => {\n if (open && !hasStarted && !isCanceled) {\n setHasStarted(true)\n }\n }, [open, hasStarted, isCanceled])\n\n useEffect(() => {\n if (!hasStarted || isPaused || isCanceled) return\n\n const timer = setInterval(() => {\n setValue(prev => {\n if (prev < 100) {\n return Math.min(100, prev + Math.floor(Math.random() * 10) + 1)\n } else {\n clearInterval(timer)\n\n return prev\n }\n })\n }, 500)\n\n return () => {\n clearInterval(timer)\n }\n }, [open, isPaused, isCanceled, hasStarted])\n\n const getText = () => {\n if (isCanceled) return 'Download Canceled'\n if (isPaused) return 'Download Paused'\n if (value === 100) return 'Download Complete'\n\n return 'Downloading File'\n }\n\n return (\n \n \n \n \n Download File \n \n \n \n \n
\n
\n \n \n
\n
{getText()} \n {!isCanceled &&
{`${value}%`} }\n
\n
\n
\n setIsPaused(!isPaused)} disabled={value === 100 || isCanceled}>\n {isPaused ? 'Resume' : 'Pause'}\n \n {\n if (value < 100) {\n setValue(0)\n setIsCanceled(true)\n setHasStarted(false)\n }\n\n setOpen(false)\n }}\n >\n Cancel\n \n
\n
\n \n \n )\n}\n\nexport default PopoverDownloadDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-07.json b/public/r/popover-07.json
new file mode 100644
index 0000000..2a935d9
--- /dev/null
+++ b/public/r/popover-07.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-07",
+ "type": "registry:component",
+ "title": "Popover 7",
+ "description": "A file deletion confirmation popover with warning icon and action buttons",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-07.tsx",
+ "content": "import { FileWarningIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst PopoverDeleteFileDemo = () => {\n return (\n \n \n \n \n Delete File \n \n \n \n \n
\n \n
\n
\n
Are you sure you want to delete this file?
\n
\n Deleting this file can affect your project and other files connection so keep in mind before making\n decision\n
\n
\n
\n \n Cancel\n \n \n Delete File\n \n
\n
\n \n \n )\n}\n\nexport default PopoverDeleteFileDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-08.json b/public/r/popover-08.json
new file mode 100644
index 0000000..a323fed
--- /dev/null
+++ b/public/r/popover-08.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-08",
+ "type": "registry:component",
+ "title": "Popover 8",
+ "description": "A feedback popover with textarea for user comments and send/cancel actions",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-08.tsx",
+ "content": "import { MessageCircleIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { Textarea } from '@/components/ui/textarea'\n\nconst PopoverFeedbackDemo = () => {\n return (\n \n \n \n \n Feedback \n \n \n \n \n
Feedback
\n
\n
\n Send \n \n Cancel\n \n
\n
\n \n \n )\n}\n\nexport default PopoverFeedbackDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-09.json b/public/r/popover-09.json
new file mode 100644
index 0000000..09bcb5d
--- /dev/null
+++ b/public/r/popover-09.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-09",
+ "type": "registry:component",
+ "title": "Popover 9",
+ "description": "A filter popover with checkbox options and price range slider controls",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "label",
+ "popover",
+ "slider"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-09.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { FunnelPlusIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { Slider } from '@/components/ui/slider'\n\nconst filters = ['Most liked', 'Highest reviewed', 'Newest', 'Most popular']\n\nconst PopoverFilterDemo = () => {\n const [selected, setSelected] = useState(['Most liked', 'Newest'])\n const [price, setPrice] = useState([450])\n\n return (\n \n \n \n \n Filter \n \n \n \n \n
\n Filter \n {\n setSelected(['Most liked', 'Newest'])\n setPrice([450])\n }}\n >\n Reset all\n \n
\n
\n {filters.map((label, index) => (\n
\n \n setSelected(checked ? [...selected, label] : selected.filter(item => item !== label))\n }\n />\n {label} \n
\n ))}\n
\n
\n
Price range \n
\n \n \n 0 \n 500 \n 1000 \n \n
\n
\n
\n \n \n )\n}\n\nexport default PopoverFilterDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-10.json b/public/r/popover-10.json
new file mode 100644
index 0000000..74a0d1f
--- /dev/null
+++ b/public/r/popover-10.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-10",
+ "type": "registry:component",
+ "title": "Popover 10",
+ "description": "A user search popover with debounced input, loading states, and avatar display",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "input",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-10.tsx",
+ "content": "'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport { LoaderCircleIcon, SearchIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst users = [\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n name: 'Howard Lloyd',\n fallback: 'HL',\n notifications: 3\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n name: 'Olivia Sparks',\n fallback: 'OS'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n name: 'Hallie Richards',\n fallback: 'HR',\n notifications: 1\n }\n]\n\nconst useDebounce = (value: string, delay: number = 300) => {\n const [debouncedValue, setDebouncedValue] = useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n return () => {\n clearTimeout(timer)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n\nconst PopoverSearchDemo = () => {\n const [inputValue, setInputValue] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n const debouncedSearch = useDebounce(inputValue)\n const [filteredUsers, setFilteredUsers] = useState(users)\n\n // Handle loading state when input changes\n useEffect(() => {\n if (inputValue) {\n setIsLoading(true)\n } else {\n setIsLoading(false)\n }\n }, [inputValue])\n\n // Apply filtering after debounce and update loading state\n useEffect(() => {\n if (debouncedSearch.trim() === '') {\n setFilteredUsers(users)\n setIsLoading(false)\n } else {\n const searchTerm = debouncedSearch.toLowerCase()\n\n const filtered = users.filter(user => user.name.toLowerCase().includes(searchTerm))\n\n setFilteredUsers(filtered)\n setIsLoading(false)\n }\n }, [debouncedSearch])\n\n return (\n \n \n \n \n Search users \n \n \n \n \n
\n
\n \n Search \n
\n
setInputValue(e.target.value)}\n className='peer px-9 [&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none [&::-webkit-search-results-button]:appearance-none [&::-webkit-search-results-decoration]:appearance-none'\n />\n {isLoading && (\n
\n \n Loading... \n
\n )}\n
\n
\n {filteredUsers.length > 0 ? (\n filteredUsers.map((user, index) => (\n \n \n \n {user.fallback} \n \n {user.name}
\n {user.notifications && (\n {`${user.notifications} Notification${user.notifications > 1 ? 's' : ''}`} \n )}\n \n ))\n ) : (\n No users found \n )}\n \n
\n \n \n )\n}\n\nexport default PopoverSearchDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-11.json b/public/r/popover-11.json
new file mode 100644
index 0000000..5717cd4
--- /dev/null
+++ b/public/r/popover-11.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-11",
+ "type": "registry:component",
+ "title": "Popover 11",
+ "description": "A notifications popover with unread indicators and mark-as-read functionality",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "popover",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-11.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { BellIcon, CircleIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { Separator } from '@/components/ui/separator'\n\nconst notifications = [\n {\n id: 1,\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n message: 'Harry assigned you task of New API implementation',\n fallback: 'HL',\n time: '15 Minutes'\n },\n {\n id: 2,\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n message: 'Jerry joined team',\n fallback: 'OS',\n time: '35 Minutes'\n },\n {\n id: 3,\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n message: 'Congratulate ruby for married life',\n fallback: 'HR',\n time: '3 days'\n }\n]\n\nconst PopoverNotificationsDemo = () => {\n const [readMessages, setReadMessages] = useState([3])\n\n return (\n \n \n \n \n Notifications \n \n \n \n \n
\n Notifications \n setReadMessages(notifications.map(item => item.id))}\n >\n Mark as all read\n \n
\n
\n
\n {notifications.map(item => (\n setReadMessages([...readMessages, item.id])}\n >\n \n \n {item.fallback} \n \n \n
{item.message}
\n
{`${item.time} ago`}
\n
\n {!readMessages.includes(item.id) && (\n \n )}\n \n ))}\n \n
\n \n \n )\n}\n\nexport default PopoverNotificationsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-12.json b/public/r/popover-12.json
new file mode 100644
index 0000000..11e247d
--- /dev/null
+++ b/public/r/popover-12.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-12",
+ "type": "registry:component",
+ "title": "Popover 12",
+ "description": "An informational popover with image and content layout for location details",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-12.tsx",
+ "content": "import { ChevronRightIcon, MapPinIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst PopoverAboutHimalayasDemo = () => {\n return (\n \n \n \n \n About Himalayas \n \n \n \n \n
\n
About Himalayas
\n
\n The Great Himalayan mountain ranges in the Indian sub-continent region.{' '}\n
\n
\n Read more\n \n \n
\n
\n
\n \n \n )\n}\n\nexport default PopoverAboutHimalayasDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/popover-13.json b/public/r/popover-13.json
new file mode 100644
index 0000000..2ad7a94
--- /dev/null
+++ b/public/r/popover-13.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-13",
+ "type": "registry:component",
+ "title": "Popover 13",
+ "description": "A promotional popover with QR code and coupon code with copy functionality with slide in from left animation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "popover",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-13.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CheckIcon, CopyIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { Separator } from '@/components/ui/separator'\n\nimport { cn } from '@/lib/utils'\n\nconst PopoverSlideInLeftDemo = () => {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText('SUMMER25OFF')\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n } catch (err) {\n console.error('Failed to copy text: ', err)\n }\n }\n\n return (\n \n \n Slide-in from left \n \n \n \n
\n
Summer Sale Discount
\n
Scan this code at checkout for 25% off
\n
\n
\n
\n
\n
\n \n or use coupon code \n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n )\n}\n\nexport default PopoverSlideInLeftDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-13.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/popover-14.json b/public/r/popover-14.json
new file mode 100644
index 0000000..9d6ae09
--- /dev/null
+++ b/public/r/popover-14.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-14",
+ "type": "registry:component",
+ "title": "Popover 14",
+ "description": "A team sharing popover with email input and member selection checkboxes with slide in from bottom animation",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "checkbox",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-14.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst members = [\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'HL',\n name: 'Howard Lloyd',\n designation: 'Product Manager'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-6.png',\n fallback: 'OS',\n name: 'Olivia Sparks',\n designation: 'Software Engineer'\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-5.png',\n fallback: 'HR',\n name: 'Hallie Richards',\n designation: 'UI/UX Designer'\n }\n]\n\nconst PopoverSlideInBottomDemo = () => {\n const id = useId()\n\n return (\n \n \n Slide-in from bottom \n \n \n \n
\n
Share to team members
\n
\n Give your team members access to this project and start collaborating in real time\n
\n
\n
\n
\n Email address\n \n
\n \n \n Share invite\n \n
\n
\n
\n
Team members \n
\n {members.map((member, index) => (\n \n \n \n \n
\n \n {member.fallback} \n \n
{member.name} \n
\n {member.designation} \n \n \n ))}\n \n
\n
\n \n \n )\n}\n\nexport default PopoverSlideInBottomDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-14.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/popover-15.json b/public/r/popover-15.json
new file mode 100644
index 0000000..5703632
--- /dev/null
+++ b/public/r/popover-15.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "popover-15",
+ "type": "registry:component",
+ "title": "Popover 15",
+ "description": "A user profile popover with avatar, bio, and social statistics display with zoom-in animation",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-15.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nconst PopoverZoomInDemo = () => {\n return (\n \n \n Zoom in \n \n \n \n
\n
\n \n HL \n \n
\n
Howard Lloyd
\n
@iamhoward \n
\n
\n
\n
\n Product Manager @oliviasparks, passionate about building user-centric solutions that solve real problems.\n
\n
\n
\n 512 followers \n
\n
\n 128 following \n
\n
\n
\n \n \n )\n}\n\nexport default PopoverZoomInDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-15.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/portfolio-01.json b/public/r/portfolio-01.json
new file mode 100644
index 0000000..3d5f752
--- /dev/null
+++ b/public/r/portfolio-01.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "portfolio-01",
+ "type": "registry:block",
+ "title": "Portfolio 1",
+ "description": "Portfolio showcase with masonry grid layout featuring project details, client information, and social media links",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/portfolio/portfolio-01/page.tsx",
+ "content": "import Portfolio from '@/components/shadcn-studio/blocks/portfolio-01/portfolio-01'\n\nconst images: string[] = [\n 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/portfolio/image-37.png',\n 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/portfolio/image-36.png',\n 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/portfolio/image-35.png',\n 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/portfolio/image-34.png',\n 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/portfolio/image-33.png',\n 'https://cdn.shadcnstudio.com/ss-assets/blocks/marketing/portfolio/image-32.png'\n]\n\nconst PortfolioPage = () => {\n return \n}\n\nexport default PortfolioPage\n",
+ "type": "registry:page",
+ "target": "app/portfolio-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/portfolio-01/portfolio-01.tsx",
+ "content": "import { FacebookIcon, GithubIcon, InstagramIcon, TwitterIcon } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Separator } from '@/components/ui/separator'\n\nconst Portfolio = ({ images }: { images: string[] }) => {\n return (\n \n \n {/* Section Header */}\n
\n
\n Our portfolio\n \n\n
Our Impactful Creations \n\n
\n A glimpse into our work, showcasing the power of design, technology, and strategic thinking.\n
\n
\n\n {/* Portfolio Content */}\n
\n {/* Left Section */}\n
\n {images.map((image, index) => (\n
\n
\n
\n ))}\n
\n\n {/* Right Section */}\n
\n
AI Innovations \n\n
\n Explore cutting-edge AI solutions that enhance productivity and streamline workflows across various\n industries.Our technologies empower businesses to automate repetitive tasks, allowing teams to focus on\n strategic initiatives.\n \n Join us in transforming the future of work with intelligent systems that adapt to your unique needs.\n
\n\n
\n\n
\n \n Client: \n AI Innovations \n \n \n Services: \n Machine Learning \n \n \n Year: \n 2024 \n \n \n\n
\n\n
\n
\n
\n
\n \n )\n}\n\nexport default Portfolio\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/portfolio-01/portfolio-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "portfolio"
+ }
+}
\ No newline at end of file
diff --git a/public/r/pricing-component-01.json b/public/r/pricing-component-01.json
new file mode 100644
index 0000000..c76438e
--- /dev/null
+++ b/public/r/pricing-component-01.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "pricing-component-01",
+ "type": "registry:block",
+ "title": "Pricing 1",
+ "description": "Interactive pricing cards with monthly/annual toggle switch and plan comparison features",
+ "registryDependencies": [
+ "button",
+ "card",
+ "switch",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/pricing-component/pricing-component-01/page.tsx",
+ "content": "import Pricing from '@/components/shadcn-studio/blocks/pricing-component-01/pricing-component-01'\n\nconst pricingData = [\n {\n id: 'starter',\n title: 'Starter',\n description: 'Ideal for crypto pros!',\n monthly: 99,\n annual: 999\n },\n {\n id: 'professional',\n title: 'Professional',\n description: 'Ideal for business owners.',\n monthly: 199,\n annual: 1999\n }\n]\n\nconst PricingPage = () => {\n return \n}\n\nexport default PricingPage\n",
+ "type": "registry:page",
+ "target": "app/pricing-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/pricing-component-01/pricing-component-01.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Switch } from '@/components/ui/switch'\nimport { Separator } from '@/components/ui/separator'\n\ntype PricingPlan = {\n id: string\n title: string\n description: string\n monthly: number\n annual: number\n}[]\n\nconst PricingCards = ({ pricingData }: { pricingData: PricingPlan }) => {\n const [isAnnual, setIsAnnual] = useState(false)\n\n return (\n \n \n
\n
\n
Select the Best Plan for You! \n
\n Discover Our Flexible Plans, Compare Features, and Choose \n the Ideal Option for Your Needs.\n
\n
\n\n
\n Monthly \n \n Annually \n
\n
\n
\n {pricingData.map(plan => {\n const price = isAnnual ? plan.annual : plan.monthly\n const period = isAnnual ? 'year' : 'month'\n const savings = isAnnual ? plan.monthly * 12 - plan.annual : null\n\n return (\n
\n \n \n
\n
{plan.title} \n
{plan.description}
\n
\n
\n
\n ${price} \n /{period} \n
\n {savings && (\n
\n Save ${savings.toLocaleString()}/year\n \n )}\n
\n
Enterprise \n
\n\n \n\n \n
\n
\n ${price} \n /{period} \n
\n {savings && (\n
\n Save ${savings.toLocaleString()}/year\n \n )}\n
\n
\n \n \n )\n })}\n
\n
\n \n )\n}\n\nexport default PricingCards\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/pricing-component-01/pricing-component-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "pricing-component"
+ }
+}
\ No newline at end of file
diff --git a/public/r/product-list-01.json b/public/r/product-list-01.json
new file mode 100644
index 0000000..080d635
--- /dev/null
+++ b/public/r/product-list-01.json
@@ -0,0 +1,36 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "product-list-01",
+ "type": "registry:block",
+ "title": "Product List 1",
+ "description": "Three-column grid layout with product cards featuring centered images, product names with badges, separator lines, pricing with sale discounts, wishlist checkboxes and shopping cart icons",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "card",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/ecommerce/product-list/product-list-01/page.tsx",
+ "content": "import ProductList from '@/components/shadcn-studio/blocks/product-list-01/product-list-01'\n\nconst productList = [\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/blocks/ecommerce/product-list/image-6.png',\n imgAlt: 'Samsung Galaxy Watch 6',\n name: 'Samsung Galaxy Watch 6 Classic',\n price: 129,\n badges: ['Watch', 'Samsung']\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/blocks/ecommerce/product-list/image-5.png',\n imgAlt: 'Samsung Galaxy Watch 7',\n name: 'Samsung Galaxy Watch 7',\n price: 229,\n salePrice: 139,\n badges: ['Watch', 'Samsung']\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/blocks/ecommerce/product-list/image-4.png',\n imgAlt: 'Samsung Galaxy Watch Ultra',\n name: 'Samsung Galaxy Watch Ultra',\n price: 119,\n badges: ['Watch', 'Samsung']\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/blocks/ecommerce/product-list/image-3.png',\n imgAlt: 'Samsung Galaxy Watch 7',\n name: 'Samsung Galaxy Watch 7',\n price: 129,\n badges: ['Watch', 'Samsung']\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/blocks/ecommerce/product-list/image-2.png',\n imgAlt: 'Spigen Rugged Armor Pro',\n name: 'Spigen Rugged Armor Pro',\n price: 239,\n badges: ['Watch', 'Spigen']\n },\n {\n image: 'https://cdn.shadcnstudio.com/ss-assets/blocks/ecommerce/product-list/image-1.png',\n imgAlt: 'Mosmoc Rugged No Gap',\n name: 'Mosmoc Rugged No Gap',\n price: 149,\n badges: ['Watch', 'Samsung']\n }\n]\n\nconst ProductListPage = () => {\n return \n}\n\nexport default ProductListPage\n",
+ "type": "registry:page",
+ "target": "app/product-list-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/product-list-01/product-list-01.tsx",
+ "content": "import { HeartIcon, ShoppingCartIcon } from 'lucide-react'\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Separator } from '@/components/ui/separator'\n\nimport { cn } from '@/lib/utils'\n\nexport type ProductItem = {\n image: string\n imgAlt: string\n name: string\n price: number\n salePrice?: number\n badges: string[]\n}\n\ntype ProductProps = {\n products: ProductItem[]\n}\n\nconst ProductList = ({ products }: ProductProps) => {\n return (\n \n \n
\n
Samsung watch
\n
All New Collection \n
\n\n
\n {/* Product Cards */}\n {products.map((product, index) => (\n
\n {/* Sale Badge */}\n {product.salePrice && (\n \n Sale\n \n )}\n\n \n {/* Product Image */}\n \n \n \n\n {/* Product Details */}\n \n
\n\n
\n\n {/* Product Price */}\n
\n {!product.salePrice &&
${product.price.toFixed(2)} }\n {product.salePrice && (\n
\n ${product.salePrice.toFixed(2)} \n \n ${product.price.toFixed(2)}\n \n
\n )}\n\n
\n \n \n \n \n \n \n \n \n\n \n \n \n
\n
\n
\n \n \n ))}\n
\n
\n \n )\n}\n\nexport default ProductList\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/product-list-01/product-list-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "ecommerce",
+ "section": "product-list"
+ }
+}
\ No newline at end of file
diff --git a/public/r/radio-group-01.json b/public/r/radio-group-01.json
new file mode 100644
index 0000000..f3d5644
--- /dev/null
+++ b/public/r/radio-group-01.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-01",
+ "type": "registry:component",
+ "title": "Radio Group 1",
+ "description": "A basic vertical radio group",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-01.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupDemo = () => {\n return (\n \n \n \n Higher Secondary \n
\n \n \n Graduation \n
\n \n \n Post Graduation \n
\n \n )\n}\n\nexport default RadioGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-02.json b/public/r/radio-group-02.json
new file mode 100644
index 0000000..35ff80e
--- /dev/null
+++ b/public/r/radio-group-02.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-02",
+ "type": "registry:component",
+ "title": "Radio Group 2",
+ "description": "A horizontal radio group layout",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-02.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupHorizontalDemo = () => {\n return (\n \n \n \n Beginner \n
\n \n \n Intermediate \n
\n \n \n Advanced \n
\n \n )\n}\n\nexport default RadioGroupHorizontalDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-03.json b/public/r/radio-group-03.json
new file mode 100644
index 0000000..92aab98
--- /dev/null
+++ b/public/r/radio-group-03.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-03",
+ "type": "registry:component",
+ "title": "Radio Group 3",
+ "description": "A colored radio group with custom styling for different states",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-03.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupColorsDemo = () => {\n return (\n \n \n \n Destructive \n
\n \n \n Success \n
\n \n \n Info \n
\n \n )\n}\n\nexport default RadioGroupColorsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-04.json b/public/r/radio-group-04.json
new file mode 100644
index 0000000..b1b0a05
--- /dev/null
+++ b/public/r/radio-group-04.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-04",
+ "type": "registry:component",
+ "title": "Radio Group 4",
+ "description": "A radio group with different sizes for various display options",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-04.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupSizesDemo = () => {\n return (\n \n \n \n Default \n
\n \n \n Medium \n
\n \n \n Large \n
\n \n )\n}\n\nexport default RadioGroupSizesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-05.json b/public/r/radio-group-05.json
new file mode 100644
index 0000000..58f0a87
--- /dev/null
+++ b/public/r/radio-group-05.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-05",
+ "type": "registry:component",
+ "title": "Radio Group 5",
+ "description": "A radio group with dashed borders",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-05.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupDashedDemo = () => {\n return (\n \n \n \n Standard Shipping \n
\n \n \n Express Delivery \n
\n \n \n Overnight Shipping \n
\n \n )\n}\n\nexport default RadioGroupDashedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-06.json b/public/r/radio-group-06.json
new file mode 100644
index 0000000..55d52f0
--- /dev/null
+++ b/public/r/radio-group-06.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-06",
+ "type": "registry:component",
+ "title": "Radio Group 6",
+ "description": "A radio group with solid filled styling for theme selection",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-06.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupSolidDemo = () => {\n return (\n \n \n \n Light Theme \n
\n \n \n Dark Theme \n
\n \n \n System Default \n
\n \n )\n}\n\nexport default RadioGroupSolidDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-07.json b/public/r/radio-group-07.json
new file mode 100644
index 0000000..7e92aa6
--- /dev/null
+++ b/public/r/radio-group-07.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-07",
+ "type": "registry:component",
+ "title": "Radio Group 7",
+ "description": "A radio group with descriptions for detailed plan selection options",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-07.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupDescriptionDemo = () => {\n return (\n \n \n
\n
\n
Basic Plan \n
Perfect for individuals just getting started
\n
\n
\n \n
\n
\n
Pro Plan \n
Advanced features for power users and small teams
\n
\n
\n \n
\n
\n
Enterprise Plan \n
Custom solutions for large organizations
\n
\n
\n \n )\n}\n\nexport default RadioGroupDescriptionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-08.json b/public/r/radio-group-08.json
new file mode 100644
index 0000000..2caa1f9
--- /dev/null
+++ b/public/r/radio-group-08.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-08",
+ "type": "registry:component",
+ "title": "Radio Group 8",
+ "description": "A chip-style radio group with grid layout for size selection",
+ "registryDependencies": [
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-08.tsx",
+ "content": "import { useId } from 'react'\n\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupChipDemo = () => {\n const id = useId()\n\n const items = [\n { value: '1', label: 'Size: 6 (UK)' },\n { value: '2', label: 'Size: 7 (UK)', disabled: true },\n { value: '3', label: 'Size: 8 (UK)' },\n { value: '4', label: 'Size: 9 (UK)' },\n { value: '5', label: 'Size: 10 (UK)' }\n ]\n\n return (\n \n Select Shoe Size: \n \n {items.map(item => (\n \n \n {item.label}
\n \n ))}\n \n \n )\n}\n\nexport default RadioGroupChipDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-09.json b/public/r/radio-group-09.json
new file mode 100644
index 0000000..32ae29f
--- /dev/null
+++ b/public/r/radio-group-09.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-09",
+ "type": "registry:component",
+ "title": "Radio Group 9",
+ "description": "A list-style radio group with pricing and badges for plan selection",
+ "registryDependencies": [
+ "badge",
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-09.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupListGroupDemo = () => {\n const id = useId()\n\n const items = [\n { value: '1', label: 'Pro', price: '$39/mo' },\n { value: '2', label: 'Team', price: '$69/mo' },\n { value: '3', label: 'Enterprise', price: 'Custom' }\n ]\n\n return (\n \n {items.map(item => (\n \n
\n
\n \n \n {item.label}\n {item.value === '2' && Best Seller }\n \n
\n
\n {item.price}\n
\n
\n
\n ))}\n \n )\n}\n\nexport default RadioGroupListGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-10.json b/public/r/radio-group-10.json
new file mode 100644
index 0000000..d839325
--- /dev/null
+++ b/public/r/radio-group-10.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-10",
+ "type": "registry:component",
+ "title": "Radio Group 10",
+ "description": "A split-list radio group with highlighted selected state and pricing",
+ "registryDependencies": [
+ "badge",
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-10.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupSplitListGroupDemo = () => {\n const id = useId()\n\n const items = [\n { value: '1', label: 'Pro', price: '$39/mo' },\n { value: '2', label: 'Team', price: '$69/mo' },\n { value: '3', label: 'Enterprise', price: 'Custom' }\n ]\n\n return (\n \n {items.map(item => (\n \n
\n
\n \n \n {item.label}\n {item.value === '2' && (\n \n Best Seller\n \n )}\n \n
\n
\n {item.price}\n
\n
\n
\n ))}\n \n )\n}\n\nexport default RadioGroupSplitListGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-11.json b/public/r/radio-group-11.json
new file mode 100644
index 0000000..eba04de
--- /dev/null
+++ b/public/r/radio-group-11.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-11",
+ "type": "registry:component",
+ "title": "Radio Group 11",
+ "description": "A card-style radio group with detailed descriptions and pricing",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-11.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupCardRadioDemo = () => {\n const id = useId()\n\n return (\n \n \n
\n
\n
\n Basic Free \n \n
\n Get 1 project with 1 teams members.\n
\n
\n
\n\n \n
\n
\n
\n Premium $5.00 \n \n
\n Get 5 projects with 5 team members.\n
\n
\n
\n \n )\n}\n\nexport default RadioGroupCardRadioDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-12.json b/public/r/radio-group-12.json
new file mode 100644
index 0000000..b0a6884
--- /dev/null
+++ b/public/r/radio-group-12.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-12",
+ "type": "registry:component",
+ "title": "Radio Group 12",
+ "description": "A border less card radio group with hidden radio buttons and label-based selection",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-12.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupCardRadioWithBorderDemo = () => {\n const id = useId()\n\n return (\n \n \n
\n\n
\n \n Basic \n Free \n
\n \n Get 1 project with 1 teams members.\n
\n \n
\n\n \n
\n\n
\n \n Premium \n $5.00 \n
\n \n Get 5 projects with 5 team members.\n
\n \n
\n \n )\n}\n\nexport default RadioGroupCardRadioWithBorderDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-13.json b/public/r/radio-group-13.json
new file mode 100644
index 0000000..ed7b3a2
--- /dev/null
+++ b/public/r/radio-group-13.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-13",
+ "type": "registry:component",
+ "title": "Radio Group 13",
+ "description": "A vertical card radio group with icons and centered layout for plan selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-13.tsx",
+ "content": "import { useId } from 'react'\n\nimport { UserIcon, CrownIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'\n\nconst RadioGroupCardVerticalRadioDemo = () => {\n const id = useId()\n\n return (\n \n \n
\n
\n
\n
\n Basic\n \n
\n Get 1 project with 1 teams members.\n
\n
\n
\n \n
\n
\n
\n
\n Premium\n \n
\n Get 5 projects with 5 team members.\n
\n
\n
\n \n )\n}\n\nexport default RadioGroupCardVerticalRadioDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio-group-14.json b/public/r/radio-group-14.json
new file mode 100644
index 0000000..9c6800e
--- /dev/null
+++ b/public/r/radio-group-14.json
@@ -0,0 +1,33 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-14",
+ "type": "registry:component",
+ "title": "Radio Group 14",
+ "description": "An animated radio group with motion effects for notification preferences",
+ "dependencies": [
+ "@radix-ui/react-radio-group",
+ "lucide-react",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-14.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/motion-radio-group'\n\nconst RadioGroupAnimatedDemo = () => {\n return (\n \n \n \n Real-time \n
\n \n \n Daily Digest \n
\n \n \n No Notifications \n
\n \n )\n}\n\nexport default RadioGroupAnimatedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-14.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-radio-group.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\nimport { AnimatePresence, motion, type HTMLMotionProps, type Transition } from 'motion/react'\nimport { CircleIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\ntype RadioGroupItemProps = React.ComponentProps &\n HTMLMotionProps<'button'> & {\n transition?: Transition\n }\n\nfunction RadioGroup({ className, ...props }: React.ComponentProps) {\n return \n}\n\nfunction RadioGroupItem({\n className,\n transition = { type: 'spring', stiffness: 200, damping: 16 },\n ...props\n}: RadioGroupItemProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n",
+ "type": "registry:ui",
+ "target": "components/ui/motion-radio-group.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/radio-group-15.json b/public/r/radio-group-15.json
new file mode 100644
index 0000000..bbb1407
--- /dev/null
+++ b/public/r/radio-group-15.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio-group-15",
+ "type": "registry:component",
+ "title": "Radio Group 15",
+ "description": "An animated inset radio group with smooth transitions for language selection",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-15.tsx",
+ "content": "import { CircleIcon } from 'lucide-react'\n\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\n\nimport { Label } from '@/components/ui/label'\n\nconst RadioGroupAnimatedInsetDemo = () => {\n return (\n \n \n \n \n \n English \n
\n \n \n \n \n Español \n
\n \n \n \n \n Français \n
\n \n )\n}\n\nexport default RadioGroupAnimatedInsetDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-15.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/register-01.json b/public/r/register-01.json
new file mode 100644
index 0000000..822484c
--- /dev/null
+++ b/public/r/register-01.json
@@ -0,0 +1,61 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "register-01",
+ "type": "registry:block",
+ "title": "Register 1",
+ "description": "Centered card layout with logo header, registration form featuring full name, email, password inputs, social signup options, and account linking for comprehensive user onboarding",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card",
+ "checkbox",
+ "input",
+ "label",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/register/register-01/page.tsx",
+ "content": "import Register from '@/components/shadcn-studio/blocks/register-01/register-01'\n\nconst RegisterPage = () => {\n return \n}\n\nexport default RegisterPage\n",
+ "type": "registry:page",
+ "target": "app/register-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst AuthBackgroundShape = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n )\n}\n\nexport default AuthBackgroundShape\n",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst Logo = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/register-01/register-01.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Separator } from '@/components/ui/separator'\n\nimport Logo from '@/components/layout/logo'\nimport AuthBackgroundShape from '@/assets/svg/auth-background-shape'\nimport RegisterForm from '@/components/shadcn-studio/blocks/register-01/register-form'\n\nconst Register = () => {\n return (\n \n
\n\n
\n \n \n\n \n Sign Up to Shadcn studio \n Ship Faster and Focus on Growth. \n
\n \n\n \n {/* Register Form */}\n \n \n \n
\n )\n}\n\nexport default Register\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/register-01/register-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/register-01/register-form.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst RegisterForm = () => {\n const [isPasswordVisible, setIsPasswordVisible] = useState(false)\n const [isConfirmPasswordVisible, setIsConfirmPasswordVisible] = useState(false)\n\n return (\n e.preventDefault()}>\n {/* Username */}\n \n \n Username*\n \n \n
\n\n {/* Email */}\n \n \n Email address*\n \n \n
\n\n {/* Password */}\n \n
\n Password*\n \n
\n \n setIsPasswordVisible(prevState => !prevState)}\n className='text-muted-foreground focus-visible:ring-ring/50 absolute inset-y-0 right-0 rounded-l-none hover:bg-transparent'\n >\n {isPasswordVisible ? : }\n {isPasswordVisible ? 'Hide password' : 'Show password'} \n \n
\n
\n\n {/* Confirm Password */}\n \n
\n Confirm Password*\n \n
\n \n setIsConfirmPasswordVisible(prevState => !prevState)}\n className='text-muted-foreground focus-visible:ring-ring/50 absolute inset-y-0 right-0 rounded-l-none hover:bg-transparent'\n >\n {isConfirmPasswordVisible ? : }\n {isConfirmPasswordVisible ? 'Hide password' : 'Show password'} \n \n
\n
\n\n {/* Privacy policy */}\n \n\n \n Sign Up to Shadcn Studio\n \n \n )\n}\n\nexport default RegisterForm\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/register-01/register-form.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "content": "// SVG Imports\nimport LogoSvg from '@/assets/svg/logo'\n\n// Util Imports\nimport { cn } from '@/lib/utils'\n\nconst Logo = ({ className }: { className?: string }) => {\n return (\n \n \n shadcn/studio \n
\n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "register"
+ }
+}
\ No newline at end of file
diff --git a/public/r/registry.json b/public/r/registry.json
new file mode 100644
index 0000000..753f8df
--- /dev/null
+++ b/public/r/registry.json
@@ -0,0 +1,15653 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry.json",
+ "name": "shadcn/studio",
+ "homepage": "https://shadcnstudio.com",
+ "items": [
+ {
+ "name": "accordion-01",
+ "title": "Accordion 1",
+ "description": "Basic accordion with default styling and collapsible FAQ items.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-02",
+ "title": "Accordion 2",
+ "description": "Card-style accordion with separated items, shadow effects, and rotated chevron icons.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-03",
+ "title": "Accordion 3",
+ "description": "Icon-enhanced accordion with category icons displayed before each item title.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-04",
+ "title": "Accordion 4",
+ "description": "Plus/minus icon accordion with animated icon transitions for expand/collapse states.",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-05",
+ "title": "Accordion 5",
+ "description": "Active state accordion with amber highlighting for expanded items and borders.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-06",
+ "title": "Accordion 6",
+ "description": "Icon and expand indicator accordion with category icons and plus icon for expand/collapse.",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-07",
+ "title": "Accordion 7",
+ "description": "Avatar-based accordion displaying user profiles with avatar images, names, and email addresses.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "accordion",
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-08",
+ "title": "Accordion 8",
+ "description": "Enhanced icon accordion with circular icon containers and subtitle descriptions for each item.",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-09",
+ "title": "Accordion 9",
+ "description": "Outline-style accordion with bordered items and spacing between each accordion item.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-10",
+ "title": "Accordion 10",
+ "description": "Box-style accordion with unified border container around all accordion items.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-11",
+ "title": "Accordion 11",
+ "description": "Tab-style accordion with accent background highlighting for expanded items.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-12",
+ "title": "Accordion 12",
+ "description": "Tab with outline accordion featuring bordered highlighting and shadow effects for expanded items.",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-13",
+ "title": "Accordion 13",
+ "description": "Media content accordion with category icons and embedded images in accordion content.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-14",
+ "title": "Accordion 14",
+ "description": "Filled header accordion with accent background triggers and separated content sections.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-15",
+ "title": "Accordion 15",
+ "description": "Multi-level accordion with nested collapsible sections for hierarchical FAQ organization.",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-accordion",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion-16",
+ "title": "Accordion 16",
+ "description": "Simplified multi-level accordion with plus/minus icons for nested FAQ categories and questions.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "accordion",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/accordion/accordion-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/accordion/accordion-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-01",
+ "title": "Alert 1",
+ "description": "Basic alert with circle alert icon and simple title message.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-02",
+ "title": "Alert 2",
+ "description": "Avatar-enhanced alert with user profile image, and alert icon.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-03",
+ "title": "Alert 3",
+ "description": "Closable alert with dismiss functionality using X icon and state management.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-04",
+ "title": "Alert 4",
+ "description": "Interactive alert with link button featuring arrow icon and styled border/text colors.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-05",
+ "title": "Alert 5",
+ "description": "Attached icon alert with separated icon section and destructive warning styling.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-06",
+ "title": "Alert 6",
+ "description": "Focused icon alert with avatar-wrapped warning icon and destructive background styling.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-07",
+ "title": "Alert 7",
+ "description": "File upload progress alert with animated progress bar, action buttons, and close functionality.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-08",
+ "title": "Alert 8",
+ "description": "Multi-action alert with primary background, multiple buttons, and dismissible interface.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-09",
+ "title": "Alert 9",
+ "description": "Task progress alert with user avatar, progress indicator, and task completion tracking.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "avatar",
+ "progress"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-10",
+ "title": "Alert 10",
+ "description": "Gradient background alert with email verification message and gradient styling.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "progress"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-11",
+ "title": "Alert 11",
+ "description": "Success indicator alert with left border highlight and green success styling.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-12",
+ "title": "Alert 12",
+ "description": "Information/error indicator alert with destructive background styling and informational content.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-13",
+ "title": "Alert 13",
+ "description": "displaying a minimal \"New message!\" notification with an attention icon and an actionable \"Open\" button",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-14",
+ "title": "Alert 14",
+ "description": "Error indicator alert with red styling and destructive error message.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-15",
+ "title": "Alert 15",
+ "description": "Pure destructive alert using built-in destructive variant with error styling.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-16",
+ "title": "Alert 16",
+ "description": "Minimal alert without icon displaying simple message text only.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-17",
+ "title": "Alert 17",
+ "description": "Standard alert with both title and description text providing detailed information.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-18",
+ "title": "Alert 18",
+ "description": "Outline info alert with blue border and text styling for informational messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-19",
+ "title": "Alert 19",
+ "description": "Outline success alert with green border and text for success messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-20",
+ "title": "Alert 20",
+ "description": "Outline warning alert with amber border and text for warning messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-21",
+ "title": "Alert 21",
+ "description": "Soft primary alert with subtle background and text styling for secondary messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-22",
+ "title": "Alert 22",
+ "description": "Soft info alert with blue background and subtle styling for information.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-22.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-22.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-23",
+ "title": "Alert 23",
+ "description": "Soft success alert with green background and subtle styling for success messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-23.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-23.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-24",
+ "title": "Alert 24",
+ "description": "Soft warning alert with amber background and subtle styling for warnings.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-24.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-24.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-25",
+ "title": "Alert 25",
+ "description": "Soft destructive alert with red background and subtle styling for errors.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-25.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-25.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-26",
+ "title": "Alert 26",
+ "description": "Solid info alert with full primary background for prominent informational messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-26.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-26.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-27",
+ "title": "Alert 27",
+ "description": "Solid success alert with full green background for prominent success messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-27.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-27.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-28",
+ "title": "Alert 28",
+ "description": "Solid warning alert with full amber background for prominent warning messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-28.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-28.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-29",
+ "title": "Alert 29",
+ "description": "Solid info alert with full blue background for prominent informational messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-29.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-29.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-30",
+ "title": "Alert 30",
+ "description": "Solid destructive alert with full red background for prominent error messages.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/alert/alert-30.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/alert/alert-30.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-01",
+ "title": "Avatar 1",
+ "description": "Basic avatar with profile image and fallback initials.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-02",
+ "title": "Avatar 2",
+ "description": "Avatar with ring border highlighting for active or selected states.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-03",
+ "title": "Avatar 3",
+ "description": "Small sized avatar variant with compact dimensions.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-04",
+ "title": "Avatar 4",
+ "description": "Large sized avatar variant with expanded dimensions.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-05",
+ "title": "Avatar 5",
+ "description": "Circular avatar with fallback initials.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-06",
+ "title": "Avatar 6",
+ "description": "Icon avatar using Lucide icon with colored background.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-07",
+ "title": "Avatar 7",
+ "description": "Status avatar with busy indicator showing red status dot.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-08",
+ "title": "Avatar 8",
+ "description": "Status avatar with online indicator showing green status dot.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-09",
+ "title": "Avatar 9",
+ "description": "Status avatar with away indicator showing amber status dot for absent/away state.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-10",
+ "title": "Avatar 10",
+ "description": "Avatar with plus icon overlay for adding or editing profile functionality.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-11",
+ "title": "Avatar 11",
+ "description": "Avatar with notification badge showing count number for alerts and messages.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-12",
+ "title": "Avatar 12",
+ "description": "Avatar with verified badge showing check mark icon for verified accounts.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-13",
+ "title": "Avatar 13",
+ "description": "Avatar group displaying multiple overlapping users with ring borders.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-14",
+ "title": "Avatar 14",
+ "description": "Avatar group with count indicator showing additional users (+9) in overflow.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-15",
+ "title": "Avatar 15",
+ "description": "Large-sized avatar group with bigger dimensions for prominent display.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-16",
+ "title": "Avatar 16",
+ "description": "Avatar group with tooltip hover effects and elevation animation.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-17",
+ "title": "Avatar 17",
+ "description": "Avatar group with smooth spacing transition on hover interaction.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-18",
+ "title": "Avatar 18",
+ "description": "Avatar group with tooltip transitions and hover spacing effects.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-19",
+ "title": "Avatar 19",
+ "description": "Avatar group with dropdown menu showing additional users and actions.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-20",
+ "title": "Avatar 20",
+ "description": "Avatar group with outlined container and background styling.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar-21",
+ "title": "Avatar 21",
+ "description": "Avatar group with popularity indicator styling and text showcasing community trust.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/avatar/avatar-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/avatar/avatar-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-01",
+ "title": "Badge 1",
+ "description": "Default badge demonstrating basic styling with standard text display",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-02",
+ "title": "Badge 2",
+ "description": "Secondary variant badge with muted styling for less prominent labels",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-03",
+ "title": "Badge 3",
+ "description": "Destructive variant badge with red styling for error or warning states",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-04",
+ "title": "Badge 4",
+ "description": "Outline variant badge with bordered styling for subtle emphasis",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-05",
+ "title": "Badge 5",
+ "description": "Dot indicator badge with colored circle for compact status representation",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-06",
+ "title": "Badge 6",
+ "description": "Rounded badge with full border radius for pill-shaped appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-07",
+ "title": "Badge 7",
+ "description": "Number badge with circular design for count and notification displays",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-08",
+ "title": "Badge 8",
+ "description": "Large size badge with increased padding for prominence",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-09",
+ "title": "Badge 9",
+ "description": "Small size badge with reduced padding for compact display areas",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-10",
+ "title": "Badge 10",
+ "description": "Badge with icon integration for enhanced visual context",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-11",
+ "title": "Badge 11",
+ "description": "Link badge that can be used as clickable navigation element",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-12",
+ "title": "Badge 12",
+ "description": "Closable badge with X button for dismissible notifications",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-13",
+ "title": "Badge 13",
+ "description": "Selectable badge with checkbox functionality for interactive selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "checkbox"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-14",
+ "title": "Badge 14",
+ "description": "Gradient styled badge with vibrant indigo-to-pink color transition",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-15",
+ "title": "Badge 15",
+ "description": "Gradient outline badge with bordered gradient effect",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-16",
+ "title": "Badge 16",
+ "description": "In-progress status badge with amber color and dot indicator",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-17",
+ "title": "Badge 17",
+ "description": "Blocked status badge with destructive color and dot indicator",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-18",
+ "title": "Badge 18",
+ "description": "Completed status badge with green color and dot indicator",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-19",
+ "title": "Badge 19",
+ "description": "Pending status badge with amber outline and alert icon",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-20",
+ "title": "Badge 20",
+ "description": "Failed status badge with destructive outline and ban icon",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-21",
+ "title": "Badge 21",
+ "description": "Successful status badge with green outline and check icon",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-22",
+ "title": "Badge 22",
+ "description": "Avatar badge combining user profile image with label text",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-22.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-22.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-23",
+ "title": "Badge 23",
+ "description": "Cart notification badge with count display over shopping icon",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "badge"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-23.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-23.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge-24",
+ "title": "Badge 24",
+ "description": "Online status indicator badge with green dot over avatar",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/badge/badge-24.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/badge/badge-24.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb-01",
+ "title": "Breadcrumb 1",
+ "description": "Basic breadcrumb navigation with standard separators for page hierarchy",
+ "type": "registry:component",
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb-02",
+ "title": "Breadcrumb 2",
+ "description": "Breadcrumb with home icon and slash separators for enhanced navigation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb-03",
+ "title": "Breadcrumb 3",
+ "description": "Breadcrumb with folder icons and chevron separators for file system navigation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb-04",
+ "title": "Breadcrumb 4",
+ "description": "Breadcrumb with dot icon separators for minimal visual hierarchy",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb-05",
+ "title": "Breadcrumb 5",
+ "description": "Breadcrumb styled with outlined badge components for modern tab-like appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge",
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb-06",
+ "title": "Breadcrumb 6",
+ "description": "Breadcrumb with dropdown menu integration for compact nested navigation and outlined badge components for modern tab-like appearance",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "breadcrumb",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb-07",
+ "title": "Breadcrumb 7",
+ "description": "Interactive breadcrumb with folder state icons and dropdown functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb-08",
+ "title": "Breadcrumb 8",
+ "description": "Outlined breadcrumb with bordered container styling for defined boundaries",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "breadcrumb"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/breadcrumb/breadcrumb-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/breadcrumb/breadcrumb-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-01",
+ "title": "Button 1",
+ "description": "A basic button component with default styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-02",
+ "title": "Button 2",
+ "description": "A button component in disabled state",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-03",
+ "title": "Button 3",
+ "description": "A rounded button with icon and text content",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-04",
+ "title": "Button 4",
+ "description": "A button with animated icon that moves on hover",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-05",
+ "title": "Button 5",
+ "description": "Outline buttons with icons positioned before and after text",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-06",
+ "title": "Button 6",
+ "description": "Grouped action buttons for Cancel and Save operations",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-07",
+ "title": "Button 7",
+ "description": "A button component with large size variant",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-08",
+ "title": "Button 8",
+ "description": "A button component with small size variant",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-09",
+ "title": "Button 9",
+ "description": "A button component with custom extra small sizing",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-10",
+ "title": "Button 10",
+ "description": "A destructive button with gradient background for delete actions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-11",
+ "title": "Button 11",
+ "description": "A Primary Button with gradient background effect for primary action",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-12",
+ "title": "Button 12",
+ "description": "Upgrade button with amber gradient and icon",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-13",
+ "title": "Button 13",
+ "description": "Outline button with sky blue theme for duplicate action",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-14",
+ "title": "Button 14",
+ "description": "Outline button with dashed border for download action",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-15",
+ "title": "Button 15",
+ "description": "Destructive outline button for discard/delete actions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-16",
+ "title": "Button 16",
+ "description": "Ghost button with animated arrow on hover",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-17",
+ "title": "Button 17",
+ "description": "Loading button with spinning icon in disabled state",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-18",
+ "title": "Button 18",
+ "description": "Link button with animated underline effect on hover",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-19",
+ "title": "Button 19",
+ "description": "Publish button with circular icon badge and rounded outline styling",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-20",
+ "title": "Button 20",
+ "description": "Copy button UI displaying a truncated URL with a rounded \"Copy\" icon for quick copying.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-21",
+ "title": "Button 21",
+ "description": "Button with badge indicator showing unread message count",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-22",
+ "title": "Button 22",
+ "description": "caution button with a warning icon and soft amber styling to indicate alerts or risks.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-22.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-22.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-23",
+ "title": "Button 23",
+ "description": "Save button with a floppy disk icon and soft blue background for non-intrusive actions.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-23.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-23.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-24",
+ "title": "Button 24",
+ "description": "Action buttons styled for “Reject” and “Approve” with colored shield icons to indicate decision-based actions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-24.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-24.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-25",
+ "title": "Button 25",
+ "description": "Notifications button with bell icon and red notification badge counter",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-25.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-25.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-26",
+ "title": "Button 26",
+ "description": "Promise-based button with loading spinner and success/error state transitions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-26.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-26.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-27",
+ "title": "Button 27",
+ "description": "User profile button with avatar image and username display",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-27.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-27.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-28",
+ "title": "Button 28",
+ "description": "Copy button with state transition animation between copy and check icons",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-28.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-28.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-29",
+ "title": "Button 29",
+ "description": "Social media icon buttons for Google, X/Twitter, Facebook, and GitHub",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-29.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-29.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-30",
+ "title": "Button 30",
+ "description": "Social authentication buttons with branded colors and \"Continue with\" text",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-30.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-30.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-31",
+ "title": "Button 31",
+ "description": "Icon-only button with bookmark icon and screen reader accessibility",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-31.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-31.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-32",
+ "title": "Button 32",
+ "description": "Circular icon button with plus icon and tooltip for enhanced UX",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-32.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-32.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-33",
+ "title": "Button 33",
+ "description": "Toggle icon button that switches between menu and close icons",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-33.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-33.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-34",
+ "title": "Button 34",
+ "description": "Theme toggle button switching between sun and moon icons with colored styling",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-34.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-34.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-35",
+ "title": "Button 35",
+ "description": "Mail icon button with notification badge counter for unread messages",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-35.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-35.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-36",
+ "title": "Button 36",
+ "description": "Security icon button with destructive gradient background effect",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-36.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-36.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-37",
+ "title": "Button 37",
+ "description": "Success icon button with soft green background and check icon",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-37.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-37.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-38",
+ "title": "Button 38",
+ "description": "Notification icon button with animated blue dot indicator",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-38.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-38.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-39",
+ "title": "Button 39",
+ "description": "Animated button with ripple effect on click",
+ "type": "registry:component",
+ "dependencies": [
+ "class-variance-authority",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-39.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-39.tsx"
+ },
+ {
+ "path": "src/components/ui/ripple-button.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/ripple-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-40",
+ "title": "Button 40",
+ "description": "Button with ring hover effect that shows animated border on hover",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-40.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-40.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-41",
+ "title": "Button 41",
+ "description": "Button with shine hover effect using gradient animation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-41.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-41.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-42",
+ "title": "Button 42",
+ "description": "Button with tap scale animation using Framer Motion",
+ "type": "registry:component",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-42.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-42.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-43",
+ "title": "Button 43",
+ "description": "Button with shimmer effect animation across the surface",
+ "type": "registry:component",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-43.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-43.tsx"
+ },
+ {
+ "path": "src/components/ui/shimmer-button.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/shimmer-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-44",
+ "title": "Button 44",
+ "description": "Button with bounce hover effect on mouse interaction",
+ "type": "registry:component",
+ "dependencies": [
+ "class-variance-authority",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-44.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-44.tsx"
+ },
+ {
+ "path": "src/components/ui/bounce-button.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/bounce-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-45",
+ "title": "Button 45",
+ "description": "Button with magnetic effect that follows mouse movement",
+ "type": "registry:component",
+ "dependencies": [
+ "class-variance-authority",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-45.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-45.tsx"
+ },
+ {
+ "path": "src/components/ui/magnetic-button.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/magnetic-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-46",
+ "title": "Button 46",
+ "description": "Destructive button with heartbeat pulse animation effect",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-46.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-46.tsx"
+ }
+ ],
+ "cssVars": {
+ "theme": {
+ "animate-heartbeat": "heartbeat 2s infinite ease-in-out"
+ }
+ },
+ "css": {
+ "@keyframes heartbeat": {
+ "0%": {
+ "box-shadow": "0 0 0 0 var(--heartbeat-color, var(--destructive))",
+ "transform": "scale(1)"
+ },
+ "50%": {
+ "box-shadow": "0 0 0 7px transparent",
+ "transform": "scale(1.05)"
+ },
+ "100%": {
+ "box-shadow": "0 0 0 0 transparent",
+ "transform": "scale(1)"
+ }
+ }
+ },
+ "meta": {
+ "isAnimated": true,
+ "badge": "Updated"
+ }
+ },
+ {
+ "name": "button-47",
+ "title": "Button 47",
+ "description": "Button with stitched border design using layered shadow effects",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button/button-47.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button/button-47.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-group-01",
+ "title": "Button Group 1",
+ "description": "Download button group with action button and download count display",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-02",
+ "title": "Button Group 2",
+ "description": "Interactive like button group with toggle state and dynamic count",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-03",
+ "title": "Button Group 3",
+ "description": "Toolbar button group with tooltips for design tools and actions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-04",
+ "title": "Button Group 4",
+ "description": "Rounded media control button group with play, pause, and skip functions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-05",
+ "title": "Button Group 5",
+ "description": "Social media links button group with branded colors and hover effects",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-06",
+ "title": "Button Group 6",
+ "description": "Zoom control button group with increment/decrement and percentage display",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-07",
+ "title": "Button Group 7",
+ "description": "Number input button group with plus/minus controls and value display",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-08",
+ "title": "Button Group 8",
+ "description": "Preview link button group with primary action and external link icon",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-09",
+ "title": "Button Group 9",
+ "description": "Action button group with edit, duplicate, and delete functions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-10",
+ "title": "Button Group 10",
+ "description": "Flip transformation button group with horizontal and vertical controls",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-11",
+ "title": "Button Group 11",
+ "description": "Git merge button group with dropdown menu for merge strategy selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-12",
+ "title": "Button Group 12",
+ "description": "Ghost variant button group for navigation between settings, dashboard, and analytics",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button-group-13",
+ "title": "Button Group 13",
+ "description": "Email action button group with ripple animation effects",
+ "type": "registry:component",
+ "dependencies": [
+ "class-variance-authority",
+ "lucide-react",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-13.tsx"
+ },
+ {
+ "path": "src/components/ui/ripple-button.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/ripple-button.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-group-14",
+ "title": "Button Group 14",
+ "description": "Like/dislike button group with expandable hover reveal animation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-14.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-group-15",
+ "title": "Button Group 15",
+ "description": "Navigation button group with scale animation on press using Framer Motion",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "motion"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-15.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "button-group-16",
+ "title": "Button Group 16",
+ "description": "File action button group with animated shine/shimmer hover effect",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/button-group/button-group-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/button-group/button-group-16.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "calendar-01",
+ "title": "Calendar 1",
+ "description": "Basic single date selection calendar with default month display",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-02",
+ "title": "Calendar 2",
+ "description": "Multi-month calendar displaying two months side by side for single date selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-03",
+ "title": "Calendar 3",
+ "description": "Single month calendar with date range selection capability",
+ "type": "registry:component",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-04",
+ "title": "Calendar 4",
+ "description": "Multi-month calendar with date range selection across multiple months",
+ "type": "registry:component",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-05",
+ "title": "Calendar 5",
+ "description": "Range selection calendar with minimum days constraint (5 days minimum)",
+ "type": "registry:component",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-06",
+ "title": "Calendar 6",
+ "description": "Calendar with disabled dates before a specific date for restricted selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-07",
+ "title": "Calendar 7",
+ "description": "Range calendar with disabled weekends for business day selection only",
+ "type": "registry:component",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-08",
+ "title": "Calendar 8",
+ "description": "Localized calendar with language switching between English and Hindi",
+ "type": "registry:component",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar",
+ "card",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-09",
+ "title": "Calendar 9",
+ "description": "Calendar with month and year dropdown selectors for easy navigation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-10",
+ "title": "Calendar 10",
+ "description": "Variable size calendar with responsive cell sizing for different screen sizes",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-11",
+ "title": "Calendar 11",
+ "description": "Event calendar with integrated event list display and add event functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-12",
+ "title": "Calendar 12",
+ "description": "Multi-select calendar allowing selection of multiple individual dates",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-13",
+ "title": "Calendar 13",
+ "description": "Custom styled calendar with sky blue theme for selected dates",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-14",
+ "title": "Calendar 14",
+ "description": "Custom styled range calendar with sky blue theme for date range selection",
+ "type": "registry:component",
+ "dependencies": [
+ "react-day-picker"
+ ],
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-15",
+ "title": "Calendar 15",
+ "description": "Calendar with right-aligned navigation controls for alternative layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-16",
+ "title": "Calendar 16",
+ "description": "Calendar with left-aligned navigation controls for alternative layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-17",
+ "title": "Calendar 17",
+ "description": "Calendar with week numbers displayed for week-based scheduling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-18",
+ "title": "Calendar 18",
+ "description": "Calendar with \"Today\" quick action button for fast current date selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-19",
+ "title": "Calendar 19",
+ "description": "Calendar with synchronized date input field for manual date entry",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "calendar",
+ "card",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-20",
+ "title": "Calendar 20",
+ "description": "Calendar with integrated time input for complete datetime selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "calendar",
+ "card",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-21",
+ "title": "Calendar 21",
+ "description": "Advanced calendar with collapsible year/month selection and custom navigation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "collapsible",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-22",
+ "title": "Calendar 22",
+ "description": "Calendar with preset date shortcuts (Today, Yesterday, Tomorrow, in 3 days, in a week, etc.)",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-22.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-22.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-23",
+ "title": "Calendar 23",
+ "description": "Range calendar with preset date range shortcuts (Last week, month, year, etc.)",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-23.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-23.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-24",
+ "title": "Calendar 24",
+ "description": "Appointment booking calendar with time slot selection and availability indicators",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-24.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-24.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar-25",
+ "title": "Calendar 25",
+ "description": "Pricing calendar with dynamic price display for each date based on availability",
+ "type": "registry:component",
+ "registryDependencies": [
+ "calendar"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/calendar/calendar-25.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/calendar/calendar-25.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-01",
+ "title": "Card 1",
+ "description": "Login form card with email and password inputs",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "card",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-02",
+ "title": "Card 2",
+ "description": "Meeting notes card with team member avatars and attendee list",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-03",
+ "title": "Card 3",
+ "description": "Team invitation card with member list and invite functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-04",
+ "title": "Card 4",
+ "description": "Image showcase card with gradient background and bottom-aligned image",
+ "type": "registry:component",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-05",
+ "title": "Card 5",
+ "description": "Image showcase card with top-aligned image and action buttons",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-06",
+ "title": "Card 6",
+ "description": "Horizontal layout card with side-by-side image and content",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-07",
+ "title": "Card 7",
+ "description": "Overlay card with image background and overlaid text content",
+ "type": "registry:component",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-08",
+ "title": "Card 8",
+ "description": "Soft background card with subtle primary color theme",
+ "type": "registry:component",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-09",
+ "title": "Card 9",
+ "description": "Outline card with primary border and transparent background",
+ "type": "registry:component",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-10",
+ "title": "Card 10",
+ "description": "Tabbed card with integrated tabs component for organized content sections",
+ "type": "registry:component",
+ "registryDependencies": [
+ "card",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-11",
+ "title": "Card 11",
+ "description": "Social media post card with user profile, image, hashtags and interaction buttons",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "card",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-12",
+ "title": "Card 12",
+ "description": "Product showcase card with gradient background, like button and pricing details",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "card",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-13",
+ "title": "Card 13",
+ "description": "Testimonial card with user profile, star rating and highlighted text review",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-14",
+ "title": "Card 14",
+ "description": "Dismissible action card with close button and call-to-action content",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card-15",
+ "title": "Card 15",
+ "description": "Connected card group with three image showcase cards arranged side by side",
+ "type": "registry:component",
+ "registryDependencies": [
+ "card",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-15.tsx"
+ }
+ ],
+ "meta": {
+ "className": "col-span-full border-r-0"
+ }
+ },
+ {
+ "name": "card-16",
+ "title": "Card 16",
+ "description": "Interactive spotlight card with animated glow effect that follows mouse movement",
+ "type": "registry:component",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-16.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "card-17",
+ "title": "Card 17",
+ "description": "Dynamic 3D hover card with perspective transforms and smooth depth animations",
+ "type": "registry:component",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/card/card-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/card/card-17.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "checkbox-01",
+ "title": "Checkbox 1",
+ "description": "Basic checkbox with label for simple true/false selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-02",
+ "title": "Checkbox 2",
+ "description": "Indeterminate checkbox with custom styling and three-state functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-03",
+ "title": "Checkbox 3",
+ "description": "Checkbox with dashed border styling for visual distinction",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-04",
+ "title": "Checkbox 4",
+ "description": "Todo list checkbox with strikethrough text when checked",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-05",
+ "title": "Checkbox 5",
+ "description": "Multiple checkboxes in different sizes for size comparison and selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-06",
+ "title": "Checkbox 6",
+ "description": "Badge-style checkboxes with hidden unchecked state for compact selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge",
+ "checkbox"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-07",
+ "title": "Checkbox 7",
+ "description": "Checkbox with description text providing additional context and information",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-08",
+ "title": "Checkbox 8",
+ "description": "Horizontal group of checkboxes for technology selection with organized layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-09",
+ "title": "Checkbox 9",
+ "description": "Vertical group of checkboxes with icons for fruits selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-10",
+ "title": "Checkbox 10",
+ "description": "Color-themed checkboxes with destructive, info, and success color variants",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-11",
+ "title": "Checkbox 11",
+ "description": "Custom icon checkboxes with heart, star, and circle icons for visual feedback",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-12",
+ "title": "Checkbox 12",
+ "description": "Filled circular checkboxes with color themes and circle check icons",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-13",
+ "title": "Checkbox 13",
+ "description": "Card-style checkboxes with border highlighting and description text",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-14",
+ "title": "Checkbox 14",
+ "description": "List group checkboxes with icons and skills selection in bordered layout",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-15",
+ "title": "Checkbox 15",
+ "description": "Tree checkbox with parent-child relationship and indeterminate state",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-16",
+ "title": "Checkbox 16",
+ "description": "Form checkbox with terms acceptance, description text, and action buttons",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox-17",
+ "title": "Checkbox 17",
+ "description": "Smooth animated checkbox with motion transitions and visual feedback",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-17.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-checkbox.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/motion-checkbox.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "checkbox-18",
+ "title": "Checkbox 18",
+ "description": "Animated todo checkbox with strikethrough effect and smooth transitions",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-18.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-checkbox.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/motion-checkbox.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "checkbox-19",
+ "title": "Checkbox 19",
+ "description": "Checkbox with confetti animation effect when checked",
+ "type": "registry:component",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/checkbox/checkbox-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/checkbox/checkbox-19.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "collapsible-01",
+ "title": "Collapsible 1",
+ "description": "Basic collapsible with repository list and toggle button functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-02",
+ "title": "Collapsible 2",
+ "description": "File tree explorer with nested folders and expandable directory structure",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-03",
+ "title": "Collapsible 3",
+ "description": "Task completion list with user avatars and progress percentages",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-04",
+ "title": "Collapsible 4",
+ "description": "User list with avatars, status indicators and expandable team member details",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-05",
+ "title": "Collapsible 5",
+ "description": "Filter panel with price range inputs, rating checkboxes and brand selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "collapsible",
+ "label",
+ "input",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-06",
+ "title": "Collapsible 6",
+ "description": "Simple text content collapsible with expandable paragraph sections",
+ "type": "registry:component",
+ "registryDependencies": [
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-07",
+ "title": "Collapsible 7",
+ "description": "FAQ card with collapsible answer section and expandable image content",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-08",
+ "title": "Collapsible 8",
+ "description": "Menu items with dropdown actions and nested navigation structure",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-09",
+ "title": "Collapsible 9",
+ "description": "Multi-step form with delivery address, shipping options and payment details",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible",
+ "input",
+ "label",
+ "radio-group",
+ "separator",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible-10",
+ "title": "Collapsible 10",
+ "description": "Animated collapsible with smooth transitions and motion effects",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/collapsible/collapsible-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/collapsible/collapsible-10.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "combobox-01",
+ "title": "Combobox 1",
+ "description": "Basic combobox with framework selection and searchable dropdown",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-02",
+ "title": "Combobox 2",
+ "description": "Grouped combobox with fruits, vegetables, and beverages organized by categories",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-03",
+ "title": "Combobox 3",
+ "description": "Grouped combobox with disabled options and category-based selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-04",
+ "title": "Combobox 4",
+ "description": "Industry selector combobox with icons for various business sectors",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-05",
+ "title": "Combobox 5",
+ "description": "Framework selector combobox with custom check icon styling",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-06",
+ "title": "Combobox 6",
+ "description": "combobox with add new option functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-07",
+ "title": "Combobox 7",
+ "description": "Timezone selector combobox with real timezone data from Intl API",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "label",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-08",
+ "title": "Combobox 8",
+ "description": "User selector combobox with avatars, name and email addresses",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-09",
+ "title": "Combobox 9",
+ "description": "Country selector combobox with flag icons and country selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-10",
+ "title": "Combobox 10",
+ "description": "Multi-select framework combobox with badge display and removable selections",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-11",
+ "title": "Combobox 11",
+ "description": "Multiple-select combobox with expandable badge view to show or hide selected items dynamically",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-12",
+ "title": "Combobox 12",
+ "description": "Multi-select combobox with a count badge showing the number of selected frameworks.",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "command",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox-13",
+ "title": "Combobox 13",
+ "description": "Framework selector combobox with smooth animations and motion effects",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-13.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "combobox-14",
+ "title": "Combobox 14",
+ "description": "Framework selector combobox with floating label animation and enhanced styling",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "command",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/combobox/combobox-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/combobox/combobox-14.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "data-table-01",
+ "title": "Data Table 1",
+ "description": "Basic data table with records and row selection functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-02",
+ "title": "Data Table 2",
+ "description": "Density data table with density selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "select",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-03",
+ "title": "Data Table 3",
+ "description": "Payment records table with search filter, column visibility toggle, and refresh functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "dropdown-menu",
+ "input",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-04",
+ "title": "Data Table 4",
+ "description": "Product inventory table with images, badges, and advanced filtering by multiple attributes",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "badge",
+ "checkbox",
+ "input",
+ "label",
+ "select",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-05",
+ "title": "Data Table 5",
+ "description": "table with sortable columns and up/down arrow sort indicators",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "checkbox",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-06",
+ "title": "Data Table 6",
+ "description": "Data table with row expansion functionality for detailed content display",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-07",
+ "title": "Data Table 7",
+ "description": "Data table with pinnable columns sticking to the left side or right side for easy access",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-08",
+ "title": "Data Table 8",
+ "description": "Drag-and-drop data table with sortable rows and reordering functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "@dnd-kit/core",
+ "@dnd-kit/modifiers",
+ "@dnd-kit/sortable",
+ "@dnd-kit/utilities",
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-09",
+ "title": "Data Table 9",
+ "description": "Data table with expanding sub rows for detailed content display",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-10",
+ "title": "Data Table 10",
+ "description": "Data table with pagination, rows selection, and sorting system",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "checkbox",
+ "label",
+ "pagination",
+ "select",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-11",
+ "title": "Data Table 11",
+ "description": "data table with sorting, row selection, and pagination—styled with Origin UI and powered by @tanstack/react-table",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "checkbox",
+ "pagination",
+ "select",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-11.tsx"
+ },
+ {
+ "path": "src/hooks/use-pagination.ts",
+ "type": "registry:hook",
+ "target": "hooks/use-pagination.ts"
+ }
+ ]
+ },
+ {
+ "name": "data-table-12",
+ "title": "Data Table 12",
+ "description": "Data table with export functionality supporting CSV, Excel, and multiple formats",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "papaparse",
+ "@tanstack/react-table",
+ "xlsx"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "checkbox",
+ "dropdown-menu",
+ "input",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table-13",
+ "title": "Data Table 13",
+ "description": "editable data table with inline cell editing for text, status, and progress—supports row selection and live updates.",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "input",
+ "select",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/data-table/data-table-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/data-table/data-table-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-01",
+ "title": "Date Picker 1",
+ "description": "Basic single date picker with popover calendar display",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-02",
+ "title": "Date Picker 2",
+ "description": "Date range picker with popover calendar for selecting start and end dates",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-03",
+ "title": "Date Picker 3",
+ "description": "Single date picker with calendar icon and enhanced visual styling",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-04",
+ "title": "Date Picker 4",
+ "description": "Date picker with integrated input field for manual date entry and calendar popup",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-05",
+ "title": "Date Picker 5",
+ "description": "Natural language date picker supporting phrases like \"tomorrow\" or \"next week\"",
+ "type": "registry:component",
+ "dependencies": [
+ "chrono-node",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-06",
+ "title": "Date Picker 6",
+ "description": "Date range picker with compact date formatting using little-date library",
+ "type": "registry:component",
+ "dependencies": [
+ "little-date",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-07",
+ "title": "Date Picker 7",
+ "description": "Single date picker with disabled outside days for cleaner calendar view",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-08",
+ "title": "Date Picker 8",
+ "description": "Simple time input field with step control for precise time selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-09",
+ "title": "Date Picker 9",
+ "description": "Time input field with clock icon for enhanced visual identification",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-10",
+ "title": "Date Picker 10",
+ "description": "Combined date picker and time input displayed side by side for datetime selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-11",
+ "title": "Date Picker 11",
+ "description": "Date picker with time range selection (from/to times) for event scheduling",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-12",
+ "title": "Date Picker 12",
+ "description": "Travel date picker with departure/return dates and time selection for bookings",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker-13",
+ "title": "Date Picker 13",
+ "description": "Analytics chart with date range filter showing visitor data and interactive filtering",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "recharts"
+ ],
+ "registryDependencies": [
+ "button",
+ "calendar",
+ "card",
+ "chart",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/date-picker/date-picker-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/date-picker/date-picker-13.tsx"
+ }
+ ],
+ "meta": {
+ "className": "col-span-full border-r-0"
+ }
+ },
+ {
+ "name": "dialog-01",
+ "title": "Dialog 1",
+ "description": "Basic alert dialog with confirmation for destructive actions",
+ "type": "registry:component",
+ "registryDependencies": [
+ "alert-dialog",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-02",
+ "title": "Dialog 2",
+ "description": "Alert dialog with icon and detailed feature list for update notifications",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert-dialog",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-03",
+ "title": "Dialog 3",
+ "description": "Destructive alert dialog with warning icon and checkbox for permanent deletion",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "alert-dialog",
+ "button",
+ "checkbox",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-04",
+ "title": "Dialog 4",
+ "description": "Scrollable dialog with long content and scroll area for product information",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-05",
+ "title": "Dialog 5",
+ "description": "Scrollable dialog with sticky header for fixed navigation while scrolling content",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-06",
+ "title": "Dialog 6",
+ "description": "Scrollable dialog with sticky footer for persistent action buttons",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-07",
+ "title": "Dialog 7",
+ "description": "Full-screen dialog taking up the entire viewport for immersive content",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "scroll-area"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-08",
+ "title": "Dialog 8",
+ "description": "Terms and conditions dialog with structured content and accept/decline actions",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-09",
+ "title": "Dialog 9",
+ "description": "Subscription dialog with input field and subscribe button",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-10",
+ "title": "Dialog 10",
+ "description": "Referral program dialog with avatar display and email sharing functionality",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-11",
+ "title": "Dialog 11",
+ "description": "Rating feedback dialog with emoji radio buttons and text area for comments",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "checkbox",
+ "label",
+ "radio-group",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-12",
+ "title": "Dialog 12",
+ "description": "OTP verification dialog with input-otp component and validation feedback",
+ "type": "registry:component",
+ "dependencies": [
+ "input-otp",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-13",
+ "title": "Dialog 13",
+ "description": "Sign up dialog with gradient background and terms acceptance checkbox",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-14",
+ "title": "Dialog 14",
+ "description": "Sign in dialog with gradient background and social login options",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-15",
+ "title": "Dialog 15",
+ "description": "Invite friends dialog with avatar list and email invitation functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-16",
+ "title": "Dialog 16",
+ "description": "Profile edit dialog positioned at top-left corner of screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-17",
+ "title": "Dialog 17",
+ "description": "Profile edit dialog positioned at top-align corner of screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-18",
+ "title": "Dialog 18",
+ "description": "Profile edit dialog positioned at top-right-aligned of screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-19",
+ "title": "Dialog 19",
+ "description": "Profile edit dialog positioned at middle-left-aligned of screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-20",
+ "title": "Dialog 20",
+ "description": "Profile edit dialog positioned at middle-right side of screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-21",
+ "title": "Dialog 21",
+ "description": "Profile edit dialog positioned at bottom-left-aligned of screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-22",
+ "title": "Dialog 22",
+ "description": "Profile edit dialog positioned at center left of screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-22.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-22.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-23",
+ "title": "Dialog 23",
+ "description": "Profile edit dialog positioned at bottom right aligned of screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-23.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-23.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog-24",
+ "title": "Dialog 24",
+ "description": "Profile edit dialog with slide-up animation from bottom",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-24.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-24.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "dialog-25",
+ "title": "Dialog 25",
+ "description": "Profile edit dialog with slide-right animation from left side of the screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-25.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-25.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "dialog-26",
+ "title": "Dialog 26",
+ "description": "Profile edit dialog with zoom in animation from center of the screen",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dialog",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dialog/dialog-26.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dialog/dialog-26.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "dropdown-menu-01",
+ "title": "Dropdown Menu 1",
+ "description": "Basic dropdown menu with groups, separators, and submenu for account actions",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-02",
+ "title": "Dropdown Menu 2",
+ "description": "User switcher dropdown with avatar display and task assignment selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-03",
+ "title": "Dropdown Menu 3",
+ "description": "Chat list dropdown with avatars, message previews, and notification badges",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "badge",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-04",
+ "title": "Dropdown Menu 4",
+ "description": "Contact list dropdown with avatars, email display, and send action buttons",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-05",
+ "title": "Dropdown Menu 5",
+ "description": "Meeting schedule dropdown with avatars, switch toggles for scheduling control",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-06",
+ "title": "Dropdown Menu 6",
+ "description": "Text editing dropdown menu with formatting options and descriptions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-07",
+ "title": "Dropdown Menu 7",
+ "description": "User account menu dropdown with avatar trigger and profile management options",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-08",
+ "title": "Dropdown Menu 8",
+ "description": "User profile dropdown with avatar header, user info, and submenu for invitations",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-09",
+ "title": "Dropdown Menu 9",
+ "description": "Start-aligned dropdown menu with edit, share, and delete actions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-10",
+ "title": "Dropdown Menu 10",
+ "description": "End-aligned dropdown menu with browser actions and keyboard shortcuts",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-11",
+ "title": "Dropdown Menu 11",
+ "description": "Task priority selector dropdown with icons and priority levels",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-12",
+ "title": "Dropdown Menu 12",
+ "description": "User profile menu dropdown with icons for profile, settings, billing, and FAQ",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-13",
+ "title": "Dropdown Menu 13",
+ "description": "Dropdown with checkbox controls for UI elements",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-14",
+ "title": "Dropdown Menu 14",
+ "description": "Radio group selection dropdown for panel position with single choice selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu-15",
+ "title": "Dropdown Menu 15",
+ "description": "Left side animation dropdown menu",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-15.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "dropdown-menu-16",
+ "title": "Dropdown Menu 16",
+ "description": "Animated dropdown menu with slide up animation effect",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "dropdown-menu",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/dropdown-menu/dropdown-menu-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/dropdown-menu/dropdown-menu-16.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "form-01",
+ "title": "Form 1",
+ "description": "Form with radio group selection and alert notifications for user feedback",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-02",
+ "title": "Form 2",
+ "description": "Form with checkbox controls and alert integration for user selections",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "checkbox",
+ "form"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-03",
+ "title": "Form 3",
+ "description": "Form with switch toggle controls for settings and preferences",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-04",
+ "title": "Form 4",
+ "description": "Form with input fields and validation alerts for data entry",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "input"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-05",
+ "title": "Form 5",
+ "description": "Form with OTP input component for secure verification codes",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "input-otp"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-06",
+ "title": "Form 6",
+ "description": "Form with textarea component for multi-line text input",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-07",
+ "title": "Form 7",
+ "description": "Form with select dropdown components for option selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-08",
+ "title": "Form 8",
+ "description": "Form with command popover for searchable command selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "command",
+ "form",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-09",
+ "title": "Form 9",
+ "description": "Form with date picker in popover for date selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "calendar",
+ "form",
+ "popover",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form-10",
+ "title": "Form 10",
+ "description": "Comprehensive form with multiple input types in card layout for complex data entry",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "card",
+ "form",
+ "input",
+ "radio-group",
+ "select",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/form/form-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/form/form-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-01",
+ "title": "Input 1",
+ "description": "A basic email input field with placeholder text",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-02",
+ "title": "Input 2",
+ "description": "An email input field with a descriptive label for improved accessibility",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-03",
+ "title": "Input 3",
+ "description": "A required email input field with a red asterisk indicator and validation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-04",
+ "title": "Input 4",
+ "description": "A disabled email input field that prevents user interaction",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-05",
+ "title": "Input 5",
+ "description": "A read-only email input field with default value and muted styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-06",
+ "title": "Input 6",
+ "description": "Text input fields showcasing different size variants (small, medium, large)",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-07",
+ "title": "Input 7",
+ "description": "An email input field with a pre-filled default value",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-08",
+ "title": "Input 8",
+ "description": "An input field with fully rounded borders for a modern appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-09",
+ "title": "Input 9",
+ "description": "An input field with helper text below for additional guidance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-10",
+ "title": "Input 10",
+ "description": "An email input field with right-aligned helper text for privacy assurance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-11",
+ "title": "Input 11",
+ "description": "An email input field with hint text indicating the field is optional",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-12",
+ "title": "Input 12",
+ "description": "An email input field with error validation and dynamic error message display",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-13",
+ "title": "Input 13",
+ "description": "An email input field with custom indigo focus ring styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-14",
+ "title": "Input 14",
+ "description": "A username input field with a user icon positioned at the start",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-15",
+ "title": "Input 15",
+ "description": "An email input field with a mail icon positioned at the end",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-16",
+ "title": "Input 16",
+ "description": "A URL input field with \"https://\" text prefix positioned at the start",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-17",
+ "title": "Input 17",
+ "description": "A domain input field with \".com\" text suffix positioned at the end",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-18",
+ "title": "Input 18",
+ "description": "A URL input field with both \"https://\" prefix and \".com\" suffix text add-ons",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-19",
+ "title": "Input 19",
+ "description": "A URL input field with an external \"https://\" add-on box at the start",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-20",
+ "title": "Input 20",
+ "description": "A domain input field with an external \".com\" add-on box at the end",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-21",
+ "title": "Input 21",
+ "description": "A URL input field with both external \"https://\" and \".com\" add-on boxes",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-22",
+ "title": "Input 22",
+ "description": "An email input field with a filled muted background style and no border",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-22.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-22.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-23",
+ "title": "Input 23",
+ "description": "An email input field with an overlapping label positioned over the border",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-23.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-23.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-24",
+ "title": "Input 24",
+ "description": "An email input field with an animated floating label that moves on focus",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-24.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-24.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-25",
+ "title": "Input 25",
+ "description": "An email input field with an inset label positioned above the input area",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-25.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-25.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-26",
+ "title": "Input 26",
+ "description": "A password input field with a toggle button to show/hide password visibility",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-26.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-26.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-27",
+ "title": "Input 27",
+ "description": "A file input field with custom styling for the file picker button",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-27.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-27.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-28",
+ "title": "Input 28",
+ "description": "A URL input field with a protocol selector dropdown at the start",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-28.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-28.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-29",
+ "title": "Input 29",
+ "description": "A domain input field with a TLD selector dropdown at the end",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-29.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-29.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-30",
+ "title": "Input 30",
+ "description": "An email input field paired with a subscribe button for newsletter signups",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-30.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-30.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-31",
+ "title": "Input 31",
+ "description": "An email input field with an inline send button positioned at the end",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-31.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-31.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-32",
+ "title": "Input 32",
+ "description": "Input field with a right-aligned icon button, ideal for actions like downloading or submitting email addresses",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-32.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-32.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-33",
+ "title": "Input 33",
+ "description": "An email input field with an external subscribe button connected via styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-33.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-33.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-34",
+ "title": "Input 34",
+ "description": "Input field with character limit counter showing current count out of maximum allowed",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-34.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-34.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-35",
+ "title": "Input 35",
+ "description": "Input field with real-time character counter, guiding users on remaining character allowance.",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-35.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-35.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-36",
+ "title": "Input 36",
+ "description": "Input field with clear button to instantly reset the field value",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-36.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-36.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-37",
+ "title": "Input 37",
+ "description": "Search input field with keyboard shortcut indicator (⌘K) for enhanced UX",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-37.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-37.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-38",
+ "title": "Input 38",
+ "description": "Search input field with search icon and microphone button for voice input",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-38.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-38.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-39",
+ "title": "Input 39",
+ "description": "Search input field with loading indicator that shows during search operations",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-39.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-39.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-40",
+ "title": "Input 40",
+ "description": "Number input field with increment/decrement buttons using React Aria Components",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-40.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-40.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-41",
+ "title": "Input 41",
+ "description": "Number field with increment/decrement buttons positioned at the end using React Aria",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-41.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-41.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-42",
+ "title": "Input 42",
+ "description": "Number field with vertically stacked increment/decrement buttons using React Aria",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-42.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-42.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-43",
+ "title": "Input 43",
+ "description": "Number field with rounded increment/decrement buttons positioned inline using React Aria",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-43.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-43.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-44",
+ "title": "Input 44",
+ "description": "Number field with rounded increment/decrement buttons positioned at the end using React Aria",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-44.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-44.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-45",
+ "title": "Input 45",
+ "description": "Number field with vertically stacked chevron buttons for increment/decrement using React Aria",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-aria-components"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-45.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-45.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-46",
+ "title": "Input 46",
+ "description": "Password input field with strength meter and requirements validation checker",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input/input-46.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input/input-46.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-mask-01",
+ "title": "Input Mask 1",
+ "description": "An input field with custom alphanumeric mask pattern for structured data entry",
+ "type": "registry:component",
+ "dependencies": [
+ "use-mask-input"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-mask-02",
+ "title": "Input Mask 2",
+ "description": "A time input field with HH:MM:SS mask formatting for precise time entry",
+ "type": "registry:component",
+ "dependencies": [
+ "use-mask-input"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-mask-03",
+ "title": "Input Mask 3",
+ "description": "A credit card number input with automatic formatting and card type detection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-mask-04",
+ "title": "Input Mask 4",
+ "description": "A credit card expiry date input with MM/YY formatting and validation",
+ "type": "registry:component",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-mask-05",
+ "title": "Input Mask 5",
+ "description": "A credit card CVC input field with secure formatting and length validation",
+ "type": "registry:component",
+ "dependencies": [
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-mask-06",
+ "title": "Input Mask 6",
+ "description": "A comprehensive credit card details form with card number, expiry, and CVC inputs with automatic formatting",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "react-payment-inputs"
+ ],
+ "devDependencies": [
+ "@types/react-payment-inputs"
+ ],
+ "registryDependencies": [
+ "input",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-mask/input-mask-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-mask/input-mask-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-01",
+ "title": "Input OTP 1",
+ "description": "A 4-digit numeric OTP input field with individual slots for each digit",
+ "type": "registry:component",
+ "dependencies": [
+ "input-otp"
+ ],
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-02",
+ "title": "Input OTP 2",
+ "description": "A 4-character alphanumeric OTP input field supporting both letters and numbers",
+ "type": "registry:component",
+ "dependencies": [
+ "input-otp"
+ ],
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-03",
+ "title": "Input OTP 3",
+ "description": "A 4-digit OTP input field with resend functionality and helper text",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-04",
+ "title": "Input OTP 4",
+ "description": "A 4-digit OTP input field with countdown timer and automatic resend functionality",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-05",
+ "title": "Input OTP 5",
+ "description": "A 4-digit OTP input field with outlined styling and rounded borders",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-06",
+ "title": "Input OTP 6",
+ "description": "A 4-digit OTP input field with filled background styling and muted appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-07",
+ "title": "Input OTP 7",
+ "description": "A 4-digit OTP input field with minimal underline styling and no background",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-08",
+ "title": "Input OTP 8",
+ "description": "A 6-digit OTP input field with grouped layout and visual separator between groups",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-09",
+ "title": "Input OTP 9",
+ "description": "A 6-digit OTP input field with outlined grouped layout and visual separator",
+ "type": "registry:component",
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input-otp-10",
+ "title": "Input OTP 10",
+ "description": "A 6-digit OTP input field with custom dot separator and grouped layout",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "input-otp",
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/input-otp/input-otp-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/input-otp/input-otp-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-01",
+ "title": "Pagination 1",
+ "description": "A basic pagination component with previous, numbered pages, and next controls",
+ "type": "registry:component",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-02",
+ "title": "Pagination 2",
+ "description": "A pagination component with chevron icons for previous and next navigation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-03",
+ "title": "Pagination 3",
+ "description": "A pagination component with primary button styling for the active page",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "pagination",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-04",
+ "title": "Pagination 4",
+ "description": "A pagination component with secondary button styling and custom variants",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "pagination",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-05",
+ "title": "Pagination 5",
+ "description": "A bordered pagination component with dividers and connected button styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "pagination",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-06",
+ "title": "Pagination 6",
+ "description": "A pagination component with fully rounded button styling for modern appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-07",
+ "title": "Pagination 7",
+ "description": "A pagination component with first and last page navigation buttons",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-08",
+ "title": "Pagination 8",
+ "description": "A pagination component with ellipsis and tooltip showing hidden page count",
+ "type": "registry:component",
+ "registryDependencies": [
+ "pagination",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-09",
+ "title": "Pagination 9",
+ "description": "A pagination component with underline styling for the active page indicator",
+ "type": "registry:component",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-10",
+ "title": "Pagination 10",
+ "description": "A card-style pagination component with border, shadow, and contained layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-11",
+ "title": "Pagination 11",
+ "description": "A minimal numberless pagination component with only previous and next controls",
+ "type": "registry:component",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-12",
+ "title": "Pagination 12",
+ "description": "A numberless pagination component with current page indicator text display",
+ "type": "registry:component",
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-13",
+ "title": "Pagination 13",
+ "description": "A compact mini pagination component with page count display and icon navigation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "pagination"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-14",
+ "title": "Pagination 14",
+ "description": "A pagination component with page size selector dropdown for customizable results per page",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "pagination",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination-15",
+ "title": "Pagination 15",
+ "description": "A comprehensive pagination component with page size selector, tooltips, and detailed navigation controls",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "pagination",
+ "select",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/pagination/pagination-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/pagination/pagination-15.tsx"
+ }
+ ],
+ "meta": {
+ "className": "col-span-full border-r-0"
+ }
+ },
+ {
+ "name": "popover-01",
+ "title": "Popover 1",
+ "description": "A ratings popover displaying star ratings with progress bars and review statistics",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "popover",
+ "progress",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-02",
+ "title": "Popover 2",
+ "description": "A dimensions popover with input fields for width, max width, height, and max height settings",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-03",
+ "title": "Popover 3",
+ "description": "A pricing popover displaying plan details with features and pricing information",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-04",
+ "title": "Popover 4",
+ "description": "A volume control popover with a slider for adjusting audio levels",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "label",
+ "popover",
+ "slider"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-05",
+ "title": "Popover 5",
+ "description": "An informational popover about Shadcn Studio with description and learn more link",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-06",
+ "title": "Popover 6",
+ "description": "A download progress popover with progress bar and pause/cancel/retry controls",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover",
+ "progress",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-07",
+ "title": "Popover 7",
+ "description": "A file deletion confirmation popover with warning icon and action buttons",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-08",
+ "title": "Popover 8",
+ "description": "A feedback popover with textarea for user comments and send/cancel actions",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-09",
+ "title": "Popover 9",
+ "description": "A filter popover with checkbox options and price range slider controls",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "label",
+ "popover",
+ "slider"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-10",
+ "title": "Popover 10",
+ "description": "A user search popover with debounced input, loading states, and avatar display",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "input",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-11",
+ "title": "Popover 11",
+ "description": "A notifications popover with unread indicators and mark-as-read functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "popover",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-12",
+ "title": "Popover 12",
+ "description": "An informational popover with image and content layout for location details",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover-13",
+ "title": "Popover 13",
+ "description": "A promotional popover with QR code and coupon code with copy functionality with slide in from left animation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "input",
+ "popover",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-13.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "popover-14",
+ "title": "Popover 14",
+ "description": "A team sharing popover with email input and member selection checkboxes with slide in from bottom animation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "checkbox",
+ "input",
+ "label",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-14.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "popover-15",
+ "title": "Popover 15",
+ "description": "A user profile popover with avatar, bio, and social statistics display with zoom-in animation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "popover"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/popover/popover-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/popover/popover-15.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "radio-group-01",
+ "title": "Radio Group 1",
+ "description": "A basic vertical radio group",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-02",
+ "title": "Radio Group 2",
+ "description": "A horizontal radio group layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-03",
+ "title": "Radio Group 3",
+ "description": "A colored radio group with custom styling for different states",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-04",
+ "title": "Radio Group 4",
+ "description": "A radio group with different sizes for various display options",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-05",
+ "title": "Radio Group 5",
+ "description": "A radio group with dashed borders",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-06",
+ "title": "Radio Group 6",
+ "description": "A radio group with solid filled styling for theme selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-07",
+ "title": "Radio Group 7",
+ "description": "A radio group with descriptions for detailed plan selection options",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-08",
+ "title": "Radio Group 8",
+ "description": "A chip-style radio group with grid layout for size selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-09",
+ "title": "Radio Group 9",
+ "description": "A list-style radio group with pricing and badges for plan selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge",
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-10",
+ "title": "Radio Group 10",
+ "description": "A split-list radio group with highlighted selected state and pricing",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge",
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-11",
+ "title": "Radio Group 11",
+ "description": "A card-style radio group with detailed descriptions and pricing",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-12",
+ "title": "Radio Group 12",
+ "description": "A border less card radio group with hidden radio buttons and label-based selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-13",
+ "title": "Radio Group 13",
+ "description": "A vertical card radio group with icons and centered layout for plan selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group-14",
+ "title": "Radio Group 14",
+ "description": "An animated radio group with motion effects for notification preferences",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-radio-group",
+ "lucide-react",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-14.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-radio-group.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/motion-radio-group.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "radio-group-15",
+ "title": "Radio Group 15",
+ "description": "An animated inset radio group with smooth transitions for language selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "radio-group"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/radio-group/radio-group-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/radio-group/radio-group-15.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "select-01",
+ "title": "Select 1",
+ "description": "A basic native select dropdown for gender selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-01.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-02",
+ "title": "Select 2",
+ "description": "A native select dropdown with placeholder text for user guidance",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-02.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-03",
+ "title": "Select 3",
+ "description": "A native select dropdown with icon for movie selection",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-03.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-04",
+ "title": "Select 4",
+ "description": "A native select dropdown with helper text",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-04.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-05",
+ "title": "Select 5",
+ "description": "A native select dropdown with error state and validation message",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-05.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-06",
+ "title": "Select 6",
+ "description": "A required native select dropdown with asterisk indicator",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-06.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-07",
+ "title": "Select 7",
+ "description": "A native select dropdown with option groups for categorized choices",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-07.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-08",
+ "title": "Select 8",
+ "description": "A native select dropdown with overlapping label design",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-08.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-09",
+ "title": "Select 9",
+ "description": "A native select dropdown with inset label design and custom styling",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-09.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-10",
+ "title": "Select 10",
+ "description": "A basic custom select dropdown with grouped items and labels",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-11",
+ "title": "Select 11",
+ "description": "A custom select dropdown with placeholder text",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-12",
+ "title": "Select 12",
+ "description": "A custom select dropdown with icon",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-13",
+ "title": "Select 13",
+ "description": "A custom select dropdown with helper text for location selection",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-14",
+ "title": "Select 14",
+ "description": "A custom select dropdown with error state and validation message",
+ "type": "registry:component",
+ "registryDependencies": [
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-15",
+ "title": "Select 15",
+ "description": "A custom select dropdown with different size variants (small, default, large)",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-16",
+ "title": "Select 16",
+ "description": "A custom select dropdown with colored border and focus ring styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-17",
+ "title": "Select 17",
+ "description": "A custom select dropdown with colored background and themed styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-18",
+ "title": "Select 18",
+ "description": "A ghost-style custom select dropdown with minimal styling and hover effects",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-19",
+ "title": "Select 19",
+ "description": "A disabled custom select dropdown with reduced opacity and interaction",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-20",
+ "title": "Select 20",
+ "description": "A custom select dropdown with disabled individual options",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-21",
+ "title": "Select 21",
+ "description": "A custom select dropdown with required field indicator",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-22",
+ "title": "Select 22",
+ "description": "A custom select dropdown with multiple option groups",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-22.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-22.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-23",
+ "title": "Select 23",
+ "description": "A custom select dropdown with separators and grouped countries by geographic regions",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-23.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-23.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-24",
+ "title": "Select 24",
+ "description": "A custom select dropdown with overlapping label positioned over the border",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-24.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-24.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-25",
+ "title": "Select 25",
+ "description": "A custom select dropdown with inset label design inside bordered container",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-25.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-25.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-26",
+ "title": "Select 26",
+ "description": "A timezone select dropdown with grouped time zones by geographic regions",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-26.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-26.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-27",
+ "title": "Select 27",
+ "description": "A music genre select dropdown with icons for each option",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-27.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-27.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-28",
+ "title": "Select 28",
+ "description": "A custom select dropdown with leading text before the selected value",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-28.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-28.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-29",
+ "title": "Select 29",
+ "description": "A status select dropdown with colored circle indicators for each status",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-29.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-29.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-30",
+ "title": "Select 30",
+ "description": "A country select dropdown with flag images for each country option",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-30.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-30.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-31",
+ "title": "Select 31",
+ "description": "A user select dropdown with avatar images for each user option",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-31.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-31.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-32",
+ "title": "Select 32",
+ "description": "A multi-select dropdown with search functionality for product categories",
+ "type": "registry:component",
+ "dependencies": [
+ "cmdk",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "command",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-32.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-32.tsx"
+ },
+ {
+ "path": "src/components/ui/multi-select.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/multi-select.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-33",
+ "title": "Select 33",
+ "description": "A multi-select dropdown with placeholder, badge display and removal functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "cmdk",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "command",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-33.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-33.tsx"
+ },
+ {
+ "path": "src/components/ui/multi-select.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/multi-select.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-34",
+ "title": "Select 34",
+ "description": "A native multiple select dropdown for dietary preferences with bordered container",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-34.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-34.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-35",
+ "title": "Select 35",
+ "description": "A React Aria Components listbox with single selection for currency options",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-35.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-35.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-36",
+ "title": "Select 36",
+ "description": "A React Aria Components listbox with multiple selection and grouped language options",
+ "type": "registry:component",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-36.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-36.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select-37",
+ "title": "Select 37",
+ "description": "An animated select dropdown with slide-in from bottom transition effect",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-37.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-37.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "select-38",
+ "title": "Select 38",
+ "description": "An animated select dropdown with zoom-in transition effect from center",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-38.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-38.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "sheet-01",
+ "title": "Sheet 1",
+ "description": "A basic sheet component with form inputs for profile editing",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sheet-02",
+ "title": "Sheet 2",
+ "description": "A sheet component demonstrating different slide directions (top, right, bottom, left)",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sheet-03",
+ "title": "Sheet 3",
+ "description": "A non-modal sheet component without overlay for profile editing",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sheet-04",
+ "title": "Sheet 4",
+ "description": "A sheet component with scrollable content for terms and conditions",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "scroll-area",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sheet-05",
+ "title": "Sheet 5",
+ "description": "A sheet component with form validation and structured user registration",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "input",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sheet-06",
+ "title": "Sheet 6",
+ "description": "A navigation sheet component with collapsible menu structure",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sheet-07",
+ "title": "Sheet 7",
+ "description": "A sheet component with data table, pagination, and form integration for adding user data",
+ "type": "registry:component",
+ "dependencies": [
+ "@tanstack/react-table",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "input",
+ "label",
+ "select",
+ "sheet",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-07.tsx"
+ }
+ ],
+ "meta": {
+ "className": "col-span-full border-r-0"
+ }
+ },
+ {
+ "name": "sonner-01",
+ "title": "Sonner 1",
+ "description": "A basic toast notification with simple message display",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-02",
+ "title": "Sonner 2",
+ "description": "A toast notification with title and description for detailed information",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-03",
+ "title": "Sonner 3",
+ "description": "A toast notification with custom icon for enhanced visual communication",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-04",
+ "title": "Sonner 4",
+ "description": "A toast notification with avatar component for personalized user notifications",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-05",
+ "title": "Sonner 5",
+ "description": "A closable toast notification with user-controlled dismiss functionality",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-06",
+ "title": "Sonner 6",
+ "description": "A toast notification with action button for interactive user responses",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-07",
+ "title": "Sonner 7",
+ "description": "A promise-based toast notification with loading, success, and error states",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-08",
+ "title": "Sonner 8",
+ "description": "A toast notification with configurable positioning options for all screen corners and centers for e.g. (top-left, top-right, bottom-left, bottom-right, center)",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-09",
+ "title": "Sonner 9",
+ "description": "A soft-styled info toast notification with color-mixed background for subtle messaging",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-10",
+ "title": "Sonner 10",
+ "description": "A soft-styled success toast notification with green color theming for positive feedback",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-11",
+ "title": "Sonner 11",
+ "description": "A soft-styled warning toast notification with amber color theming for caution messages",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-12",
+ "title": "Sonner 12",
+ "description": "A soft-styled destructive error toast notification with subtle red theming for error messages",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-13",
+ "title": "Sonner 13",
+ "description": "An outline-styled info toast notification with border highlighting for informational messages",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-14",
+ "title": "Sonner 14",
+ "description": "An outline-styled success toast notification with green border theming for positive feedback",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-15",
+ "title": "Sonner 15",
+ "description": "An outline-styled warning toast notification with amber border theming for caution messages",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-16",
+ "title": "Sonner 16",
+ "description": "An outline-styled destructive error toast notification with red border theming for error messages",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-17",
+ "title": "Sonner 17",
+ "description": "A solid-styled info toast notification with blue background and white text for prominent messaging",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-18",
+ "title": "Sonner 18",
+ "description": "A solid-styled success toast notification with green background and white text for prominent positive feedback",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-19",
+ "title": "Sonner 19",
+ "description": "A solid-styled warning toast notification with amber background and white text for prominent caution messages",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner-20",
+ "title": "Sonner 20",
+ "description": "A solid-styled destructive error toast notification with red background and white text for prominent error messages",
+ "type": "registry:component",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-01",
+ "title": "Switch 1",
+ "description": "A basic switch component with label for simple on/off controls",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-02",
+ "title": "Switch 2",
+ "description": "A square-styled switch with rounded corners for alternative visual design",
+ "type": "registry:component",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-03",
+ "title": "Switch 3",
+ "description": "A mini-sized switch with border styling for compact interface layouts",
+ "type": "registry:component",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-04",
+ "title": "Switch 4",
+ "description": "Color-themed switches with destructive, success, info, and warning variants",
+ "type": "registry:component",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-05",
+ "title": "Switch 5",
+ "description": "Multiple size variations of switches with small, medium, and large options",
+ "type": "registry:component",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-06",
+ "title": "Switch 6",
+ "description": "Outline-styled switches with transparent backgrounds and colored borders for different themes",
+ "type": "registry:component",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-07",
+ "title": "Switch 7",
+ "description": "A gradient-styled switch with amber to sky/indigo color transitions based on state",
+ "type": "registry:component",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-08",
+ "title": "Switch 8",
+ "description": "A switch with dynamic label that changes text based on toggle state (Yes/No)",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-09",
+ "title": "Switch 9",
+ "description": "A dual-label switch with clickable Yes/No labels that toggle the switch state",
+ "type": "registry:component",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-10",
+ "title": "Switch 10",
+ "description": "A switch with icon label that toggles between sun and moon icons for theme switching",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-11",
+ "title": "Switch 11",
+ "description": "A dual-icon switch with clickable sun and moon icons for theme mode switching",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-12",
+ "title": "Switch 12",
+ "description": "A switch with check and X icon indicators that change visibility based on toggle state",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-13",
+ "title": "Switch 13",
+ "description": "A switch with sliding check and X icon indicators that move with the toggle handle",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-14",
+ "title": "Switch 14",
+ "description": "A square-styled switch with sliding Yes/No text indicators in the background",
+ "type": "registry:component",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-15",
+ "title": "Switch 15",
+ "description": "A switch integrated within a card layout with database icon for backup settings",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-16",
+ "title": "Switch 16",
+ "description": "A switch card with Google Cloud icon for backup service toggle functionality",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-17",
+ "title": "Switch 17",
+ "description": "A switch card with GitHub icon for repository connection toggle functionality",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-18",
+ "title": "Switch 18",
+ "description": "A list group of switches with icons for skill preference selection across multiple categories",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch-19",
+ "title": "Switch 19",
+ "description": "Animated motion switches in multiple sizes with smooth transition effects",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-switch",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-19.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-switch.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/motion-switch.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "switch-20",
+ "title": "Switch 20",
+ "description": "Animated gradient motion switches with color transitions and multiple size variations",
+ "type": "registry:component",
+ "dependencies": [
+ "@radix-ui/react-switch",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-20.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-switch.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/motion-switch.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "table-01",
+ "title": "Table 1",
+ "description": "A basic table with caption, header, body, and footer displaying invoice data",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-02",
+ "title": "Table 2",
+ "description": "A bordered table with complete border styling around the table container",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-03",
+ "title": "Table 3",
+ "description": "A table with rounded corners and shadow styling for enhanced visual appeal",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-04",
+ "title": "Table 4",
+ "description": "A table with vertical lines between columns for clear data separation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-05",
+ "title": "Table 5",
+ "description": "A table without borders for a clean, minimal appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-06",
+ "title": "Table 6",
+ "description": "A striped rows table with alternating row background colors for improved readability",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-07",
+ "title": "Table 7",
+ "description": "A striped columns table with alternating column background colors for enhanced data comparison",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-08",
+ "title": "Table 8",
+ "description": "A table with highlighted row functionality for emphasis and user interaction",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-09",
+ "title": "Table 9",
+ "description": "A table with vertical scrolling functionality for displaying large datasets",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-10",
+ "title": "Table 10",
+ "description": "A table with sticky header that remains visible during vertical scrolling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-11",
+ "title": "Table 11",
+ "description": "A table with sticky first column that remains fixed during horizontal scrolling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-12",
+ "title": "Table 12",
+ "description": "A vertical table layout for displaying data in a column-oriented format with key-value pairs",
+ "type": "registry:component",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-13",
+ "title": "Table 13",
+ "description": "A table with avatar components for displaying user information with profile pictures",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-14",
+ "title": "Table 14",
+ "description": "A table with integrated pagination controls for navigating through large datasets",
+ "type": "registry:component",
+ "registryDependencies": [
+ "pagination",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-15",
+ "title": "Table 15",
+ "description": "A table with selectable rows using checkboxes for bulk actions and data manipulation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "checkbox",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table-16",
+ "title": "Table 16",
+ "description": "A comprehensive product table with avatars, checkboxes, buttons, and action controls",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "checkbox",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-01",
+ "title": "Tabs 1",
+ "description": "Basic tabs component with default styling for content organization and navigation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-02",
+ "title": "Tabs 2",
+ "description": "Outlined tabs with border styling and background transparency for modern interface design",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-03",
+ "title": "Tabs 3",
+ "description": "Tabs with icons for enhanced visual navigation and improved user experience",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-04",
+ "title": "Tabs 4",
+ "description": "Tabs with badge components for displaying notifications, counters, or status indicators",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-05",
+ "title": "Tabs 5",
+ "description": "Vertical tabs with icons displayed above text labels in a stacked layout",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-06",
+ "title": "Tabs 6",
+ "description": "Tabs with badge count indicators showing numerical values for each tab",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-07",
+ "title": "Tabs 7",
+ "description": "Icon-only tabs with tooltip labels for compact navigation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-08",
+ "title": "Tabs 8",
+ "description": "Simple justified tabs with equal width distribution across the container",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-09",
+ "title": "Tabs 9",
+ "description": "Solid pill-style tabs with rounded corners and filled background",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-10",
+ "title": "Tabs 10",
+ "description": "Outlined pill-style tabs with border styling and transparent background",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-11",
+ "title": "Tabs 11",
+ "description": "Underline tabs with border bottom styling for minimal navigation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-12",
+ "title": "Tabs 12",
+ "description": "Sharp-cornered tabs with rectangular styling and bottom border",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-13",
+ "title": "Tabs 13",
+ "description": "Lifted tabs with shadow effects for elevated appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-14",
+ "title": "Tabs 14",
+ "description": "Overflow tabs with scrollable area for handling many tab items",
+ "type": "registry:component",
+ "registryDependencies": [
+ "scroll-area",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-15",
+ "title": "Tabs 15",
+ "description": "Vertical tabs layout with left-side navigation structure",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-16",
+ "title": "Tabs 16",
+ "description": "Vertical tabs with underline styling in left-side layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-17",
+ "title": "Tabs 17",
+ "description": "Soft vertical tabs with gentle styling and left navigation",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-18",
+ "title": "Tabs 18",
+ "description": "Vertical tabs with solid background styling and left layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-19",
+ "title": "Tabs 19",
+ "description": "Vertical tabs with sharp corners and rectangular styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-20",
+ "title": "Tabs 20",
+ "description": "Vertical tabs with lined separator styling for organized layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-21",
+ "title": "Tabs 21",
+ "description": "Vertical tabs with tooltip functionality for additional information",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-22",
+ "title": "Tabs 22",
+ "description": "Vertical tabs with icons for enhanced visual navigation",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-22.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-22.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-23",
+ "title": "Tabs 23",
+ "description": "Vertical tabs with badge indicators in left navigation layout",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-23.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-23.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-24",
+ "title": "Tabs 24",
+ "description": "Vertical tabs with outline styling for clean bordered appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-24.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-24.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-25",
+ "title": "Tabs 25",
+ "description": "Custom styled tabs with primary background active state and enhanced hover effects",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-25.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-25.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-26",
+ "title": "Tabs 26",
+ "description": "Custom tabs with underline styling using bottom border and no background",
+ "type": "registry:component",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-26.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-26.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs-27",
+ "title": "Tabs 27",
+ "description": "Animated tabs with motion highlight transitions using motion-tabs components",
+ "type": "registry:component",
+ "dependencies": [
+ "motion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-27.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-27.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-highlight.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/motion-highlight.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-tabs.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/motion-tabs.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "tabs-28",
+ "title": "Tabs 28",
+ "description": "Expandable tabs with icons and collapsible content using framer motion animations",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react",
+ "motion"
+ ],
+ "registryDependencies": [
+ "tabs",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-28.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-28.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "tabs-29",
+ "title": "Tabs 29",
+ "description": "Animated underline tabs with dynamic underline position tracking using framer motion",
+ "type": "registry:component",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-29.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-29.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "textarea-01",
+ "title": "Textarea 1",
+ "description": "A basic textarea input field with placeholder text",
+ "type": "registry:component",
+ "registryDependencies": [
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-02",
+ "title": "Textarea 2",
+ "description": "A textarea with associated label for improved accessibility",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-03",
+ "title": "Textarea 3",
+ "description": "A textarea with helper text below for additional context",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-04",
+ "title": "Textarea 4",
+ "description": "A textarea with right-aligned helper text for guidance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-05",
+ "title": "Textarea 5",
+ "description": "An invalid textarea with error styling and validation message",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-06",
+ "title": "Textarea 6",
+ "description": "A textarea with hint text providing user guidance and tips",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-07",
+ "title": "Textarea 7",
+ "description": "A required textarea with asterisk indicator for mandatory fields",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-08",
+ "title": "Textarea 8",
+ "description": "A textarea with colored border (indigo) styling and focus ring effects",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-09",
+ "title": "Textarea 9",
+ "description": "A filled textarea with muted background and transparent border styling",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-10",
+ "title": "Textarea 10",
+ "description": "Textarea size variations with small, default, and large height options",
+ "type": "registry:component",
+ "registryDependencies": [
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-11",
+ "title": "Textarea 11",
+ "description": "A textarea with start icon positioned on the left side",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-12",
+ "title": "Textarea 12",
+ "description": "A textarea with end icon positioned on the right side",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-13",
+ "title": "Textarea 13",
+ "description": "A textarea with overlapping label for modern form design",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-14",
+ "title": "Textarea 14",
+ "description": "A textarea with floating label that animates on focus",
+ "type": "registry:component",
+ "registryDependencies": [
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-15",
+ "title": "Textarea 15",
+ "description": "A textarea with inset label for compact form layouts",
+ "type": "registry:component",
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-16",
+ "title": "Textarea 16",
+ "description": "A textarea with separate submit button below for form submission",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-16.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-17",
+ "title": "Textarea 17",
+ "description": "An auto-growing textarea with field-sizing-content that expands with text content",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-17.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-18",
+ "title": "Textarea 18",
+ "description": "A textarea with disabled resize functionality for fixed dimensions",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-18.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-18.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-19",
+ "title": "Textarea 19",
+ "description": "A textarea with character count display and remaining characters indicator",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-19.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-19.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-20",
+ "title": "Textarea 20",
+ "description": "A read-only textarea with muted background styling for displaying non-editable content",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-20.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-20.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea-21",
+ "title": "Textarea 21",
+ "description": "A disabled textarea in non-interactive state for form display",
+ "type": "registry:component",
+ "registryDependencies": [
+ "label",
+ "textarea"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/textarea/textarea-21.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/textarea/textarea-21.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-01",
+ "title": "Tooltip 1",
+ "description": "A basic tooltip with simple text content displayed on hover",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-01.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-02",
+ "title": "Tooltip 2",
+ "description": "A light-themed tooltip with custom background and text colors",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-02.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-02.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-03",
+ "title": "Tooltip 3",
+ "description": "A tooltip without the arrow indicator for clean minimal appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-03.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-03.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-04",
+ "title": "Tooltip 4",
+ "description": "An error-styled tooltip with destructive color scheme for warnings",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-04.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-04.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-05",
+ "title": "Tooltip 5",
+ "description": "A tooltip with an icon and text content in a flexible layout",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-05.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-05.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-06",
+ "title": "Tooltip 6",
+ "description": "A tooltip with rounded corners for a modern soft appearance",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-06.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-06.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-07",
+ "title": "Tooltip 7",
+ "description": "A rich content tooltip with accessibility information, icon and formatted text",
+ "type": "registry:component",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-07.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-07.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-08",
+ "title": "Tooltip 8",
+ "description": "A tooltip displaying user information with avatar and name",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-08.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-08.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-09",
+ "title": "Tooltip 9",
+ "description": "A tooltip with badge indicator for pricing and status information",
+ "type": "registry:component",
+ "registryDependencies": [
+ "badge",
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-09.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-09.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-10",
+ "title": "Tooltip 10",
+ "description": "A directional tooltip demo showing placement on all four sides for e.g. top, right, bottom, left",
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-10.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-10.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-11",
+ "title": "Tooltip 11",
+ "description": "A hover card with media content including image and description links",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "hover-card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-11.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-11.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-12",
+ "title": "Tooltip 12",
+ "description": "A hover card displaying statistics with avatar and growth metrics",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "hover-card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-12.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-12.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-13",
+ "title": "Tooltip 13",
+ "description": "A project hover card with progress bar, timeline, and team avatars",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "hover-card",
+ "progress"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-13.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-13.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-14",
+ "title": "Tooltip 14",
+ "description": "An alert hover card with warning icon for error notifications",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "type": "registry:component",
+ "registryDependencies": [
+ "button",
+ "hover-card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-14.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-14.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-15",
+ "title": "Tooltip 15",
+ "description": "A hover card showing today's task completion with team member avatars and percentage progress",
+ "type": "registry:component",
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "hover-card"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-15.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-15.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tooltip-16",
+ "title": "Tooltip 16",
+ "description": "An animated tooltip with stacked avatars and hover effects using motion-tooltip component",
+ "type": "registry:component",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-16.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-16.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-tooltip.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/motion-tooltip.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "tooltip-17",
+ "title": "Tooltip 17",
+ "description": "A global tooltip system with overlapping avatars and hover scaling effects using global-tooltip component",
+ "type": "registry:component",
+ "dependencies": [
+ "motion"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tooltip/tooltip-17.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tooltip/tooltip-17.tsx"
+ },
+ {
+ "path": "src/components/ui/global-tooltip.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/global-tooltip.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+ },
+ {
+ "name": "about-us-page-01",
+ "title": "About Us 1",
+ "description": "Centered header with video/image section and overlapping stats grid card displaying icons, values, and descriptions",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/about-us-page/about-us-page-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/about-us-page-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/about-us-page-01/about-us-page-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/about-us-page-01/about-us-page-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "about-us-page"
+ }
+ },
+ {
+ "name": "app-integration-01",
+ "title": "App Integration 1",
+ "description": "Two-column layout with integration cards featuring tool logos, names, descriptions, and call-to-action for conversion-focused app showcases",
+ "type": "registry:block",
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/app-integration/app-integration-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/app-integration-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/app-integration-01/app-integration-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/app-integration-01/app-integration-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "app-integration"
+ }
+ },
+ {
+ "name": "blog-component-01",
+ "title": "Blog 1",
+ "description": "Three-column blog grid with featured images, titles, descriptions, and read more buttons for journey and destination content",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/blog-component/blog-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/blog-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/blog-component-01/blog-component-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/blog-component-01/blog-component-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "blog-component"
+ }
+ },
+ {
+ "name": "contact-us-page-01",
+ "title": "Contact Us 1",
+ "description": "Two-column layout with contact illustration image and contact information grid featuring avatar icons and contact details",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "avatar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/contact-us-page/contact-us-page-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/contact-us-page-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/contact-us-page-01/contact-us-page-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/contact-us-page-01/contact-us-page-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "contact-us-page"
+ }
+ },
+ {
+ "name": "cta-section-01",
+ "title": "CTA 1",
+ "description": "Rounded card layout with app download content featuring heading, description, and App Store/Google Play download buttons",
+ "type": "registry:block",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/cta-section/cta-section-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/cta-section-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/cta-section-01/cta-section-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/cta-section-01/cta-section-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "cta-section"
+ }
+ },
+ {
+ "name": "error-page-01",
+ "title": "Error 1",
+ "description": "Two-column error page layout with left-side text content (Whoops heading, error message, description) and right-side black background featuring centered astronaut illustration",
+ "type": "registry:block",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/error-page/error-page-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/error-page-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/error-page-01/error-page-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/error-page-01/error-page-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "error-page"
+ }
+ },
+ {
+ "name": "faq-component-01",
+ "title": "FAQ 1",
+ "description": "Simple accordion-style FAQ section with collapsible questions and answers using shadcn/ui accordion component, featuring a clean header and single-column layout for basic Q&A display",
+ "type": "registry:block",
+ "registryDependencies": [
+ "accordion"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/faq-component/faq-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/faq-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/faq-component-01/faq-component-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/faq-component-01/faq-component-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "faq-component"
+ }
+ },
+ {
+ "name": "features-section-01",
+ "title": "Features 1",
+ "description": "Three-column grid features section with header, description, \"See all features\" button, and feature cards containing avatar icons, titles, and descriptions",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card",
+ "button",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/features-section/features-section-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/features-section-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/features-section-01/features-section-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/features-section-01/features-section-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "features-section"
+ }
+ },
+ {
+ "name": "footer-component-01",
+ "title": "Footer 1",
+ "description": "Simple three-section footer with logo and brand name, centered navigation links, social media icons, separator line, and copyright text with heart emoji",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/footer-component/footer-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/footer-component-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/footer-component-01/footer-component-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/footer-component-01/footer-component-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "footer-component"
+ }
+ },
+ {
+ "name": "forgot-password-01",
+ "title": "Forgot Password 1",
+ "description": "Centered card layout with logo header, title, description, and form input for password reset functionality with decorative background shape",
+ "type": "registry:block",
+ "registryDependencies": [
+ "button",
+ "card",
+ "input",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/forgot-password/forgot-password-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/forgot-password-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/forgot-password-01/forgot-password-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/forgot-password-01/forgot-password-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/forgot-password-01/forgot-password-form.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/forgot-password-01/forgot-password-form.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "forgot-password"
+ }
+ },
+ {
+ "name": "gallery-component-01",
+ "title": "Gallery 1",
+ "description": "Gallery section with centered header featuring underlined text highlight, flexible grid layout supporting both single images and 2x2 grid sections for versatile image arrangement",
+ "type": "registry:block",
+ "registryDependencies": [
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/gallery-component/gallery-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/gallery-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/gallery-component-01/gallery-component-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/gallery-component-01/gallery-component-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "gallery-component"
+ }
+ },
+ {
+ "name": "hero-section-01",
+ "title": "Hero 1",
+ "description": "Centered vertical layout hero with navigation header, AI-powered badge in muted container, decorative SVG underline animation on \"Effortless\" text, call-to-action button, and full-width bottom dish image showcase",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "dropdown-menu",
+ "navigation-menu",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/hero-section/hero-section-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/hero-section-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/hero-section-01/header.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/hero-section-01/header.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/hero-section-01/hero-section-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/hero-section-01/hero-section-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "hero-section"
+ }
+ },
+ {
+ "name": "login-page-01",
+ "title": "Login 1",
+ "description": "Centered card layout with logo header, quick login buttons, and full authentication form featuring email/password inputs, social login options, and remember me functionality",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card",
+ "checkbox",
+ "input",
+ "label",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/login-page/login-page-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/login-page-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/login-page-01/login-form.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/login-page-01/login-form.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/login-page-01/login-page-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/login-page-01/login-page-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "login-page"
+ }
+ },
+ {
+ "name": "logo-cloud-01",
+ "title": "Logo Cloud 1",
+ "description": "Muted background logo cloud with centered card container, underlined text highlight, and flexbox logo grid arrangement with responsive gap spacing and centered alignment",
+ "type": "registry:block",
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/logo-cloud/logo-cloud-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/logo-cloud-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/logo-cloud-01/logo-cloud-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/logo-cloud-01/logo-cloud-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "logo-cloud"
+ }
+ },
+ {
+ "name": "navbar-component-01",
+ "title": "Navbar 1",
+ "description": "A sticky navigation header with centered logo and brand name flanked symmetrically by navigation links on both sides. Features a search icon button and responsive mobile dropdown menu, perfect for balanced logo-centric layouts.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/navbar-component/navbar-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/navbar-component-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/navbar-component-01/navbar-component-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/navbar-component-01/navbar-component-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "navbar-component"
+ }
+ },
+ {
+ "name": "portfolio-01",
+ "title": "Portfolio 1",
+ "description": "Portfolio showcase with masonry grid layout featuring project details, client information, and social media links",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/portfolio/portfolio-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/portfolio-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/portfolio-01/portfolio-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/portfolio-01/portfolio-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "portfolio"
+ }
+ },
+ {
+ "name": "pricing-component-01",
+ "title": "Pricing 1",
+ "description": "Interactive pricing cards with monthly/annual toggle switch and plan comparison features",
+ "type": "registry:block",
+ "registryDependencies": [
+ "button",
+ "card",
+ "switch",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/pricing-component/pricing-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/pricing-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/pricing-component-01/pricing-component-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/pricing-component-01/pricing-component-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "pricing-component"
+ }
+ },
+ {
+ "name": "register-01",
+ "title": "Register 1",
+ "description": "Centered card layout with logo header, registration form featuring full name, email, password inputs, social signup options, and account linking for comprehensive user onboarding",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card",
+ "checkbox",
+ "input",
+ "label",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/register/register-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/register-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/register-01/register-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/register-01/register-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/register-01/register-form.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/register-01/register-form.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "register"
+ }
+ },
+ {
+ "name": "reset-password-01",
+ "title": "Reset Password 1",
+ "description": "Centered card layout with logo header, clear reset password messaging, form inputs for current and new passwords, and back to login navigation for secure password recovery",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card",
+ "input",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/reset-password/reset-password-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/reset-password-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/reset-password-01/reset-password-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/reset-password-01/reset-password-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/reset-password-01/reset-password-form.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/reset-password-01/reset-password-form.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "reset-password"
+ }
+ },
+ {
+ "name": "social-proof-01",
+ "title": "Social Proof 1",
+ "description": "Feature checklist layout with split design showcasing product benefits alongside a complementary image. Perfect for highlighting key features with checkmark icons and descriptive content.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/social-proof/social-proof-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/social-proof-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/social-proof-01/social-proof-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/social-proof-01/social-proof-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "social-proof"
+ }
+ },
+ {
+ "name": "team-section-01",
+ "title": "Team 1",
+ "description": "A clean team showcase featuring a responsive 4-column grid layout with member cards, social media links, and hover effects. Perfect for displaying team members with their photos, names, roles, and social connections.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "separator"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/team-section/team-section-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/team-section-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/team-section-01/team-section-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/team-section-01/team-section-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "team-section"
+ }
+ },
+ {
+ "name": "testimonials-component-01",
+ "title": "Testimonials 1",
+ "description": "Testimonials section with side content and carousel featuring customer feedback with star ratings and avatars",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card",
+ "carousel",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/testimonials-component/testimonials-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/testimonials-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/testimonials-component-01/testimonials-component-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/testimonials-component-01/testimonials-component-01.tsx"
+ },
+ {
+ "path": "src/components/ui/rating.tsx",
+ "type": "registry:ui",
+ "target": "components/ui/rating.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "testimonials-component"
+ }
+ },
+ {
+ "name": "two-factor-authentication-01",
+ "title": "Two Factor Authentication 1",
+ "description": "Centered card layout with logo header, clear two-factor authentication messaging, OTP input field, and authenticator app instructions for secure account verification",
+ "type": "registry:block",
+ "registryDependencies": [
+ "button",
+ "card",
+ "input-otp",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/two-factor-authentication/two-factor-authentication-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/two-factor-authentication-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/two-factor-authentication-01/two-factor-authentication-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/two-factor-authentication-01/two-factor-authentication-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/two-factor-authentication-01/two-factor-authentication-form.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/two-factor-authentication-01/two-factor-authentication-form.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "two-factor-authentication"
+ }
+ },
+ {
+ "name": "verify-email-01",
+ "title": "Verify Email 1",
+ "description": "Centered card layout with logo header, email verification messaging, activation link instructions, skip option, and resend link for streamlined email confirmation",
+ "type": "registry:block",
+ "registryDependencies": [
+ "button",
+ "card",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/verify-email/verify-email-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/verify-email-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/verify-email-01/verify-email-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/verify-email-01/verify-email-01.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "verify-email"
+ }
+ },
+ {
+ "name": "application-shell-01",
+ "title": "Application Shell 1",
+ "description": "Classic sidebar application shell with navigation menu, user profile, and language selector for traditional dashboard layouts.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "separator",
+ "sidebar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/application-shell/application-shell-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/application-shell-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-language.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-language.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-profile.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-profile.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "application-shell"
+ }
+ },
+ {
+ "name": "chart-component-01",
+ "title": "Chart 1",
+ "description": "Comprehensive sales metrics dashboard featuring company profile, key performance indicators (sales trend, discounts, profit, orders), pie chart for revenue goals, and bar chart for sales plan completion with cohort analysis tools.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "card",
+ "chart"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/charts-component/chart-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/chart-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/chart-sales-metrics.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/chart-sales-metrics.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "charts-component"
+ }
+ },
+ {
+ "name": "dashboard-dialog-01",
+ "title": "Dashboard Dialog 1",
+ "description": "A subscription plan selection dialog with pricing options, features comparison, and radio button selection for choosing between different tiers.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "dialog",
+ "label",
+ "radio-group",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-dialog/dashboard-dialog-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/dashboard-dialog-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dashboard-dialog-01/dialog-plan.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dashboard-dialog-01/dialog-plan.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-dialog"
+ }
+ },
+ {
+ "name": "dashboard-shell-01",
+ "title": "Dashboard Shell 1",
+ "description": "Comprehensive dashboard layout with sidebar navigation, breadcrumb header, sales metrics charts, statistics cards, transaction tables, and widget components for business analytics and reporting",
+ "type": "registry:block",
+ "dependencies": [
+ "@tanstack/react-table",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "badge",
+ "breadcrumb",
+ "button",
+ "card",
+ "chart",
+ "dropdown-menu",
+ "pagination",
+ "progress",
+ "separator",
+ "sidebar",
+ "table",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-shell/dashboard-shell-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/dashboard-shell-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/chart-sales-metrics.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/chart-sales-metrics.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/datatable-transaction.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/datatable-transaction.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-language.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-language.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-profile.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-profile.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/statistics-card-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/statistics-card-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/widget-product-insights.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/widget-product-insights.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/widget-total-earning.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/widget-total-earning.tsx"
+ },
+ {
+ "path": "src/hooks/use-pagination.ts",
+ "type": "registry:hook",
+ "target": "hooks/use-pagination.ts"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-shell"
+ }
+ },
+ {
+ "name": "dashboard-dropdown-01",
+ "title": "Dashboard Dropdown 1",
+ "description": "A language selection dropdown with flag icons and language options for internationalization and localization features.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-dropdown/dashboard-dropdown-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/dashboard-dropdown-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-language.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-language.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-dropdown"
+ }
+ },
+ {
+ "name": "dashboard-dropdown-02",
+ "title": "Dashboard Dropdown 2",
+ "description": "A user profile dropdown with avatar display, user information, profile settings, and account actions for user management.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "dropdown-menu"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-dropdown/dashboard-dropdown-02/page.tsx",
+ "type": "registry:page",
+ "target": "app/dashboard-dropdown-02/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-profile.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-profile.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-dropdown"
+ }
+ },
+ {
+ "name": "dashboard-footer-01",
+ "title": "Dashboard Footer 1",
+ "description": "A complete dashboard layout with sidebar, main content area, and footer featuring copyright text with social media icons (Facebook, Instagram, LinkedIn, Twitter) for application branding.",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "sidebar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-footer/dashboard-footer-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/dashboard-footer-01/page.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-footer"
+ }
+ },
+ {
+ "name": "dashboard-header-01",
+ "title": "Dashboard Header 1",
+ "description": "Comprehensive dashboard header with navigation, breadcrumbs, user profile, and language dropdown",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "separator",
+ "sidebar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-header/dashboard-header-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/dashboard-header-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-language.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-language.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/dropdown-profile.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/dropdown-profile.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-header"
+ }
+ },
+ {
+ "name": "dashboard-sidebar-01",
+ "title": "Dashboard Sidebar 1",
+ "description": "Social media analytics dashboard sidebar featuring Content Performance, Audience Insights, Hashtag Performance, Competitor Analysis, Influencer tracking, Campaign Tracking, Sentiment Tracking, Real Time Monitoring, and Schedule Post & Calendar navigation",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "sidebar"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/dashboard-sidebar/dashboard-sidebar-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/dashboard-sidebar-01/page.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "dashboard-sidebar"
+ }
+ },
+ {
+ "name": "statistics-component-01",
+ "title": "Statistics 1",
+ "description": "Logistics and shipping statistics cards displaying Shipped Orders, Damaged Returns, Missed Delivery Slots, and Late Deliveries with percentage change indicators and \"than last week\" comparison periods",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/statistics-component/statistics-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/statistics-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/statistics-card-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/statistics-card-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "statistics-component"
+ }
+ },
+ {
+ "name": "widget-component-01",
+ "title": "Widget 1",
+ "description": "Total earnings widget with progress tracking, interactive controls, and comprehensive financial overview",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "card",
+ "dropdown-menu",
+ "progress"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/widgets-component/widget-component-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/widget-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/widget-total-earning.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/widget-total-earning.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "widgets-component"
+ }
+ },
+ {
+ "name": "widget-component-02",
+ "title": "Widget 2",
+ "description": "Product insights widget with advanced analytics, chart visualization, and comprehensive product data overview",
+ "type": "registry:block",
+ "dependencies": [
+ "lucide-react",
+ "recharts"
+ ],
+ "registryDependencies": [
+ "card",
+ "chart",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/widgets-component/widget-component-02/page.tsx",
+ "type": "registry:page",
+ "target": "app/widget-component-02/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/widget-product-insights.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/widget-product-insights.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "widgets-component"
+ }
+ },
+ {
+ "name": "product-list-01",
+ "title": "Product List 1",
+ "description": "Three-column grid layout with product cards featuring centered images, product names with badges, separator lines, pricing with sale discounts, wishlist checkboxes and shopping cart icons",
+ "type": "registry:block",
+ "dependencies": [
+ "@radix-ui/react-checkbox",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "badge",
+ "button",
+ "card",
+ "separator",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/ecommerce/product-list/product-list-01/page.tsx",
+ "type": "registry:page",
+ "target": "app/product-list-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/product-list-01/product-list-01.tsx",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/product-list-01/product-list-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "ecommerce",
+ "section": "product-list"
+ }
+ },
+ {
+ "name": "marshmallow",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Gabriela, Geist Fallback, ui-sans-serif",
+ "font-mono": "Geist Mono, Geist Mono Fallback, ui-monospace",
+ "font-serif": "Gabriela, Geist Fallback, ui-serif",
+ "radius": "0rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.97 0.01 267.41)",
+ "foreground": "oklch(0.22 0 0)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.22 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.22 0 0)",
+ "primary": "oklch(0.80 0.14 348.82)",
+ "primary-foreground": "oklch(0 0 0)",
+ "secondary": "oklch(0.94 0.07 97.70)",
+ "secondary-foreground": "oklch(0 0 0)",
+ "muted": "oklch(0.92 0.01 273.42)",
+ "muted-foreground": "oklch(0.34 0 0)",
+ "accent": "oklch(0.83 0.09 247.96)",
+ "accent-foreground": "oklch(0 0 0)",
+ "destructive": "oklch(0.70 0.19 23.04)",
+ "border": "oklch(0.85 0 0)",
+ "input": "oklch(0.85 0 0)",
+ "ring": "oklch(0.83 0.09 247.96)",
+ "chart-1": "oklch(0.80 0.14 348.82)",
+ "chart-2": "oklch(0.77 0.15 306.21)",
+ "chart-3": "oklch(0.83 0.09 247.96)",
+ "chart-4": "oklch(0.88 0.09 66.79)",
+ "chart-5": "oklch(0.94 0.14 130.35)",
+ "sidebar": "oklch(1.00 0 0)",
+ "sidebar-foreground": "oklch(0.22 0 0)",
+ "sidebar-primary": "oklch(0.80 0.14 348.82)",
+ "sidebar-primary-foreground": "oklch(0 0 0)",
+ "sidebar-accent": "oklch(0.83 0.09 247.96)",
+ "sidebar-accent-foreground": "oklch(0 0 0)",
+ "sidebar-border": "oklch(0.85 0 0)",
+ "sidebar-ring": "oklch(0.83 0.09 247.96)",
+ "font-sans": "Gabriela, Geist Fallback, ui-sans-serif",
+ "font-serif": "Gabriela, Geist Fallback, ui-serif",
+ "font-mono": "Geist Mono, Geist Mono Fallback, ui-monospace",
+ "radius": "0rem",
+ "shadow-color": "oklch(0.83 0.09 248.95 )",
+ "shadow-opacity": "0.10",
+ "shadow-blur": "5px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "2px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.05)",
+ "shadow-xs": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.05)",
+ "shadow-sm": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 1px 2px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 1px 2px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-md": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 2px 4px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-lg": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 4px 6px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-xl": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 8px 10px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-2xl": "0px 2px 5px 0px oklch(0.83 0.09 247.96 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.22 0 0)",
+ "foreground": "oklch(0.97 0.01 267.41)",
+ "card": "oklch(0.29 0 0)",
+ "card-foreground": "oklch(0.97 0.01 267.41)",
+ "popover": "oklch(0.29 0 0)",
+ "popover-foreground": "oklch(0.97 0.01 267.41)",
+ "primary": "oklch(0.80 0.14 348.82)",
+ "primary-foreground": "oklch(0.22 0 0)",
+ "secondary": "oklch(0.77 0.15 306.21)",
+ "secondary-foreground": "oklch(0.22 0 0)",
+ "muted": "oklch(0.32 0 0)",
+ "muted-foreground": "oklch(0.85 0 0)",
+ "accent": "oklch(0.83 0.09 247.96)",
+ "accent-foreground": "oklch(0.22 0 0)",
+ "destructive": "oklch(0.70 0.19 23.04)",
+ "border": "oklch(0.39 0 0)",
+ "input": "oklch(0.39 0 0)",
+ "ring": "oklch(0.83 0.09 247.96)",
+ "chart-1": "oklch(0.80 0.14 348.82)",
+ "chart-2": "oklch(0.77 0.15 306.21)",
+ "chart-3": "oklch(0.83 0.09 247.96)",
+ "chart-4": "oklch(0.88 0.09 66.79)",
+ "chart-5": "oklch(0.94 0.14 130.35)",
+ "sidebar": "oklch(0.29 0 0)",
+ "sidebar-foreground": "oklch(0.97 0.01 267.41)",
+ "sidebar-primary": "oklch(0.80 0.14 348.82)",
+ "sidebar-primary-foreground": "oklch(0.22 0 0)",
+ "sidebar-accent": "oklch(0.83 0.09 247.96)",
+ "sidebar-accent-foreground": "oklch(0.22 0 0)",
+ "sidebar-border": "oklch(0.39 0 0)",
+ "sidebar-ring": "oklch(0.83 0.09 247.96)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0.83 0.09 248.95 / 0.10)",
+ "shadow-opacity": "0.10",
+ "shadow-blur": "2px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.05)",
+ "shadow-xs": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.05)",
+ "shadow-sm": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 1px 2px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 1px 2px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-md": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 2px 4px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-lg": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 4px 6px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-xl": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.10), 0px 8px 10px -1px oklch(0.83 0.09 247.96 / 0.10)",
+ "shadow-2xl": "0px 1px 2px 0px oklch(0.83 0.09 247.96 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "art-deco",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Delius Swash Caps",
+ "font-mono": "Delius Swash Caps",
+ "font-serif": "Delius Swash Caps",
+ "radius": "0.625rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.96 0.03 106.92)",
+ "foreground": "oklch(0.40 0.07 90.80)",
+ "card": "oklch(0.98 0.04 97.73)",
+ "card-foreground": "oklch(0.32 0 0)",
+ "popover": "oklch(0.98 0.04 97.73)",
+ "popover-foreground": "oklch(0.32 0 0)",
+ "primary": "oklch(0.77 0.14 91.27)",
+ "primary-foreground": "oklch(0 0 0)",
+ "secondary": "oklch(0.67 0.13 61.58)",
+ "secondary-foreground": "oklch(0 0 0)",
+ "muted": "oklch(0.93 0.03 106.94)",
+ "muted-foreground": "oklch(0.32 0 0)",
+ "accent": "oklch(0.89 0.18 95.47)",
+ "accent-foreground": "oklch(0.32 0 0)",
+ "destructive": "oklch(0.69 0.20 32.29)",
+ "border": "oklch(0.83 0.11 93.01)",
+ "input": "oklch(0.65 0.13 81.66)",
+ "ring": "oklch(0.75 0.15 84.05)",
+ "chart-1": "oklch(0.89 0.18 95.47)",
+ "chart-2": "oklch(0.67 0.13 61.58)",
+ "chart-3": "oklch(0.65 0.13 81.66)",
+ "chart-4": "oklch(0.75 0.15 84.05)",
+ "chart-5": "oklch(0.77 0.14 91.27)",
+ "sidebar": "oklch(0.96 0.03 106.92)",
+ "sidebar-foreground": "oklch(0.32 0 0)",
+ "sidebar-primary": "oklch(0.77 0.14 91.27)",
+ "sidebar-primary-foreground": "oklch(0.32 0 0)",
+ "sidebar-accent": "oklch(0.89 0.18 95.47)",
+ "sidebar-accent-foreground": "oklch(0.32 0 0)",
+ "sidebar-border": "oklch(0.65 0.13 81.66)",
+ "sidebar-ring": "oklch(0.75 0.15 84.05)",
+ "font-sans": "Delius Swash Caps",
+ "font-serif": "Delius Swash Caps",
+ "font-mono": "Delius Swash Caps",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0.70 0.17 28.12 / 30%)",
+ "shadow-opacity": "0.05",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-md": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 2px 4px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 4px 6px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 8px 10px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.13)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.32 0 0)",
+ "foreground": "oklch(0.96 0.03 106.92)",
+ "card": "oklch(0.41 0 0)",
+ "card-foreground": "oklch(0.96 0.03 106.92)",
+ "popover": "oklch(0.41 0 0)",
+ "popover-foreground": "oklch(0.96 0.03 106.92)",
+ "primary": "oklch(0.84 0.17 83.07)",
+ "primary-foreground": "oklch(0 0 0)",
+ "secondary": "oklch(0.47 0.11 50.64)",
+ "secondary-foreground": "oklch(0.96 0.03 106.92)",
+ "muted": "oklch(0.44 0 0)",
+ "muted-foreground": "oklch(0.96 0.03 106.92)",
+ "accent": "oklch(0.66 0.14 79.74)",
+ "accent-foreground": "oklch(0 0 0)",
+ "destructive": "oklch(0.66 0.23 35.22)",
+ "border": "oklch(0.47 0.11 50.64)",
+ "input": "oklch(0.47 0.11 50.64)",
+ "ring": "oklch(0.65 0.13 81.66)",
+ "chart-1": "oklch(0.75 0.15 84.05)",
+ "chart-2": "oklch(0.47 0.11 50.64)",
+ "chart-3": "oklch(0.65 0.13 81.66)",
+ "chart-4": "oklch(0.75 0.15 84.05)",
+ "chart-5": "oklch(0.65 0.13 81.66)",
+ "sidebar": "oklch(0.32 0 0)",
+ "sidebar-foreground": "oklch(1.00 0 0)",
+ "sidebar-primary": "oklch(0.61 0.13 79.65)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.75 0.15 84.05)",
+ "sidebar-accent-foreground": "oklch(0.96 0.03 106.92)",
+ "sidebar-border": "oklch(0.47 0.11 50.64)",
+ "sidebar-ring": "oklch(0.65 0.13 81.66)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0.00 0 0 / 0.05)",
+ "shadow-opacity": "0.05",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.03)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.03)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 1px 2px -1px oklch(0 0 0 / 0.05)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 1px 2px -1px oklch(0 0 0 / 0.05)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 2px 4px -1px oklch(0 0 0 / 0.05)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 4px 6px -1px oklch(0 0 0 / 0.05)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.05), 0px 8px 10px -1px oklch(0 0 0 / 0.05)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.13)"
+ }
+ }
+ },
+ {
+ "name": "vs-code",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "'Source Code Pro', 'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-mono": "'Source Code Pro', 'Geist Mono', 'Geist Mono Fallback', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace",
+ "font-serif": "'Source Serif 4', 'Geist', 'Geist Fallback', ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif",
+ "radius": "0rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.97 0.02 225.66)",
+ "foreground": "oklch(0.15 0.02 269.18)",
+ "card": "oklch(0.98 0.01 228.79)",
+ "card-foreground": "oklch(0.15 0.02 269.18)",
+ "popover": "oklch(0.98 0.01 238.45)",
+ "popover-foreground": "oklch(0.15 0.02 269.18)",
+ "primary": "oklch(0.71 0.15 239.15)",
+ "primary-foreground": "oklch(0.94 0.03 232.39)",
+ "secondary": "oklch(0.91 0.03 229.20)",
+ "secondary-foreground": "oklch(0.15 0.02 269.18)",
+ "muted": "oklch(0.89 0.02 225.69)",
+ "muted-foreground": "oklch(0.36 0.03 231.55)",
+ "accent": "oklch(0.88 0.02 235.72)",
+ "accent-foreground": "oklch(0.34 0.05 229.20)",
+ "destructive": "oklch(0.61 0.24 20.96)",
+ "border": "oklch(0.82 0.02 240.77)",
+ "input": "oklch(0.82 0.02 240.77)",
+ "ring": "oklch(0.55 0.10 235.72)",
+ "chart-1": "oklch(0.57 0.11 228.92)",
+ "chart-2": "oklch(0.45 0.10 270.08)",
+ "chart-3": "oklch(0.65 0.15 159.03)",
+ "chart-4": "oklch(0.75 0.10 100.01)",
+ "chart-5": "oklch(0.55 0.15 299.88)",
+ "sidebar": "oklch(0.93 0.01 238.46)",
+ "sidebar-foreground": "oklch(0.15 0.02 269.18)",
+ "sidebar-primary": "oklch(0.57 0.11 228.92)",
+ "sidebar-primary-foreground": "oklch(0.99 0.01 203.97)",
+ "sidebar-accent": "oklch(0.88 0.02 235.72)",
+ "sidebar-accent-foreground": "oklch(0.15 0.02 269.18)",
+ "sidebar-border": "oklch(0.82 0.02 240.77)",
+ "sidebar-ring": "oklch(0.57 0.11 228.92)",
+ "font-sans": "'Source Code Pro', 'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "'Source Serif 4', 'Geist', 'Geist Fallback', ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif",
+ "font-mono": "'Source Code Pro', 'Geist Mono', 'Geist Mono Fallback', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace",
+ "radius": "0rem",
+ "shadow-color": "oklch(0.49 0.09 235.45)",
+ "shadow-opacity": "0.06",
+ "shadow-blur": "2.5px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 2.5px 0px oklch(0.49 0.09 235.00 / 0.03)",
+ "shadow-xs": "0px 1px 2.5px 0px oklch(0.49 0.09 235.00 / 0.03)",
+ "shadow-sm": "0px 1px 2.5px 0px oklch(0.49 0.09 235.00 / 0.06), 0px 1px 2px -1px oklch(0.49 0.09 235.00 / 0.06)",
+ "shadow": "0px 1px 2.5px 0px oklch(0.49 0.09 235.00 / 0.06), 0px 1px 2px -1px oklch(0.49 0.09 235.00 / 0.06)",
+ "shadow-md": "0px 1px 2.5px 0px oklch(0.49 0.09 235.00 / 0.06), 0px 2px 4px -1px oklch(0.49 0.09 235.00 / 0.06)",
+ "shadow-lg": "0px 1px 2.5px 0px oklch(0.49 0.09 235.00 / 0.06), 0px 4px 6px -1px oklch(0.49 0.09 235.00 / 0.06)",
+ "shadow-xl": "0px 1px 2.5px 0px oklch(0.49 0.09 235.00 / 0.06), 0px 8px 10px -1px oklch(0.49 0.09 235.00 / 0.06)",
+ "shadow-2xl": "0px 1px 2.5px 0px oklch(0.49 0.09 235.00 / 0.15)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.18 0.02 271.27)",
+ "foreground": "oklch(0.90 0.01 238.47)",
+ "card": "oklch(0.22 0.02 271.67)",
+ "card-foreground": "oklch(0.90 0.01 238.47)",
+ "popover": "oklch(0.22 0.02 271.67)",
+ "popover-foreground": "oklch(0.90 0.01 238.47)",
+ "primary": "oklch(0.71 0.15 239.15)",
+ "primary-foreground": "oklch(0.94 0.03 232.39)",
+ "secondary": "oklch(0.28 0.03 270.91)",
+ "secondary-foreground": "oklch(0.90 0.01 238.47)",
+ "muted": "oklch(0.28 0.03 270.91)",
+ "muted-foreground": "oklch(0.60 0.03 269.46)",
+ "accent": "oklch(0.28 0.03 270.91)",
+ "accent-foreground": "oklch(0.90 0.01 238.47)",
+ "destructive": "oklch(0.64 0.25 19.69)",
+ "border": "oklch(0.90 0.01 238.47 / 15%)",
+ "input": "oklch(0.90 0.01 238.47 / 20%)",
+ "ring": "oklch(0.66 0.13 227.70)",
+ "chart-1": "oklch(0.66 0.13 227.70)",
+ "chart-2": "oklch(0.60 0.10 269.83)",
+ "chart-3": "oklch(0.70 0.15 159.83)",
+ "chart-4": "oklch(0.80 0.10 100.65)",
+ "chart-5": "oklch(0.60 0.15 300.14)",
+ "sidebar": "oklch(0.22 0.02 271.67)",
+ "sidebar-foreground": "oklch(0.90 0.01 238.47)",
+ "sidebar-primary": "oklch(0.66 0.13 227.70)",
+ "sidebar-primary-foreground": "oklch(0.18 0.02 271.27)",
+ "sidebar-accent": "oklch(0.28 0.03 270.91)",
+ "sidebar-accent-foreground": "oklch(0.90 0.01 238.47)",
+ "sidebar-border": "oklch(0.90 0.01 238.47 / 15%)",
+ "sidebar-ring": "oklch(0.66 0.13 227.70)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0 0 0)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "2px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 2px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 2px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 2px 0px oklch(0 0 0 / 0.03)"
+ }
+ }
+ },
+ {
+ "name": "spotify",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Lato, sans-serif",
+ "font-mono": "Roboto Mono, Geist Mono, Geist Mono Fallback, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "font-serif": "Merriweather, Geist, Geist Fallback, ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "radius": "0.25rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.99 0 0)",
+ "foreground": "oklch(0.35 0.02 165.48)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.35 0.02 165.48)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.35 0.02 165.48)",
+ "primary": "oklch(0.67 0.17 153.85)",
+ "primary-foreground": "oklch(0.99 0.02 175.22)",
+ "secondary": "oklch(0.90 0.02 238.66)",
+ "secondary-foreground": "oklch(0.20 0.02 266.02)",
+ "muted": "oklch(0.90 0.02 240.73)",
+ "muted-foreground": "oklch(0.50 0.03 268.53)",
+ "accent": "oklch(0.90 0.02 240.73)",
+ "accent-foreground": "oklch(0.35 0.02 165.48)",
+ "destructive": "oklch(0.61 0.24 20.96)",
+ "border": "oklch(0.94 0.01 238.46)",
+ "input": "oklch(0.85 0.02 240.75)",
+ "ring": "oklch(0.67 0.17 153.85)",
+ "chart-1": "oklch(0.67 0.17 153.85)",
+ "chart-2": "oklch(0.50 0.10 270.06)",
+ "chart-3": "oklch(0.72 0.12 201.79)",
+ "chart-4": "oklch(0.80 0.10 100.65)",
+ "chart-5": "oklch(0.60 0.15 300.14)",
+ "sidebar": "oklch(0.98 0.01 238.45)",
+ "sidebar-foreground": "oklch(0.35 0.02 165.48)",
+ "sidebar-primary": "oklch(0.67 0.17 153.85)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 238.45)",
+ "sidebar-accent": "oklch(0.90 0.02 240.73)",
+ "sidebar-accent-foreground": "oklch(0.35 0.02 165.48)",
+ "sidebar-border": "oklch(0.85 0.02 240.75)",
+ "sidebar-ring": "oklch(0.67 0.17 153.85)",
+ "font-sans": "Lato, sans-serif",
+ "font-serif": "Merriweather, Geist, Geist Fallback, ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "Roboto Mono, Geist Mono, Geist Mono Fallback, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "radius": "0.25rem",
+ "shadow-color": "oklch(0.35 0.05 163.50)",
+ "shadow-opacity": "0.04",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.02)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.02)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 1px 2px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 1px 2px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow-md": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 2px 4px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 4px 6px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 8px 10px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.10)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.15 0.02 269.18)",
+ "foreground": "oklch(0.95 0.01 238.46)",
+ "card": "oklch(0.20 0.02 266.02)",
+ "card-foreground": "oklch(0.95 0.01 238.46)",
+ "popover": "oklch(0.20 0.02 266.02)",
+ "popover-foreground": "oklch(0.95 0.01 238.46)",
+ "primary": "oklch(0.67 0.17 153.85)",
+ "primary-foreground": "oklch(0.15 0.02 269.18)",
+ "secondary": "oklch(0.30 0.03 271.05)",
+ "secondary-foreground": "oklch(0.95 0.01 238.46)",
+ "muted": "oklch(0.30 0.03 271.05)",
+ "muted-foreground": "oklch(0.60 0.03 269.46)",
+ "accent": "oklch(0.30 0.03 271.05)",
+ "accent-foreground": "oklch(0.95 0.01 238.46)",
+ "destructive": "oklch(0.64 0.25 19.69)",
+ "border": "oklch(0.95 0.01 238.46 / 15%)",
+ "input": "oklch(0.95 0.01 238.46 / 20%)",
+ "ring": "oklch(0.67 0.17 153.85)",
+ "chart-1": "oklch(0.67 0.17 153.85)",
+ "chart-2": "oklch(0.60 0.10 269.83)",
+ "chart-3": "oklch(0.72 0.12 201.79)",
+ "chart-4": "oklch(0.80 0.10 100.65)",
+ "chart-5": "oklch(0.60 0.15 300.14)",
+ "sidebar": "oklch(0.20 0.02 266.02)",
+ "sidebar-foreground": "oklch(0.95 0.01 238.46)",
+ "sidebar-primary": "oklch(0.67 0.17 153.85)",
+ "sidebar-primary-foreground": "oklch(0.15 0.02 269.18)",
+ "sidebar-accent": "oklch(0.30 0.03 271.05)",
+ "sidebar-accent-foreground": "oklch(0.95 0.01 238.46)",
+ "sidebar-border": "oklch(0.95 0.01 238.46 / 15%)",
+ "sidebar-ring": "oklch(0.67 0.17 153.85)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0 0 0)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "2px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 2px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 2px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 2px 0px oklch(0 0 0 / 0.03)"
+ }
+ }
+ },
+ {
+ "name": "summer",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Nunito, Segoe UI, Tahoma, Geneva, Verdana, sans-serif",
+ "font-mono": "Fira Code, ui-monospace, SFMono-Regular",
+ "font-serif": "Lora, ui-serif, Georgia, Cambria, Times New Roman, Times, serif",
+ "radius": "0.6rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0.01 81.76)",
+ "foreground": "oklch(0.38 0.02 64.16)",
+ "card": "oklch(0.97 0.02 72.57)",
+ "card-foreground": "oklch(0.38 0.02 64.16)",
+ "popover": "oklch(0.96 0.04 83.12)",
+ "popover-foreground": "oklch(0.38 0.02 64.16)",
+ "primary": "oklch(0.70 0.17 28.12)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.81 0.15 71.81)",
+ "secondary-foreground": "oklch(0.38 0.02 64.16)",
+ "muted": "oklch(0.94 0.03 61.12)",
+ "muted-foreground": "oklch(0.62 0.06 59.24)",
+ "accent": "oklch(0.64 0.22 28.93)",
+ "accent-foreground": "oklch(1.00 0 0)",
+ "destructive": "oklch(0.57 0.20 26.34)",
+ "border": "oklch(0.87 0.08 65.83)",
+ "input": "oklch(0.96 0.03 78.77)",
+ "ring": "oklch(0.70 0.17 28.12)",
+ "chart-1": "oklch(0.70 0.17 28.12)",
+ "chart-2": "oklch(0.81 0.15 71.81)",
+ "chart-3": "oklch(0.71 0.18 37.63)",
+ "chart-4": "oklch(0.89 0.15 91.66)",
+ "chart-5": "oklch(0.59 0.19 36.05)",
+ "sidebar": "oklch(0.97 0.02 72.57)",
+ "sidebar-foreground": "oklch(0.38 0.02 64.16)",
+ "sidebar-primary": "oklch(0.70 0.17 28.12)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.81 0.15 71.81)",
+ "sidebar-accent-foreground": "oklch(0.38 0.02 64.16)",
+ "sidebar-border": "oklch(0.87 0.08 65.83)",
+ "sidebar-ring": "oklch(0.70 0.17 28.12)",
+ "font-sans": "Nunito, Segoe UI, Tahoma, Geneva, Verdana, sans-serif",
+ "font-serif": "Lora, ui-serif, Georgia, Cambria, Times New Roman, Times, serif",
+ "font-mono": "Fira Code, ui-monospace, SFMono-Regular",
+ "radius": "0.6rem",
+ "shadow-color": "oklch(0.70 0.17 28.12 / 30%)",
+ "shadow-opacity": "0.05",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-md": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 2px 4px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 4px 6px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 8px 10px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.13)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.26 0.02 63.41)",
+ "foreground": "oklch(0.87 0.08 65.83)",
+ "card": "oklch(0.31 0.03 60.03)",
+ "card-foreground": "oklch(0.87 0.08 65.83)",
+ "popover": "oklch(0.36 0.03 54.43)",
+ "popover-foreground": "oklch(0.87 0.08 65.83)",
+ "primary": "oklch(0.70 0.17 28.12)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.81 0.15 71.81)",
+ "secondary-foreground": "oklch(0.26 0.02 63.41)",
+ "muted": "oklch(0.56 0.05 59.94)",
+ "muted-foreground": "oklch(0.79 0.06 71.87)",
+ "accent": "oklch(0.61 0.21 27.04)",
+ "accent-foreground": "oklch(1.00 0 0)",
+ "destructive": "oklch(0.50 0.19 27.43)",
+ "border": "oklch(0.45 0.05 60.24)",
+ "input": "oklch(0.40 0.04 60.31)",
+ "ring": "oklch(0.70 0.17 28.12)",
+ "chart-1": "oklch(0.70 0.17 28.12)",
+ "chart-2": "oklch(0.81 0.15 71.81)",
+ "chart-3": "oklch(0.71 0.18 37.63)",
+ "chart-4": "oklch(0.89 0.15 91.66)",
+ "chart-5": "oklch(0.59 0.19 36.05)",
+ "sidebar": "oklch(0.31 0.03 60.03)",
+ "sidebar-foreground": "oklch(0.87 0.08 65.83)",
+ "sidebar-primary": "oklch(0.70 0.17 28.12)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.81 0.15 71.81)",
+ "sidebar-accent-foreground": "oklch(0.26 0.02 63.41)",
+ "sidebar-border": "oklch(0.45 0.05 60.24)",
+ "sidebar-ring": "oklch(0.70 0.17 28.12)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0.70 0.17 28.12 / 70%)",
+ "shadow-opacity": "0.05",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-md": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 2px 4px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 4px 6px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 8px 10px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.13)"
+ }
+ }
+ },
+ {
+ "name": "material-design",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Roboto, sans-serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "1rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0.01 335.69)",
+ "foreground": "oklch(0.22 0 0)",
+ "card": "oklch(0.96 0.01 335.69)",
+ "card-foreground": "oklch(0.14 0 0)",
+ "popover": "oklch(0.95 0.01 316.67)",
+ "popover-foreground": "oklch(0.40 0.04 309.35)",
+ "primary": "oklch(0.51 0.21 286.50)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.49 0.04 300.23)",
+ "secondary-foreground": "oklch(1.00 0 0)",
+ "muted": "oklch(0.96 0.01 335.69)",
+ "muted-foreground": "oklch(0.14 0 0)",
+ "accent": "oklch(0.92 0.04 303.47)",
+ "accent-foreground": "oklch(0.14 0 0)",
+ "destructive": "oklch(0.57 0.23 29.21)",
+ "border": "oklch(0.83 0.02 308.26)",
+ "input": "oklch(0.57 0.02 309.68)",
+ "ring": "oklch(0.50 0.13 293.77)",
+ "chart-1": "oklch(0.61 0.21 279.42)",
+ "chart-2": "oklch(0.72 0.15 157.67)",
+ "chart-3": "oklch(0.66 0.17 324.24)",
+ "chart-4": "oklch(0.81 0.15 127.91)",
+ "chart-5": "oklch(0.68 0.17 258.25)",
+ "sidebar": "oklch(0.99 0 0)",
+ "sidebar-foreground": "oklch(0.15 0 0)",
+ "sidebar-primary": "oklch(0.56 0.11 228.27)",
+ "sidebar-primary-foreground": "oklch(0.98 0 0)",
+ "sidebar-accent": "oklch(0.95 0 0)",
+ "sidebar-accent-foreground": "oklch(0.25 0 0)",
+ "sidebar-border": "oklch(0.90 0 0)",
+ "sidebar-ring": "oklch(0.56 0.11 228.27)",
+ "font-sans": "Roboto, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "radius": "1rem",
+ "shadow-color": "oklch(0 0 0 / 0.01)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.03)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.15 0.01 317.69)",
+ "foreground": "oklch(0.95 0.01 321.50)",
+ "card": "oklch(0.22 0.02 322.13)",
+ "card-foreground": "oklch(0.95 0.01 321.50)",
+ "popover": "oklch(0.22 0.02 322.13)",
+ "popover-foreground": "oklch(0.95 0.01 321.50)",
+ "primary": "oklch(0.60 0.22 279.81)",
+ "primary-foreground": "oklch(0.98 0.01 321.51)",
+ "secondary": "oklch(0.45 0.03 294.79)",
+ "secondary-foreground": "oklch(0.95 0.01 321.50)",
+ "muted": "oklch(0.22 0.01 319.50)",
+ "muted-foreground": "oklch(0.70 0.01 320.70)",
+ "accent": "oklch(0.35 0.06 299.57)",
+ "accent-foreground": "oklch(0.95 0.01 321.50)",
+ "destructive": "oklch(0.57 0.23 29.21)",
+ "border": "oklch(0.40 0.04 309.35)",
+ "input": "oklch(0.40 0.04 309.35)",
+ "ring": "oklch(0.50 0.15 294.97)",
+ "chart-1": "oklch(0.50 0.25 274.99)",
+ "chart-2": "oklch(0.60 0.15 150.16)",
+ "chart-3": "oklch(0.65 0.20 309.96)",
+ "chart-4": "oklch(0.60 0.17 132.98)",
+ "chart-5": "oklch(0.60 0.20 255.25)",
+ "sidebar": "oklch(0.20 0.01 317.74)",
+ "sidebar-foreground": "oklch(0.95 0.01 321.50)",
+ "sidebar-primary": "oklch(0.59 0.11 225.82)",
+ "sidebar-primary-foreground": "oklch(0.95 0.01 321.50)",
+ "sidebar-accent": "oklch(0.30 0.01 319.52)",
+ "sidebar-accent-foreground": "oklch(0.95 0.01 321.50)",
+ "sidebar-border": "oklch(0.35 0.01 319.53 / 30%)",
+ "sidebar-ring": "oklch(0.59 0.11 225.82)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0 0 0 / 0.01)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.03)"
+ }
+ }
+ },
+ {
+ "name": "marvel",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Outfit, sans-serif",
+ "font-mono": "Geist Mono, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0.01 25.23)",
+ "foreground": "oklch(0.20 0.01 18.05)",
+ "card": "oklch(0.95 0.01 25.23)",
+ "card-foreground": "oklch(0.18 0.01 29.18)",
+ "popover": "oklch(0.94 0.01 25.23)",
+ "popover-foreground": "oklch(0.22 0.01 29.09)",
+ "primary": "oklch(0.55 0.22 27.03)",
+ "primary-foreground": "oklch(0.98 0.01 100.72)",
+ "secondary": "oklch(0.52 0.14 247.51)",
+ "secondary-foreground": "oklch(0.98 0.01 100.72)",
+ "muted": "oklch(0.91 0.01 25.23)",
+ "muted-foreground": "oklch(0.38 0.01 17.71)",
+ "accent": "oklch(0.86 0.04 33.45)",
+ "accent-foreground": "oklch(0.18 0.01 29.18)",
+ "destructive": "oklch(0.56 0.23 29.23)",
+ "border": "oklch(0.84 0.01 25.22)",
+ "input": "oklch(0.80 0.01 25.22)",
+ "ring": "oklch(0.50 0.12 244.86)",
+ "chart-1": "oklch(0.58 0.23 27.06)",
+ "chart-2": "oklch(0.61 0.18 251.95)",
+ "chart-3": "oklch(0.72 0.15 83.50)",
+ "chart-4": "oklch(0.67 0.15 144.89)",
+ "chart-5": "oklch(0.75 0.15 304.74)",
+ "sidebar": "oklch(0.97 0 0)",
+ "sidebar-foreground": "oklch(0.20 0.01 18.05)",
+ "sidebar-primary": "oklch(0.52 0.14 247.51)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 100.72)",
+ "sidebar-accent": "oklch(0.69 0.14 79.70)",
+ "sidebar-accent-foreground": "oklch(0.20 0.01 18.05)",
+ "sidebar-border": "oklch(0.87 0.01 25.23)",
+ "sidebar-ring": "oklch(0.52 0.14 247.51)",
+ "font-sans": "Outfit, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "Geist Mono, monospace",
+ "radius": "0rem",
+ "shadow-color": "oklch(0 0 0 / 0.01)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.03)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.12 0.01 38.49)",
+ "foreground": "oklch(0.95 0.01 25.23)",
+ "card": "oklch(0.18 0.01 29.18)",
+ "card-foreground": "oklch(0.95 0.01 25.23)",
+ "popover": "oklch(0.18 0.01 29.18)",
+ "popover-foreground": "oklch(0.95 0.01 25.23)",
+ "primary": "oklch(0.65 0.23 27.09)",
+ "primary-foreground": "oklch(0.98 0.01 100.72)",
+ "secondary": "oklch(0.50 0.14 249.16)",
+ "secondary-foreground": "oklch(0.98 0.01 100.72)",
+ "muted": "oklch(0.20 0.01 18.05)",
+ "muted-foreground": "oklch(0.70 0.01 25.22)",
+ "accent": "oklch(0.59 0.12 78.19)",
+ "accent-foreground": "oklch(0.95 0.01 25.23)",
+ "destructive": "oklch(0.56 0.23 29.23)",
+ "border": "oklch(0.38 0.01 17.71)",
+ "input": "oklch(0.38 0.01 17.71)",
+ "ring": "oklch(0.49 0.14 250.75)",
+ "chart-1": "oklch(0.64 0.25 26.85)",
+ "chart-2": "oklch(0.66 0.19 250.17)",
+ "chart-3": "oklch(0.78 0.16 87.01)",
+ "chart-4": "oklch(0.68 0.15 144.94)",
+ "chart-5": "oklch(0.75 0.15 304.74)",
+ "sidebar": "oklch(0.14 0.01 33.25)",
+ "sidebar-foreground": "oklch(0.95 0.01 25.23)",
+ "sidebar-primary": "oklch(0.50 0.14 249.16)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 100.72)",
+ "sidebar-accent": "oklch(0.59 0.12 78.19)",
+ "sidebar-accent-foreground": "oklch(0.95 0.01 25.23)",
+ "sidebar-border": "oklch(0.32 0.01 27.45 / 30%)",
+ "sidebar-ring": "oklch(0.50 0.14 249.16)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0 0 0 / 0.01)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 0.03)"
+ }
+ }
+ },
+ {
+ "name": "valorant",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Barlow",
+ "font-mono": "JetBrains Mono",
+ "font-serif": "Merriweather",
+ "radius": "0rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.97 0.02 12.89)",
+ "foreground": "oklch(0.24 0.07 17.95)",
+ "card": "oklch(0.98 0.01 17.50)",
+ "card-foreground": "oklch(0.26 0.07 19.47)",
+ "popover": "oklch(0.98 0.01 17.50)",
+ "popover-foreground": "oklch(0.26 0.07 19.47)",
+ "primary": "oklch(0.67 0.22 21.22)",
+ "primary-foreground": "oklch(0.99 0 0)",
+ "secondary": "oklch(0.95 0.02 10.30)",
+ "secondary-foreground": "oklch(0.24 0.07 17.95)",
+ "muted": "oklch(0.98 0.01 17.50)",
+ "muted-foreground": "oklch(0.26 0.07 19.47)",
+ "accent": "oklch(0.99 0 0)",
+ "accent-foreground": "oklch(0.43 0.13 20.48)",
+ "destructive": "oklch(0.80 0.17 73.59)",
+ "border": "oklch(0.91 0.05 10.24)",
+ "input": "oklch(0.90 0.05 11.99)",
+ "ring": "oklch(0.92 0.04 12.26)",
+ "chart-1": "oklch(0.86 0.18 88.48)",
+ "chart-2": "oklch(0.62 0.21 255.62)",
+ "chart-3": "oklch(0.54 0.29 297.65)",
+ "chart-4": "oklch(0.95 0.10 98.75)",
+ "chart-5": "oklch(0.87 0.12 100.10)",
+ "sidebar": "oklch(0.97 0.02 12.89)",
+ "sidebar-foreground": "oklch(0.26 0.07 19.47)",
+ "sidebar-primary": "oklch(0.67 0.22 21.22)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 17.50)",
+ "sidebar-accent": "oklch(0.98 0.01 17.50)",
+ "sidebar-accent-foreground": "oklch(0.43 0.13 20.48)",
+ "sidebar-border": "oklch(0.91 0.05 10.24)",
+ "sidebar-ring": "oklch(0.92 0.04 12.26)",
+ "font-sans": "Barlow",
+ "font-serif": "Merriweather",
+ "font-mono": "JetBrains Mono",
+ "radius": "0rem",
+ "shadow-color": "oklch(0.3 0.0891 19.6)",
+ "shadow-opacity": "0.08",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "0px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 0px 3px 0px oklch(0.30 0.09 19.60 / 0.04)",
+ "shadow-xs": "0px 0px 3px 0px oklch(0.30 0.09 19.60 / 0.04)",
+ "shadow-sm": "0px 0px 3px 0px oklch(0.30 0.09 19.60 / 0.08), 0px 1px 2px -1px oklch(0.30 0.09 19.60 / 0.08)",
+ "shadow": "0px 0px 3px 0px oklch(0.30 0.09 19.60 / 0.08), 0px 1px 2px -1px oklch(0.30 0.09 19.60 / 0.08)",
+ "shadow-md": "0px 0px 3px 0px oklch(0.30 0.09 19.60 / 0.08), 0px 2px 4px -1px oklch(0.30 0.09 19.60 / 0.08)",
+ "shadow-lg": "0px 0px 3px 0px oklch(0.30 0.09 19.60 / 0.08), 0px 4px 6px -1px oklch(0.30 0.09 19.60 / 0.08)",
+ "shadow-xl": "0px 0px 3px 0px oklch(0.30 0.09 19.60 / 0.08), 0px 8px 10px -1px oklch(0.30 0.09 19.60 / 0.08)",
+ "shadow-2xl": "0px 0px 3px 0px oklch(0.30 0.09 19.60 / 0.20)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.16 0.03 16.52)",
+ "foreground": "oklch(0.99 0 0)",
+ "card": "oklch(0.21 0.05 18.42)",
+ "card-foreground": "oklch(0.98 0 0)",
+ "popover": "oklch(0.26 0.07 19.47)",
+ "popover-foreground": "oklch(0.99 0 0)",
+ "primary": "oklch(0.67 0.22 21.22)",
+ "primary-foreground": "oklch(0.99 0 0)",
+ "secondary": "oklch(0.30 0.09 19.60)",
+ "secondary-foreground": "oklch(0.95 0.02 10.30)",
+ "muted": "oklch(0.26 0.07 19.47)",
+ "muted-foreground": "oklch(0.99 0 0)",
+ "accent": "oklch(0.43 0.13 20.48)",
+ "accent-foreground": "oklch(0.99 0 0)",
+ "destructive": "oklch(0.80 0.17 73.59)",
+ "border": "oklch(0.31 0.09 19.47)",
+ "input": "oklch(0.39 0.12 20.38)",
+ "ring": "oklch(0.50 0.16 20.99)",
+ "chart-1": "oklch(0.86 0.18 88.48)",
+ "chart-2": "oklch(0.62 0.21 255.62)",
+ "chart-3": "oklch(0.54 0.29 297.65)",
+ "chart-4": "oklch(0.95 0.10 98.75)",
+ "chart-5": "oklch(0.87 0.12 100.10)",
+ "sidebar": "oklch(0.26 0.07 19.47)",
+ "sidebar-foreground": "oklch(0.99 0 0)",
+ "sidebar-primary": "oklch(0.67 0.22 21.22)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.43 0.13 20.48)",
+ "sidebar-accent-foreground": "oklch(0.99 0 0)",
+ "sidebar-border": "oklch(0.39 0.12 20.38)",
+ "sidebar-ring": "oklch(0.50 0.16 20.99)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "ghibli-studio",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Nunito, sans-serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "font-serif": "PT Serif, serif",
+ "radius": "0.625rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.91 0.05 82.78)",
+ "foreground": "oklch(0.41 0.08 78.86)",
+ "card": "oklch(0.92 0.04 84.56)",
+ "card-foreground": "oklch(0.41 0.08 74.04)",
+ "popover": "oklch(0.92 0.04 84.56)",
+ "popover-foreground": "oklch(0.41 0.08 74.04)",
+ "primary": "oklch(0.71 0.10 111.96)",
+ "primary-foreground": "oklch(0.98 0.01 2.18)",
+ "secondary": "oklch(0.88 0.05 83.32)",
+ "secondary-foreground": "oklch(0.51 0.08 78.21)",
+ "muted": "oklch(0.86 0.06 82.94)",
+ "muted-foreground": "oklch(0.51 0.08 74.78)",
+ "accent": "oklch(0.86 0.05 85.12)",
+ "accent-foreground": "oklch(0.26 0.02 356.72)",
+ "destructive": "oklch(0.63 0.24 29.21)",
+ "border": "oklch(0.74 0.06 79.64)",
+ "input": "oklch(0.74 0.06 79.64)",
+ "ring": "oklch(0.51 0.08 74.78)",
+ "chart-1": "oklch(0.66 0.19 41.68)",
+ "chart-2": "oklch(0.70 0.12 183.58)",
+ "chart-3": "oklch(0.48 0.08 211.35)",
+ "chart-4": "oklch(0.84 0.17 84.99)",
+ "chart-5": "oklch(0.74 0.17 60.02)",
+ "sidebar": "oklch(0.87 0.06 84.46)",
+ "sidebar-foreground": "oklch(0.41 0.08 78.86)",
+ "sidebar-primary": "oklch(0.26 0.02 356.72)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 2.18)",
+ "sidebar-accent": "oklch(0.83 0.06 84.44)",
+ "sidebar-accent-foreground": "oklch(0.26 0.02 356.72)",
+ "sidebar-border": "oklch(0.91 0 0)",
+ "sidebar-ring": "oklch(0.71 0 0)",
+ "font-sans": "Nunito, sans-serif",
+ "font-serif": "PT Serif, serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.20 0.01 52.89)",
+ "foreground": "oklch(0.88 0.05 79.11)",
+ "card": "oklch(0.25 0.01 48.28)",
+ "card-foreground": "oklch(0.88 0.05 79.11)",
+ "popover": "oklch(0.25 0.01 48.28)",
+ "popover-foreground": "oklch(0.88 0.05 79.11)",
+ "primary": "oklch(0.64 0.05 114.58)",
+ "primary-foreground": "oklch(0.98 0.01 2.18)",
+ "secondary": "oklch(0.33 0.02 60.70)",
+ "secondary-foreground": "oklch(0.88 0.05 83.32)",
+ "muted": "oklch(0.27 0.01 39.35)",
+ "muted-foreground": "oklch(0.74 0.06 79.64)",
+ "accent": "oklch(0.33 0.02 60.70)",
+ "accent-foreground": "oklch(0.86 0.05 85.12)",
+ "destructive": "oklch(0.63 0.24 29.21)",
+ "border": "oklch(0.33 0.02 60.70)",
+ "input": "oklch(0.33 0.02 60.70)",
+ "ring": "oklch(0.64 0.05 114.58)",
+ "chart-1": "oklch(0.66 0.19 41.68)",
+ "chart-2": "oklch(0.70 0.12 183.58)",
+ "chart-3": "oklch(0.48 0.08 211.35)",
+ "chart-4": "oklch(0.84 0.17 84.99)",
+ "chart-5": "oklch(0.74 0.17 60.02)",
+ "sidebar": "oklch(0.23 0.01 60.90)",
+ "sidebar-foreground": "oklch(0.88 0.05 79.11)",
+ "sidebar-primary": "oklch(0.64 0.05 114.58)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 2.18)",
+ "sidebar-accent": "oklch(0.33 0.02 60.70)",
+ "sidebar-accent-foreground": "oklch(0.86 0.05 85.12)",
+ "sidebar-border": "oklch(0.33 0.02 60.70)",
+ "sidebar-ring": "oklch(0.64 0.05 114.58)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "modern-minimal",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-mono": "JetBrains Mono, monospace",
+ "font-serif": "Source Serif 4, serif",
+ "radius": "0.375rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(1.00 0 0)",
+ "foreground": "oklch(0.32 0 0)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.32 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.32 0 0)",
+ "primary": "oklch(0.62 0.19 259.76)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.97 0 0)",
+ "secondary-foreground": "oklch(0.45 0.03 257.68)",
+ "muted": "oklch(0.98 0 0)",
+ "muted-foreground": "oklch(0.55 0.02 264.41)",
+ "accent": "oklch(0.95 0.03 233.56)",
+ "accent-foreground": "oklch(0.38 0.14 265.59)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.93 0.01 261.82)",
+ "input": "oklch(0.93 0.01 261.82)",
+ "ring": "oklch(0.62 0.19 259.76)",
+ "chart-1": "oklch(0.62 0.19 259.76)",
+ "chart-2": "oklch(0.55 0.22 262.96)",
+ "chart-3": "oklch(0.49 0.22 264.43)",
+ "chart-4": "oklch(0.42 0.18 265.55)",
+ "chart-5": "oklch(0.38 0.14 265.59)",
+ "sidebar": "oklch(0.98 0 0)",
+ "sidebar-foreground": "oklch(0.14 0 0)",
+ "sidebar-primary": "oklch(0.20 0 0)",
+ "sidebar-primary-foreground": "oklch(0.98 0 0)",
+ "sidebar-accent": "oklch(0.97 0 0)",
+ "sidebar-accent-foreground": "oklch(0.20 0 0)",
+ "sidebar-border": "oklch(0.92 0 0)",
+ "sidebar-ring": "oklch(0.71 0 0)",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "Source Serif 4, serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "radius": "0.375rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.20 0 0)",
+ "foreground": "oklch(0.92 0 0)",
+ "card": "oklch(0.27 0 0)",
+ "card-foreground": "oklch(0.92 0 0)",
+ "popover": "oklch(0.27 0 0)",
+ "popover-foreground": "oklch(0.92 0 0)",
+ "primary": "oklch(0.62 0.19 259.76)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.27 0 0)",
+ "secondary-foreground": "oklch(0.92 0 0)",
+ "muted": "oklch(0.27 0 0)",
+ "muted-foreground": "oklch(0.72 0 0)",
+ "accent": "oklch(0.38 0.14 265.59)",
+ "accent-foreground": "oklch(0.88 0.06 254.63)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.37 0 0)",
+ "input": "oklch(0.37 0 0)",
+ "ring": "oklch(0.62 0.19 259.76)",
+ "chart-1": "oklch(0.71 0.14 254.69)",
+ "chart-2": "oklch(0.62 0.19 259.76)",
+ "chart-3": "oklch(0.55 0.22 262.96)",
+ "chart-4": "oklch(0.49 0.22 264.43)",
+ "chart-5": "oklch(0.42 0.18 265.55)",
+ "sidebar": "oklch(0.21 0.01 285.56)",
+ "sidebar-foreground": "oklch(0.99 0 0)",
+ "sidebar-primary": "oklch(0.49 0.24 264.41)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.27 0.01 285.81)",
+ "sidebar-accent-foreground": "oklch(0.99 0 0)",
+ "sidebar-border": "oklch(1.00 0 0 / 10%)",
+ "sidebar-ring": "oklch(0.55 0.02 285.76)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "nature",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Montserrat, sans-serif",
+ "font-mono": "Source Code Pro, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.97 0.01 81.76)",
+ "foreground": "oklch(0.30 0.04 29.20)",
+ "card": "oklch(0.97 0.01 81.76)",
+ "card-foreground": "oklch(0.30 0.04 29.20)",
+ "popover": "oklch(0.97 0.01 81.76)",
+ "popover-foreground": "oklch(0.30 0.04 29.20)",
+ "primary": "oklch(0.52 0.13 144.33)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.96 0.02 147.54)",
+ "secondary-foreground": "oklch(0.43 0.12 144.33)",
+ "muted": "oklch(0.94 0.01 72.65)",
+ "muted-foreground": "oklch(0.45 0.05 38.69)",
+ "accent": "oklch(0.90 0.05 146.01)",
+ "accent-foreground": "oklch(0.43 0.12 144.33)",
+ "destructive": "oklch(0.54 0.19 26.90)",
+ "border": "oklch(0.88 0.02 77.29)",
+ "input": "oklch(0.88 0.02 77.29)",
+ "ring": "oklch(0.52 0.13 144.33)",
+ "chart-1": "oklch(0.67 0.16 144.06)",
+ "chart-2": "oklch(0.58 0.14 144.14)",
+ "chart-3": "oklch(0.52 0.13 144.33)",
+ "chart-4": "oklch(0.43 0.12 144.33)",
+ "chart-5": "oklch(0.22 0.05 145.19)",
+ "sidebar": "oklch(0.94 0.01 72.65)",
+ "sidebar-foreground": "oklch(0.30 0.04 29.20)",
+ "sidebar-primary": "oklch(0.52 0.13 144.33)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.90 0.05 146.01)",
+ "sidebar-accent-foreground": "oklch(0.43 0.12 144.33)",
+ "sidebar-border": "oklch(0.88 0.02 77.29)",
+ "sidebar-ring": "oklch(0.52 0.13 144.33)",
+ "font-sans": "Montserrat, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "Source Code Pro, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.27 0.03 150.18)",
+ "foreground": "oklch(0.94 0.01 72.65)",
+ "card": "oklch(0.33 0.03 146.53)",
+ "card-foreground": "oklch(0.94 0.01 72.65)",
+ "popover": "oklch(0.33 0.03 146.53)",
+ "popover-foreground": "oklch(0.94 0.01 72.65)",
+ "primary": "oklch(0.67 0.16 144.06)",
+ "primary-foreground": "oklch(0.22 0.05 145.19)",
+ "secondary": "oklch(0.39 0.03 143.09)",
+ "secondary-foreground": "oklch(0.90 0.02 142.94)",
+ "muted": "oklch(0.33 0.03 146.53)",
+ "muted-foreground": "oklch(0.86 0.02 77.29)",
+ "accent": "oklch(0.58 0.14 144.14)",
+ "accent-foreground": "oklch(0.94 0.01 72.65)",
+ "destructive": "oklch(0.54 0.19 26.90)",
+ "border": "oklch(0.39 0.03 143.09)",
+ "input": "oklch(0.39 0.03 143.09)",
+ "ring": "oklch(0.67 0.16 144.06)",
+ "chart-1": "oklch(0.77 0.12 145.23)",
+ "chart-2": "oklch(0.72 0.14 144.92)",
+ "chart-3": "oklch(0.67 0.16 144.06)",
+ "chart-4": "oklch(0.63 0.15 144.32)",
+ "chart-5": "oklch(0.58 0.14 144.14)",
+ "sidebar": "oklch(0.27 0.03 150.18)",
+ "sidebar-foreground": "oklch(0.94 0.01 72.65)",
+ "sidebar-primary": "oklch(0.67 0.16 144.06)",
+ "sidebar-primary-foreground": "oklch(0.22 0.05 145.19)",
+ "sidebar-accent": "oklch(0.58 0.14 144.14)",
+ "sidebar-accent-foreground": "oklch(0.94 0.01 72.65)",
+ "sidebar-border": "oklch(0.39 0.03 143.09)",
+ "sidebar-ring": "oklch(0.67 0.16 144.06)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "elegant-luxury",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Poppins, sans-serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "font-serif": "Libre Baskerville, serif",
+ "radius": "0.375rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.22 0 0)",
+ "card": "oklch(0.98 0 0)",
+ "card-foreground": "oklch(0.22 0 0)",
+ "popover": "oklch(0.98 0 0)",
+ "popover-foreground": "oklch(0.22 0 0)",
+ "primary": "oklch(0.47 0.15 25.06)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.96 0.04 88.18)",
+ "secondary-foreground": "oklch(0.48 0.10 75.09)",
+ "muted": "oklch(0.94 0.01 48.70)",
+ "muted-foreground": "oklch(0.44 0.01 73.63)",
+ "accent": "oklch(0.96 0.06 94.84)",
+ "accent-foreground": "oklch(0.40 0.13 25.81)",
+ "destructive": "oklch(0.44 0.16 26.84)",
+ "border": "oklch(0.94 0.03 81.74)",
+ "input": "oklch(0.94 0.03 81.74)",
+ "ring": "oklch(0.47 0.15 25.06)",
+ "chart-1": "oklch(0.51 0.19 27.52)",
+ "chart-2": "oklch(0.47 0.15 25.06)",
+ "chart-3": "oklch(0.40 0.13 25.81)",
+ "chart-4": "oklch(0.56 0.15 49.06)",
+ "chart-5": "oklch(0.47 0.12 46.52)",
+ "sidebar": "oklch(0.94 0.01 48.70)",
+ "sidebar-foreground": "oklch(0.22 0 0)",
+ "sidebar-primary": "oklch(0.47 0.15 25.06)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.96 0.06 94.84)",
+ "sidebar-accent-foreground": "oklch(0.40 0.13 25.81)",
+ "sidebar-border": "oklch(0.94 0.03 81.74)",
+ "sidebar-ring": "oklch(0.47 0.15 25.06)",
+ "font-sans": "Poppins, sans-serif",
+ "font-serif": "Libre Baskerville, serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "radius": "0.375rem",
+ "shadow-color": "hsl(0 63% 18%)",
+ "shadow-opacity": "0.12",
+ "shadow-blur": "16px",
+ "shadow-spread": "-2px",
+ "shadow-offset-x": "1px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.06)",
+ "shadow-xs": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.06)",
+ "shadow-sm": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 1px 2px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 1px 2px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow-md": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 2px 4px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow-lg": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 4px 6px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow-xl": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.12), 1px 8px 10px -3px oklch(0.28 0.09 24.83 / 0.12)",
+ "shadow-2xl": "1px 1px 16px -2px oklch(0.28 0.09 24.83 / 0.30)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.22 0.01 52.96)",
+ "foreground": "oklch(0.97 0 0)",
+ "card": "oklch(0.27 0.01 39.35)",
+ "card-foreground": "oklch(0.97 0 0)",
+ "popover": "oklch(0.27 0.01 39.35)",
+ "popover-foreground": "oklch(0.97 0 0)",
+ "primary": "oklch(0.51 0.19 27.52)",
+ "primary-foreground": "oklch(0.98 0 0)",
+ "secondary": "oklch(0.47 0.12 46.52)",
+ "secondary-foreground": "oklch(0.96 0.06 94.84)",
+ "muted": "oklch(0.27 0.01 39.35)",
+ "muted-foreground": "oklch(0.87 0 0)",
+ "accent": "oklch(0.56 0.15 49.06)",
+ "accent-foreground": "oklch(0.96 0.06 94.84)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.37 0.01 73.58)",
+ "input": "oklch(0.37 0.01 73.58)",
+ "ring": "oklch(0.51 0.19 27.52)",
+ "chart-1": "oklch(0.71 0.17 21.96)",
+ "chart-2": "oklch(0.64 0.21 25.39)",
+ "chart-3": "oklch(0.58 0.22 27.29)",
+ "chart-4": "oklch(0.84 0.16 84.06)",
+ "chart-5": "oklch(0.77 0.16 69.82)",
+ "sidebar": "oklch(0.22 0.01 52.96)",
+ "sidebar-foreground": "oklch(0.97 0 0)",
+ "sidebar-primary": "oklch(0.51 0.19 27.52)",
+ "sidebar-primary-foreground": "oklch(0.98 0 0)",
+ "sidebar-accent": "oklch(0.56 0.15 49.06)",
+ "sidebar-accent-foreground": "oklch(0.96 0.06 94.84)",
+ "sidebar-border": "oklch(0.37 0.01 73.58)",
+ "sidebar-ring": "oklch(0.51 0.19 27.52)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "neo-brutalism",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "DM Sans, sans-serif",
+ "font-mono": "Space Mono, monospace",
+ "font-serif": "ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "radius": "0px",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(1.00 0 0)",
+ "foreground": "oklch(0 0 0)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0 0 0)",
+ "primary": "oklch(0.65 0.24 26.92)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.97 0.21 109.74)",
+ "secondary-foreground": "oklch(0 0 0)",
+ "muted": "oklch(0.96 0 0)",
+ "muted-foreground": "oklch(0.32 0 0)",
+ "accent": "oklch(0.56 0.24 260.83)",
+ "accent-foreground": "oklch(1.00 0 0)",
+ "destructive": "oklch(0 0 0)",
+ "border": "oklch(0 0 0)",
+ "input": "oklch(0 0 0)",
+ "ring": "oklch(0.65 0.24 26.92)",
+ "chart-1": "oklch(0.65 0.24 26.92)",
+ "chart-2": "oklch(0.97 0.21 109.74)",
+ "chart-3": "oklch(0.56 0.24 260.83)",
+ "chart-4": "oklch(0.73 0.25 142.50)",
+ "chart-5": "oklch(0.59 0.27 328.36)",
+ "sidebar": "oklch(0.96 0 0)",
+ "sidebar-foreground": "oklch(0 0 0)",
+ "sidebar-primary": "oklch(0.65 0.24 26.92)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.56 0.24 260.83)",
+ "sidebar-accent-foreground": "oklch(1.00 0 0)",
+ "sidebar-border": "oklch(0 0 0)",
+ "sidebar-ring": "oklch(0.65 0.24 26.92)",
+ "font-sans": "DM Sans, sans-serif",
+ "font-serif": "ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "Space Mono, monospace",
+ "radius": "0px",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "1",
+ "shadow-blur": "0px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "4px",
+ "shadow-offset-y": "4px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "4px 4px 0px 0px oklch(0.00 0 0 / 0.50)",
+ "shadow-xs": "4px 4px 0px 0px oklch(0.00 0 0 / 0.50)",
+ "shadow-sm": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 1px 2px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 1px 2px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow-md": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 2px 4px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow-lg": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 4px 6px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow-xl": "4px 4px 0px 0px oklch(0.00 0 0 / 1.00), 4px 8px 10px -1px oklch(0.00 0 0 / 1.00)",
+ "shadow-2xl": "4px 4px 0px 0px oklch(0.00 0 0 / 2.50)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0 0 0)",
+ "foreground": "oklch(1.00 0 0)",
+ "card": "oklch(0.32 0 0)",
+ "card-foreground": "oklch(1.00 0 0)",
+ "popover": "oklch(0.32 0 0)",
+ "popover-foreground": "oklch(1.00 0 0)",
+ "primary": "oklch(0.70 0.19 23.04)",
+ "primary-foreground": "oklch(0 0 0)",
+ "secondary": "oklch(0.97 0.20 109.61)",
+ "secondary-foreground": "oklch(0 0 0)",
+ "muted": "oklch(0.32 0 0)",
+ "muted-foreground": "oklch(0.85 0 0)",
+ "accent": "oklch(0.68 0.18 251.63)",
+ "accent-foreground": "oklch(0 0 0)",
+ "destructive": "oklch(1.00 0 0)",
+ "border": "oklch(1.00 0 0)",
+ "input": "oklch(1.00 0 0)",
+ "ring": "oklch(0.70 0.19 23.04)",
+ "chart-1": "oklch(0.70 0.19 23.04)",
+ "chart-2": "oklch(0.97 0.20 109.61)",
+ "chart-3": "oklch(0.68 0.18 251.63)",
+ "chart-4": "oklch(0.74 0.23 142.87)",
+ "chart-5": "oklch(0.61 0.25 328.13)",
+ "sidebar": "oklch(0 0 0)",
+ "sidebar-foreground": "oklch(1.00 0 0)",
+ "sidebar-primary": "oklch(0.70 0.19 23.04)",
+ "sidebar-primary-foreground": "oklch(0 0 0)",
+ "sidebar-accent": "oklch(0.68 0.18 251.63)",
+ "sidebar-accent-foreground": "oklch(0 0 0)",
+ "sidebar-border": "oklch(1.00 0 0)",
+ "sidebar-ring": "oklch(0.70 0.19 23.04)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "pastel-dreams",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Open Sans, sans-serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "font-serif": "Source Serif 4, serif",
+ "radius": "1.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.97 0.01 316.68)",
+ "foreground": "oklch(0.37 0.03 259.73)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.37 0.03 259.73)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.37 0.03 259.73)",
+ "primary": "oklch(0.71 0.16 293.40)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.91 0.05 306.07)",
+ "secondary-foreground": "oklch(0.45 0.03 257.68)",
+ "muted": "oklch(0.95 0.03 307.19)",
+ "muted-foreground": "oklch(0.55 0.02 264.41)",
+ "accent": "oklch(0.94 0.03 322.47)",
+ "accent-foreground": "oklch(0.37 0.03 259.73)",
+ "destructive": "oklch(0.81 0.10 19.47)",
+ "border": "oklch(0.91 0.05 306.07)",
+ "input": "oklch(0.91 0.05 306.07)",
+ "ring": "oklch(0.71 0.16 293.40)",
+ "chart-1": "oklch(0.71 0.16 293.40)",
+ "chart-2": "oklch(0.61 0.22 292.63)",
+ "chart-3": "oklch(0.54 0.25 293.03)",
+ "chart-4": "oklch(0.49 0.24 292.70)",
+ "chart-5": "oklch(0.43 0.21 292.63)",
+ "sidebar": "oklch(0.91 0.05 306.07)",
+ "sidebar-foreground": "oklch(0.37 0.03 259.73)",
+ "sidebar-primary": "oklch(0.71 0.16 293.40)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.94 0.03 322.47)",
+ "sidebar-accent-foreground": "oklch(0.37 0.03 259.73)",
+ "sidebar-border": "oklch(0.91 0.05 306.07)",
+ "sidebar-ring": "oklch(0.71 0.16 293.40)",
+ "font-sans": "Open Sans, sans-serif",
+ "font-serif": "Source Serif 4, serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "radius": "1.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.08",
+ "shadow-blur": "16px",
+ "shadow-spread": "-4px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "8px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 8px 16px -4px oklch(0.00 0 0 / 0.04)",
+ "shadow-xs": "0px 8px 16px -4px oklch(0.00 0 0 / 0.04)",
+ "shadow-sm": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 1px 2px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 1px 2px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow-md": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 2px 4px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow-lg": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 4px 6px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow-xl": "0px 8px 16px -4px oklch(0.00 0 0 / 0.08), 0px 8px 10px -5px oklch(0.00 0 0 / 0.08)",
+ "shadow-2xl": "0px 8px 16px -4px oklch(0.00 0 0 / 0.20)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.22 0.01 52.96)",
+ "foreground": "oklch(0.93 0.03 273.66)",
+ "card": "oklch(0.28 0.03 307.25)",
+ "card-foreground": "oklch(0.93 0.03 273.66)",
+ "popover": "oklch(0.28 0.03 307.25)",
+ "popover-foreground": "oklch(0.93 0.03 273.66)",
+ "primary": "oklch(0.79 0.12 295.97)",
+ "primary-foreground": "oklch(0.22 0.01 52.96)",
+ "secondary": "oklch(0.34 0.04 309.13)",
+ "secondary-foreground": "oklch(0.87 0.01 261.81)",
+ "muted": "oklch(0.28 0.03 307.25)",
+ "muted-foreground": "oklch(0.71 0.02 261.33)",
+ "accent": "oklch(0.39 0.05 304.68)",
+ "accent-foreground": "oklch(0.87 0.01 261.81)",
+ "destructive": "oklch(0.81 0.10 19.47)",
+ "border": "oklch(0.34 0.04 309.13)",
+ "input": "oklch(0.34 0.04 309.13)",
+ "ring": "oklch(0.79 0.12 295.97)",
+ "chart-1": "oklch(0.79 0.12 295.97)",
+ "chart-2": "oklch(0.71 0.16 293.40)",
+ "chart-3": "oklch(0.61 0.22 292.63)",
+ "chart-4": "oklch(0.54 0.25 293.03)",
+ "chart-5": "oklch(0.49 0.24 292.70)",
+ "sidebar": "oklch(0.34 0.04 309.13)",
+ "sidebar-foreground": "oklch(0.93 0.03 273.66)",
+ "sidebar-primary": "oklch(0.79 0.12 295.97)",
+ "sidebar-primary-foreground": "oklch(0.22 0.01 52.96)",
+ "sidebar-accent": "oklch(0.39 0.05 304.68)",
+ "sidebar-accent-foreground": "oklch(0.87 0.01 261.81)",
+ "sidebar-border": "oklch(0.34 0.04 309.13)",
+ "sidebar-ring": "oklch(0.79 0.12 295.97)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "clean-slate",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Inter, sans-serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.28 0.04 260.33)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.28 0.04 260.33)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.28 0.04 260.33)",
+ "primary": "oklch(0.59 0.20 277.06)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.93 0.01 261.82)",
+ "secondary-foreground": "oklch(0.37 0.03 259.73)",
+ "muted": "oklch(0.97 0 0)",
+ "muted-foreground": "oklch(0.55 0.02 264.41)",
+ "accent": "oklch(0.93 0.03 273.66)",
+ "accent-foreground": "oklch(0.37 0.03 259.73)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.87 0.01 261.81)",
+ "input": "oklch(0.87 0.01 261.81)",
+ "ring": "oklch(0.59 0.20 277.06)",
+ "chart-1": "oklch(0.59 0.20 277.06)",
+ "chart-2": "oklch(0.51 0.23 276.97)",
+ "chart-3": "oklch(0.46 0.21 277.06)",
+ "chart-4": "oklch(0.40 0.18 277.16)",
+ "chart-5": "oklch(0.36 0.14 278.65)",
+ "sidebar": "oklch(0.97 0 0)",
+ "sidebar-foreground": "oklch(0.28 0.04 260.33)",
+ "sidebar-primary": "oklch(0.59 0.20 277.06)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.93 0.03 273.66)",
+ "sidebar-accent-foreground": "oklch(0.37 0.03 259.73)",
+ "sidebar-border": "oklch(0.87 0.01 261.81)",
+ "sidebar-ring": "oklch(0.59 0.20 277.06)",
+ "font-sans": "Inter, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "JetBrains Mono, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "8px",
+ "shadow-spread": "-1px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "4px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 4px 8px -1px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0px 4px 8px -1px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 1px 2px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 1px 2px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 2px 4px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 4px 6px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0px 4px 8px -1px oklch(0.00 0 0 / 0.10), 0px 8px 10px -2px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0px 4px 8px -1px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.21 0.04 264.04)",
+ "foreground": "oklch(0.93 0.01 256.71)",
+ "card": "oklch(0.28 0.04 260.33)",
+ "card-foreground": "oklch(0.93 0.01 256.71)",
+ "popover": "oklch(0.28 0.04 260.33)",
+ "popover-foreground": "oklch(0.93 0.01 256.71)",
+ "primary": "oklch(0.68 0.16 276.93)",
+ "primary-foreground": "oklch(0.21 0.04 264.04)",
+ "secondary": "oklch(0.34 0.03 261.83)",
+ "secondary-foreground": "oklch(0.87 0.01 261.81)",
+ "muted": "oklch(0.28 0.04 260.33)",
+ "muted-foreground": "oklch(0.71 0.02 261.33)",
+ "accent": "oklch(0.37 0.03 259.73)",
+ "accent-foreground": "oklch(0.87 0.01 261.81)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.45 0.03 257.68)",
+ "input": "oklch(0.45 0.03 257.68)",
+ "ring": "oklch(0.68 0.16 276.93)",
+ "chart-1": "oklch(0.68 0.16 276.93)",
+ "chart-2": "oklch(0.59 0.20 277.06)",
+ "chart-3": "oklch(0.51 0.23 276.97)",
+ "chart-4": "oklch(0.46 0.21 277.06)",
+ "chart-5": "oklch(0.40 0.18 277.16)",
+ "sidebar": "oklch(0.28 0.04 260.33)",
+ "sidebar-foreground": "oklch(0.93 0.01 256.71)",
+ "sidebar-primary": "oklch(0.68 0.16 276.93)",
+ "sidebar-primary-foreground": "oklch(0.21 0.04 264.04)",
+ "sidebar-accent": "oklch(0.37 0.03 259.73)",
+ "sidebar-accent-foreground": "oklch(0.87 0.01 261.81)",
+ "sidebar-border": "oklch(0.45 0.03 257.68)",
+ "sidebar-ring": "oklch(0.68 0.16 276.93)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "midnight-bloom",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Montserrat, sans-serif",
+ "font-mono": "Source Code Pro, monospace",
+ "font-serif": "Playfair Display, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.32 0 0)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.32 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.32 0 0)",
+ "primary": "oklch(0.57 0.20 283.26)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.82 0.07 249.99)",
+ "secondary-foreground": "oklch(0.32 0 0)",
+ "muted": "oklch(0.82 0.02 90.54)",
+ "muted-foreground": "oklch(0.54 0 0)",
+ "accent": "oklch(0.65 0.06 117.02)",
+ "accent-foreground": "oklch(1.00 0 0)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.87 0 0)",
+ "input": "oklch(0.87 0 0)",
+ "ring": "oklch(0.57 0.20 283.26)",
+ "chart-1": "oklch(0.57 0.20 283.26)",
+ "chart-2": "oklch(0.53 0.17 314.68)",
+ "chart-3": "oklch(0.34 0.18 301.34)",
+ "chart-4": "oklch(0.67 0.14 261.15)",
+ "chart-5": "oklch(0.59 0.10 245.35)",
+ "sidebar": "oklch(0.98 0 0)",
+ "sidebar-foreground": "oklch(0.32 0 0)",
+ "sidebar-primary": "oklch(0.57 0.20 283.26)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.65 0.06 117.02)",
+ "sidebar-accent-foreground": "oklch(1.00 0 0)",
+ "sidebar-border": "oklch(0.87 0 0)",
+ "sidebar-ring": "oklch(0.57 0.20 283.26)",
+ "font-sans": "Montserrat, sans-serif",
+ "font-serif": "Playfair Display, serif",
+ "font-mono": "Source Code Pro, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "10px",
+ "shadow-spread": "-2px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "5px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 5px 10px -2px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0px 5px 10px -2px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 1px 2px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 1px 2px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 2px 4px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 4px 6px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0px 5px 10px -2px oklch(0.00 0 0 / 0.10), 0px 8px 10px -3px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0px 5px 10px -2px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.23 0.01 268.25)",
+ "foreground": "oklch(0.92 0 0)",
+ "card": "oklch(0.32 0.01 229.15)",
+ "card-foreground": "oklch(0.92 0 0)",
+ "popover": "oklch(0.32 0.01 229.15)",
+ "popover-foreground": "oklch(0.92 0 0)",
+ "primary": "oklch(0.57 0.20 283.26)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.34 0.18 301.34)",
+ "secondary-foreground": "oklch(0.92 0 0)",
+ "muted": "oklch(0.39 0 0)",
+ "muted-foreground": "oklch(0.72 0 0)",
+ "accent": "oklch(0.67 0.14 261.15)",
+ "accent-foreground": "oklch(0.92 0 0)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.39 0 0)",
+ "input": "oklch(0.39 0 0)",
+ "ring": "oklch(0.57 0.20 283.26)",
+ "chart-1": "oklch(0.57 0.20 283.26)",
+ "chart-2": "oklch(0.53 0.17 314.68)",
+ "chart-3": "oklch(0.34 0.18 301.34)",
+ "chart-4": "oklch(0.67 0.14 261.15)",
+ "chart-5": "oklch(0.59 0.10 245.35)",
+ "sidebar": "oklch(0.23 0.01 268.25)",
+ "sidebar-foreground": "oklch(0.92 0 0)",
+ "sidebar-primary": "oklch(0.57 0.20 283.26)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.67 0.14 261.15)",
+ "sidebar-accent-foreground": "oklch(0.92 0 0)",
+ "sidebar-border": "oklch(0.39 0 0)",
+ "sidebar-ring": "oklch(0.57 0.20 283.26)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "sunset-horizon",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Montserrat, sans-serif",
+ "font-mono": "Ubuntu Mono, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0.625rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.99 0.01 67.74)",
+ "foreground": "oklch(0.34 0.01 7.89)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.34 0.01 7.89)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.34 0.01 7.89)",
+ "primary": "oklch(0.74 0.16 34.57)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.96 0.02 28.97)",
+ "secondary-foreground": "oklch(0.56 0.13 32.65)",
+ "muted": "oklch(0.97 0.02 44.86)",
+ "muted-foreground": "oklch(0.49 0.05 27.86)",
+ "accent": "oklch(0.83 0.11 57.89)",
+ "accent-foreground": "oklch(0.34 0.01 7.89)",
+ "destructive": "oklch(0.61 0.21 22.21)",
+ "border": "oklch(0.93 0.04 40.57)",
+ "input": "oklch(0.93 0.04 40.57)",
+ "ring": "oklch(0.74 0.16 34.57)",
+ "chart-1": "oklch(0.74 0.16 34.57)",
+ "chart-2": "oklch(0.83 0.11 57.89)",
+ "chart-3": "oklch(0.88 0.08 56.41)",
+ "chart-4": "oklch(0.82 0.11 41.27)",
+ "chart-5": "oklch(0.64 0.13 32.06)",
+ "sidebar": "oklch(0.97 0.02 44.86)",
+ "sidebar-foreground": "oklch(0.34 0.01 7.89)",
+ "sidebar-primary": "oklch(0.74 0.16 34.57)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.83 0.11 57.89)",
+ "sidebar-accent-foreground": "oklch(0.34 0.01 7.89)",
+ "sidebar-border": "oklch(0.93 0.04 40.57)",
+ "sidebar-ring": "oklch(0.74 0.16 34.57)",
+ "font-sans": "Montserrat, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "Ubuntu Mono, monospace",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.09",
+ "shadow-blur": "12px",
+ "shadow-spread": "-3px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "6px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 6px 12px -3px oklch(0.00 0 0 / 0.04)",
+ "shadow-xs": "0px 6px 12px -3px oklch(0.00 0 0 / 0.04)",
+ "shadow-sm": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 1px 2px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 1px 2px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow-md": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 2px 4px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow-lg": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 4px 6px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow-xl": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 8px 10px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow-2xl": "0px 6px 12px -3px oklch(0.00 0 0 / 0.22)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.26 0.02 351.79)",
+ "foreground": "oklch(0.94 0.01 48.70)",
+ "card": "oklch(0.32 0.02 339.89)",
+ "card-foreground": "oklch(0.94 0.01 48.70)",
+ "popover": "oklch(0.32 0.02 339.89)",
+ "popover-foreground": "oklch(0.94 0.01 48.70)",
+ "primary": "oklch(0.74 0.16 34.57)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.36 0.02 342.33)",
+ "secondary-foreground": "oklch(0.94 0.01 48.70)",
+ "muted": "oklch(0.32 0.02 339.89)",
+ "muted-foreground": "oklch(0.84 0.02 50.14)",
+ "accent": "oklch(0.83 0.11 57.89)",
+ "accent-foreground": "oklch(0.26 0.02 351.79)",
+ "destructive": "oklch(0.61 0.21 22.21)",
+ "border": "oklch(0.36 0.02 342.33)",
+ "input": "oklch(0.36 0.02 342.33)",
+ "ring": "oklch(0.74 0.16 34.57)",
+ "chart-1": "oklch(0.74 0.16 34.57)",
+ "chart-2": "oklch(0.83 0.11 57.89)",
+ "chart-3": "oklch(0.88 0.08 56.41)",
+ "chart-4": "oklch(0.82 0.11 41.27)",
+ "chart-5": "oklch(0.64 0.13 32.06)",
+ "sidebar": "oklch(0.26 0.02 351.79)",
+ "sidebar-foreground": "oklch(0.94 0.01 48.70)",
+ "sidebar-primary": "oklch(0.74 0.16 34.57)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.83 0.11 57.89)",
+ "sidebar-accent-foreground": "oklch(0.26 0.02 351.79)",
+ "sidebar-border": "oklch(0.36 0.02 342.33)",
+ "sidebar-ring": "oklch(0.74 0.16 34.57)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "claude",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0.01 93.48)",
+ "foreground": "oklch(0.34 0.03 94.42)",
+ "card": "oklch(0.98 0.01 93.48)",
+ "card-foreground": "oklch(0.19 0 0)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.27 0.02 99.70)",
+ "primary": "oklch(0.62 0.14 39.15)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.92 0.01 87.42)",
+ "secondary-foreground": "oklch(0.43 0.02 99.33)",
+ "muted": "oklch(0.93 0.02 91.55)",
+ "muted-foreground": "oklch(0.61 0.01 91.49)",
+ "accent": "oklch(0.92 0.01 87.42)",
+ "accent-foreground": "oklch(0.27 0.02 99.70)",
+ "destructive": "oklch(0.19 0 0)",
+ "border": "oklch(0.88 0.01 100.76)",
+ "input": "oklch(0.76 0.02 96.91)",
+ "ring": "oklch(0.59 0.17 252.92)",
+ "chart-1": "oklch(0.56 0.13 42.95)",
+ "chart-2": "oklch(0.69 0.16 290.29)",
+ "chart-3": "oklch(0.88 0.03 91.64)",
+ "chart-4": "oklch(0.88 0.04 298.21)",
+ "chart-5": "oklch(0.56 0.13 41.94)",
+ "sidebar": "oklch(0.97 0.01 93.49)",
+ "sidebar-foreground": "oklch(0.36 0.01 106.85)",
+ "sidebar-primary": "oklch(0.62 0.14 39.15)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.92 0.01 87.42)",
+ "sidebar-accent-foreground": "oklch(0.33 0 0)",
+ "sidebar-border": "oklch(0.94 0 0)",
+ "sidebar-ring": "oklch(0.77 0 0)",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.27 0 0)",
+ "foreground": "oklch(0.81 0.01 93.53)",
+ "card": "oklch(0.27 0 0)",
+ "card-foreground": "oklch(0.98 0.01 93.48)",
+ "popover": "oklch(0.31 0 0)",
+ "popover-foreground": "oklch(0.92 0 0)",
+ "primary": "oklch(0.67 0.13 38.92)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.98 0.01 93.48)",
+ "secondary-foreground": "oklch(0.31 0 0)",
+ "muted": "oklch(0.22 0 0)",
+ "muted-foreground": "oklch(0.77 0.02 100.64)",
+ "accent": "oklch(0.21 0.01 88.79)",
+ "accent-foreground": "oklch(0.97 0.01 93.49)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.36 0.01 106.85)",
+ "input": "oklch(0.43 0.01 99.03)",
+ "ring": "oklch(0.59 0.17 252.92)",
+ "chart-1": "oklch(0.56 0.13 42.95)",
+ "chart-2": "oklch(0.69 0.16 290.29)",
+ "chart-3": "oklch(0.21 0.01 88.79)",
+ "chart-4": "oklch(0.31 0.05 289.74)",
+ "chart-5": "oklch(0.56 0.13 41.94)",
+ "sidebar": "oklch(0.24 0 0)",
+ "sidebar-foreground": "oklch(0.81 0.01 93.53)",
+ "sidebar-primary": "oklch(0.33 0 0)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.17 0 0)",
+ "sidebar-accent-foreground": "oklch(0.81 0.01 93.53)",
+ "sidebar-border": "oklch(0.94 0 0)",
+ "sidebar-ring": "oklch(0.77 0 0)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "caffeine",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.24 0 0)",
+ "card": "oklch(0.99 0 0)",
+ "card-foreground": "oklch(0.24 0 0)",
+ "popover": "oklch(0.99 0 0)",
+ "popover-foreground": "oklch(0.24 0 0)",
+ "primary": "oklch(0.43 0.04 42.00)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.92 0.07 76.67)",
+ "secondary-foreground": "oklch(0.35 0.07 41.41)",
+ "muted": "oklch(0.95 0 0)",
+ "muted-foreground": "oklch(0.50 0 0)",
+ "accent": "oklch(0.93 0 0)",
+ "accent-foreground": "oklch(0.24 0 0)",
+ "destructive": "oklch(0.63 0.19 33.26)",
+ "border": "oklch(0.88 0 0)",
+ "input": "oklch(0.88 0 0)",
+ "ring": "oklch(0.43 0.04 42.00)",
+ "chart-1": "oklch(0.43 0.04 42.00)",
+ "chart-2": "oklch(0.92 0.07 76.67)",
+ "chart-3": "oklch(0.93 0 0)",
+ "chart-4": "oklch(0.94 0.05 75.02)",
+ "chart-5": "oklch(0.43 0.04 42.00)",
+ "sidebar": "oklch(0.99 0 0)",
+ "sidebar-foreground": "oklch(0.26 0 0)",
+ "sidebar-primary": "oklch(0.33 0 0)",
+ "sidebar-primary-foreground": "oklch(0.99 0 0)",
+ "sidebar-accent": "oklch(0.98 0 0)",
+ "sidebar-accent-foreground": "oklch(0.33 0 0)",
+ "sidebar-border": "oklch(0.94 0 0)",
+ "sidebar-ring": "oklch(0.77 0 0)",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.18 0 0)",
+ "foreground": "oklch(0.95 0 0)",
+ "card": "oklch(0.21 0 0)",
+ "card-foreground": "oklch(0.95 0 0)",
+ "popover": "oklch(0.21 0 0)",
+ "popover-foreground": "oklch(0.95 0 0)",
+ "primary": "oklch(0.92 0.05 67.14)",
+ "primary-foreground": "oklch(0.20 0.02 201.14)",
+ "secondary": "oklch(0.32 0.02 67.00)",
+ "secondary-foreground": "oklch(0.92 0.05 67.14)",
+ "muted": "oklch(0.25 0 0)",
+ "muted-foreground": "oklch(0.77 0 0)",
+ "accent": "oklch(0.29 0 0)",
+ "accent-foreground": "oklch(0.95 0 0)",
+ "destructive": "oklch(0.63 0.19 33.26)",
+ "border": "oklch(0.24 0.01 88.77)",
+ "input": "oklch(0.40 0 0)",
+ "ring": "oklch(0.92 0.05 67.14)",
+ "chart-1": "oklch(0.92 0.05 67.14)",
+ "chart-2": "oklch(0.32 0.02 67.00)",
+ "chart-3": "oklch(0.29 0 0)",
+ "chart-4": "oklch(0.35 0.02 67.11)",
+ "chart-5": "oklch(0.92 0.05 67.14)",
+ "sidebar": "oklch(0.21 0.01 285.56)",
+ "sidebar-foreground": "oklch(0.97 0 0)",
+ "sidebar-primary": "oklch(0.49 0.22 264.43)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.27 0.01 285.81)",
+ "sidebar-accent-foreground": "oklch(0.97 0 0)",
+ "sidebar-border": "oklch(0.27 0.01 285.81)",
+ "sidebar-ring": "oklch(0.87 0.01 286.27)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "corporate",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Inter, sans-serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "font-serif": "Source Serif 4, serif",
+ "radius": "0.375rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0 0)",
+ "foreground": "oklch(0.21 0.03 263.61)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.21 0.03 263.61)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.21 0.03 263.61)",
+ "primary": "oklch(0.48 0.20 260.47)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.97 0 0)",
+ "secondary-foreground": "oklch(0.37 0.03 259.73)",
+ "muted": "oklch(0.97 0 0)",
+ "muted-foreground": "oklch(0.55 0.02 264.41)",
+ "accent": "oklch(0.95 0.02 260.18)",
+ "accent-foreground": "oklch(0.48 0.20 260.47)",
+ "destructive": "oklch(0.58 0.22 27.29)",
+ "border": "oklch(0.93 0.01 261.82)",
+ "input": "oklch(0.93 0.01 261.82)",
+ "ring": "oklch(0.48 0.20 260.47)",
+ "chart-1": "oklch(0.48 0.20 260.47)",
+ "chart-2": "oklch(0.56 0.24 260.92)",
+ "chart-3": "oklch(0.40 0.16 259.61)",
+ "chart-4": "oklch(0.43 0.16 259.82)",
+ "chart-5": "oklch(0.29 0.07 261.20)",
+ "sidebar": "oklch(0.97 0 0)",
+ "sidebar-foreground": "oklch(0.21 0.03 263.61)",
+ "sidebar-primary": "oklch(0.48 0.20 260.47)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.95 0.02 260.18)",
+ "sidebar-accent-foreground": "oklch(0.48 0.20 260.47)",
+ "sidebar-border": "oklch(0.93 0.01 261.82)",
+ "sidebar-ring": "oklch(0.48 0.20 260.47)",
+ "font-sans": "Inter, sans-serif",
+ "font-serif": "Source Serif 4, serif",
+ "font-mono": "IBM Plex Mono, monospace",
+ "radius": "0.375rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.26 0.03 262.67)",
+ "foreground": "oklch(0.93 0.01 261.82)",
+ "card": "oklch(0.30 0.03 260.51)",
+ "card-foreground": "oklch(0.93 0.01 261.82)",
+ "popover": "oklch(0.30 0.03 260.51)",
+ "popover-foreground": "oklch(0.93 0.01 261.82)",
+ "primary": "oklch(0.56 0.24 260.92)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.35 0.04 261.40)",
+ "secondary-foreground": "oklch(0.93 0.01 261.82)",
+ "muted": "oklch(0.30 0.03 260.51)",
+ "muted-foreground": "oklch(0.71 0.02 261.33)",
+ "accent": "oklch(0.33 0.04 264.63)",
+ "accent-foreground": "oklch(0.93 0.01 261.82)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.35 0.04 261.40)",
+ "input": "oklch(0.35 0.04 261.40)",
+ "ring": "oklch(0.56 0.24 260.92)",
+ "chart-1": "oklch(0.56 0.24 260.92)",
+ "chart-2": "oklch(0.48 0.20 260.47)",
+ "chart-3": "oklch(0.69 0.17 255.59)",
+ "chart-4": "oklch(0.43 0.16 259.82)",
+ "chart-5": "oklch(0.29 0.07 261.20)",
+ "sidebar": "oklch(0.26 0.03 262.67)",
+ "sidebar-foreground": "oklch(0.93 0.01 261.82)",
+ "sidebar-primary": "oklch(0.56 0.24 260.92)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.33 0.04 264.63)",
+ "sidebar-accent-foreground": "oklch(0.93 0.01 261.82)",
+ "sidebar-border": "oklch(0.35 0.04 261.40)",
+ "sidebar-ring": "oklch(0.56 0.24 260.92)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "slack",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Lato, sans-serif",
+ "font-mono": "Roboto Mono, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(1.00 0 0)",
+ "foreground": "oklch(0.23 0 0)",
+ "card": "oklch(0.98 0 0)",
+ "card-foreground": "oklch(0.23 0 0)",
+ "popover": "oklch(0.98 0 0)",
+ "popover-foreground": "oklch(0.23 0 0)",
+ "primary": "oklch(0.37 0.14 323.40)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.96 0.01 311.36)",
+ "secondary-foreground": "oklch(0.31 0.11 327.10)",
+ "muted": "oklch(0.97 0 0)",
+ "muted-foreground": "oklch(0.49 0 0)",
+ "accent": "oklch(0.88 0.02 323.34)",
+ "accent-foreground": "oklch(0.31 0.11 327.10)",
+ "destructive": "oklch(0.59 0.22 11.39)",
+ "border": "oklch(0.91 0 0)",
+ "input": "oklch(0.91 0 0)",
+ "ring": "oklch(0.37 0.14 323.40)",
+ "chart-1": "oklch(0.31 0.11 327.10)",
+ "chart-2": "oklch(0.37 0.14 323.40)",
+ "chart-3": "oklch(0.59 0.22 11.39)",
+ "chart-4": "oklch(0.77 0.13 222.66)",
+ "chart-5": "oklch(0.69 0.14 160.27)",
+ "sidebar": "oklch(0.96 0.01 311.36)",
+ "sidebar-foreground": "oklch(0.23 0 0)",
+ "sidebar-primary": "oklch(0.37 0.14 323.40)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.88 0.02 323.34)",
+ "sidebar-accent-foreground": "oklch(0.31 0.11 327.10)",
+ "sidebar-border": "oklch(0.91 0 0)",
+ "sidebar-ring": "oklch(0.37 0.14 323.40)",
+ "font-sans": "Lato, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "Roboto Mono, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.23 0.01 260.69)",
+ "foreground": "oklch(0.93 0 0)",
+ "card": "oklch(0.26 0.01 260.70)",
+ "card-foreground": "oklch(0.93 0 0)",
+ "popover": "oklch(0.26 0.01 260.70)",
+ "popover-foreground": "oklch(0.93 0 0)",
+ "primary": "oklch(0.58 0.14 327.21)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.30 0.01 254.00)",
+ "secondary-foreground": "oklch(0.93 0 0)",
+ "muted": "oklch(0.26 0.01 260.70)",
+ "muted-foreground": "oklch(0.68 0 0)",
+ "accent": "oklch(0.33 0.03 326.28)",
+ "accent-foreground": "oklch(0.93 0 0)",
+ "destructive": "oklch(0.59 0.22 11.39)",
+ "border": "oklch(0.30 0.01 268.37)",
+ "input": "oklch(0.30 0.01 268.37)",
+ "ring": "oklch(0.58 0.14 327.21)",
+ "chart-1": "oklch(0.58 0.14 327.21)",
+ "chart-2": "oklch(0.77 0.13 222.66)",
+ "chart-3": "oklch(0.69 0.14 160.27)",
+ "chart-4": "oklch(0.59 0.22 11.39)",
+ "chart-5": "oklch(0.80 0.15 82.32)",
+ "sidebar": "oklch(0.23 0.01 260.69)",
+ "sidebar-foreground": "oklch(0.93 0 0)",
+ "sidebar-primary": "oklch(0.58 0.14 327.21)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.33 0.03 326.28)",
+ "sidebar-accent-foreground": "oklch(0.93 0 0)",
+ "sidebar-border": "oklch(0.30 0.01 268.37)",
+ "sidebar-ring": "oklch(0.58 0.14 327.21)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ },
+ {
+ "name": "perplexity",
+ "type": "registry:style",
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ },
+ "cssVars": {
+ "theme": {
+ "font-sans": "Inter, sans-serif",
+ "font-mono": "Roboto Mono, monospace",
+ "font-serif": "Lora, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.95 0.01 196.81)",
+ "foreground": "oklch(0.38 0.06 211.49)",
+ "card": "oklch(0.97 0.01 196.81)",
+ "card-foreground": "oklch(0.38 0.06 211.49)",
+ "popover": "oklch(0.97 0.01 196.81)",
+ "popover-foreground": "oklch(0.38 0.06 211.49)",
+ "primary": "oklch(0.72 0.12 210.36)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.97 0.01 247.91)",
+ "secondary-foreground": "oklch(0.14 0 0)",
+ "muted": "oklch(0.97 0.01 247.91)",
+ "muted-foreground": "oklch(0.55 0.04 256.40)",
+ "accent": "oklch(0.96 0.02 204.34)",
+ "accent-foreground": "oklch(0.57 0.10 213.73)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.93 0.01 256.71)",
+ "input": "oklch(0.93 0.01 256.71)",
+ "ring": "oklch(0.72 0.12 210.36)",
+ "chart-1": "oklch(0.72 0.12 210.36)",
+ "chart-2": "oklch(0.57 0.10 213.73)",
+ "chart-3": "oklch(0.79 0.12 209.45)",
+ "chart-4": "oklch(0.76 0.11 208.70)",
+ "chart-5": "oklch(0.83 0.10 208.33)",
+ "sidebar": "oklch(0.98 0 0)",
+ "sidebar-foreground": "oklch(0.14 0 0)",
+ "sidebar-primary": "oklch(0.72 0.12 210.36)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.96 0.02 204.34)",
+ "sidebar-accent-foreground": "oklch(0.57 0.10 213.73)",
+ "sidebar-border": "oklch(0.93 0.01 256.71)",
+ "sidebar-ring": "oklch(0.72 0.12 210.36)",
+ "font-sans": "Inter, sans-serif",
+ "font-serif": "Lora, serif",
+ "font-mono": "Roboto Mono, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.21 0.02 226.02)",
+ "foreground": "oklch(0.85 0.13 194.97)",
+ "card": "oklch(0.23 0.03 218.18)",
+ "card-foreground": "oklch(0.85 0.13 194.97)",
+ "popover": "oklch(0.23 0.03 218.18)",
+ "popover-foreground": "oklch(0.85 0.13 194.97)",
+ "primary": "oklch(0.72 0.12 210.36)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.27 0.01 285.81)",
+ "secondary-foreground": "oklch(0.97 0 0)",
+ "muted": "oklch(0.24 0 0)",
+ "muted-foreground": "oklch(0.71 0.01 286.23)",
+ "accent": "oklch(0.24 0 0)",
+ "accent-foreground": "oklch(0.97 0 0)",
+ "destructive": "oklch(0.64 0.21 25.39)",
+ "border": "oklch(0.29 0 0)",
+ "input": "oklch(0.29 0 0)",
+ "ring": "oklch(0.72 0.12 210.36)",
+ "chart-1": "oklch(0.72 0.12 210.36)",
+ "chart-2": "oklch(0.79 0.12 209.45)",
+ "chart-3": "oklch(0.76 0.11 208.70)",
+ "chart-4": "oklch(0.83 0.10 208.33)",
+ "chart-5": "oklch(0.57 0.10 213.73)",
+ "sidebar": "oklch(0.19 0 0)",
+ "sidebar-foreground": "oklch(0.97 0 0)",
+ "sidebar-primary": "oklch(0.72 0.12 210.36)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.24 0 0)",
+ "sidebar-accent-foreground": "oklch(0.97 0 0)",
+ "sidebar-border": "oklch(0.29 0 0)",
+ "sidebar-ring": "oklch(0.72 0.12 210.36)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ }
+ }
+ ]
+}
diff --git a/public/r/reset-password-01.json b/public/r/reset-password-01.json
new file mode 100644
index 0000000..be52572
--- /dev/null
+++ b/public/r/reset-password-01.json
@@ -0,0 +1,59 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "reset-password-01",
+ "type": "registry:block",
+ "title": "Reset Password 1",
+ "description": "Centered card layout with logo header, clear reset password messaging, form inputs for current and new passwords, and back to login navigation for secure password recovery",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "card",
+ "input",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/reset-password/reset-password-01/page.tsx",
+ "content": "import ResetPassword from '@/components/shadcn-studio/blocks/reset-password-01/reset-password-01'\n\nconst ResetPasswordPage = () => {\n return \n}\n\nexport default ResetPasswordPage\n",
+ "type": "registry:page",
+ "target": "app/reset-password-01/page.tsx"
+ },
+ {
+ "path": "src/assets/svg/auth-background-shape.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst AuthBackgroundShape = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n )\n}\n\nexport default AuthBackgroundShape\n",
+ "type": "registry:component",
+ "target": "assets/svg/auth-background-shape.tsx"
+ },
+ {
+ "path": "src/assets/svg/logo.tsx",
+ "content": "// React Imports\nimport type { SVGAttributes } from 'react'\n\nconst Logo = (props: SVGAttributes) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "assets/svg/logo.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/reset-password-01/reset-password-01.tsx",
+ "content": "import { ChevronLeftIcon } from 'lucide-react'\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\n\nimport Logo from '@/components/layout/logo'\nimport AuthBackgroundShape from '@/assets/svg/auth-background-shape'\nimport ResetPasswordForm from '@/components/shadcn-studio/blocks/reset-password-01/reset-password-form'\n\nconst ResetPassword = () => {\n return (\n \n
\n\n
\n \n \n\n \n Reset Password \n \n Please enter your current password and choose a new password to update your account security.\n \n
\n \n\n \n {/* ResetPassword Form */}\n \n\n \n \n Back to login \n \n \n \n
\n )\n}\n\nexport default ResetPassword\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/reset-password-01/reset-password-01.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/reset-password-01/reset-password-form.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\nconst ResetPasswordForm = () => {\n const [isPasswordVisible, setIsPasswordVisible] = useState(false)\n const [isConfirmPasswordVisible, setIsConfirmPasswordVisible] = useState(false)\n\n return (\n e.preventDefault()}>\n {/* Email */}\n \n \n Email address*\n \n \n
\n\n {/* Password */}\n \n
\n New Password*\n \n
\n \n setIsPasswordVisible(prevState => !prevState)}\n className='text-muted-foreground focus-visible:ring-ring/50 absolute inset-y-0 right-0 rounded-l-none hover:bg-transparent'\n >\n {isPasswordVisible ? : }\n {isPasswordVisible ? 'Hide password' : 'Show password'} \n \n
\n
\n\n {/* Confirm Password */}\n \n
\n Confirm Password*\n \n
\n \n setIsConfirmPasswordVisible(prevState => !prevState)}\n className='text-muted-foreground focus-visible:ring-ring/50 absolute inset-y-0 right-0 rounded-l-none hover:bg-transparent'\n >\n {isConfirmPasswordVisible ? : }\n {isConfirmPasswordVisible ? 'Hide password' : 'Show password'} \n \n
\n
\n\n \n Set New Password\n \n \n )\n}\n\nexport default ResetPasswordForm\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/reset-password-01/reset-password-form.tsx"
+ },
+ {
+ "path": "src/components/layout/logo.tsx",
+ "content": "// SVG Imports\nimport LogoSvg from '@/assets/svg/logo'\n\n// Util Imports\nimport { cn } from '@/lib/utils'\n\nconst Logo = ({ className }: { className?: string }) => {\n return (\n \n \n shadcn/studio \n
\n )\n}\n\nexport default Logo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/logo.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "reset-password"
+ }
+}
\ No newline at end of file
diff --git a/public/r/select-01.json b/public/r/select-01.json
new file mode 100644
index 0000000..8bf85dc
--- /dev/null
+++ b/public/r/select-01.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-01",
+ "type": "registry:component",
+ "title": "Select 1",
+ "description": "A basic native select dropdown for gender selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-01.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst SelectNativeDemo = () => {\n const id = useId()\n\n return (\n \n Native select default \n \n Male \n Female \n Other \n \n
\n )\n}\n\nexport default SelectNativeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-01.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-02.json b/public/r/select-02.json
new file mode 100644
index 0000000..920a3b5
--- /dev/null
+++ b/public/r/select-02.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-02",
+ "type": "registry:component",
+ "title": "Select 2",
+ "description": "A native select dropdown with placeholder text for user guidance",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-02.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst SelectNativePlaceholderDemo = () => {\n const id = useId()\n\n return (\n \n Native select with placeholder \n \n \n Please select a gender\n \n Male \n Female \n Other \n \n
\n )\n}\n\nexport default SelectNativePlaceholderDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-02.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-03.json b/public/r/select-03.json
new file mode 100644
index 0000000..fcef467
--- /dev/null
+++ b/public/r/select-03.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-03",
+ "type": "registry:component",
+ "title": "Select 3",
+ "description": "A native select dropdown with icon for movie selection",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-03.tsx",
+ "content": "import { useId } from 'react'\n\nimport { FilmIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst NativeSelectWithIconDemo = () => {\n const id = useId()\n\n return (\n \n
Native select with icon \n
\n
\n \n Pick your favorite movie\n \n Godfather \n A Working Man \n The Dark Knight \n Inception \n \n
\n \n
\n
\n
\n )\n}\n\nexport default NativeSelectWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-03.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-04.json b/public/r/select-04.json
new file mode 100644
index 0000000..148ee46
--- /dev/null
+++ b/public/r/select-04.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-04",
+ "type": "registry:component",
+ "title": "Select 4",
+ "description": "A native select dropdown with helper text",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-04.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst NativeSelectWithHelperTextDemo = () => {\n const id = useId()\n\n return (\n \n
Native select with helper text \n
\n Florida \n California \n San Francisco \n Alabama \n \n
\n Could you share which city you're based in?\n
\n
\n )\n}\n\nexport default NativeSelectWithHelperTextDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-04.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-05.json b/public/r/select-05.json
new file mode 100644
index 0000000..da65e98
--- /dev/null
+++ b/public/r/select-05.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-05",
+ "type": "registry:component",
+ "title": "Select 5",
+ "description": "A native select dropdown with error state and validation message",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-05.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst NativeSelectWithErrorDemo = () => {\n const id = useId()\n\n return (\n \n
Native select with error \n
\n IST (Indian Standard Time) \n EST (Eastern Standard Time) \n PST (Pacific Standard Time) \n GMT (Greenwich Mean Time) \n \n
\n Selected option is invalid\n
\n
\n )\n}\n\nexport default NativeSelectWithErrorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-05.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-06.json b/public/r/select-06.json
new file mode 100644
index 0000000..9b7b09c
--- /dev/null
+++ b/public/r/select-06.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-06",
+ "type": "registry:component",
+ "title": "Select 6",
+ "description": "A required native select dropdown with asterisk indicator",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-06.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst NativeSelectRequiredDemo = () => {\n const id = useId()\n\n return (\n \n \n Required native select * \n \n \n Action \n Comedy \n Romance \n Thriller \n \n
\n )\n}\n\nexport default NativeSelectRequiredDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-06.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-07.json b/public/r/select-07.json
new file mode 100644
index 0000000..028d73a
--- /dev/null
+++ b/public/r/select-07.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-07",
+ "type": "registry:component",
+ "title": "Select 7",
+ "description": "A native select dropdown with option groups for categorized choices",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-07.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst NativeSelectWithOptionGroupsDemo = () => {\n const id = useId()\n\n return (\n \n Native select with option groups \n \n \n HTML \n CSS \n JavaScript \n \n \n Node.js \n Python \n Java \n \n \n
\n )\n}\n\nexport default NativeSelectWithOptionGroupsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-07.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-08.json b/public/r/select-08.json
new file mode 100644
index 0000000..a8ac647
--- /dev/null
+++ b/public/r/select-08.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-08",
+ "type": "registry:component",
+ "title": "Select 8",
+ "description": "A native select dropdown with overlapping label design",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-08.tsx",
+ "content": "import { useId } from 'react'\n\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst NativeSelectWithOverlappingLabelDemo = () => {\n const id = useId()\n\n return (\n \n \n Native select with overlapping label\n \n \n Developer \n Designer \n Manager \n QA Engineer \n \n
\n )\n}\n\nexport default NativeSelectWithOverlappingLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-08.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-09.json b/public/r/select-09.json
new file mode 100644
index 0000000..ecef2a1
--- /dev/null
+++ b/public/r/select-09.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-09",
+ "type": "registry:component",
+ "title": "Select 9",
+ "description": "A native select dropdown with inset label design and custom styling",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-09.tsx",
+ "content": "import { useId } from 'react'\n\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst NativeSelectWithInsetLabelDemo = () => {\n const id = useId()\n\n return (\n \n \n Native select with inset label\n \n \n \n Pick your favorite movie\n \n Interstellar \n Dune \n The Matrix \n Catch Me If You Can \n \n
\n )\n}\n\nexport default NativeSelectWithInsetLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-09.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-10.json b/public/r/select-10.json
new file mode 100644
index 0000000..8cffa02
--- /dev/null
+++ b/public/r/select-10.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-10",
+ "type": "registry:component",
+ "title": "Select 10",
+ "description": "A basic custom select dropdown with grouped items and labels",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-10.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectDemo = () => {\n const id = useId()\n\n return (\n \n Default select \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n
\n )\n}\n\nexport default SelectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-11.json b/public/r/select-11.json
new file mode 100644
index 0000000..533d442
--- /dev/null
+++ b/public/r/select-11.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-11",
+ "type": "registry:component",
+ "title": "Select 11",
+ "description": "A custom select dropdown with placeholder text",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-11.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectPlaceholderDemo = () => {\n const id = useId()\n\n return (\n \n Select with placeholder \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n
\n )\n}\n\nexport default SelectPlaceholderDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-12.json b/public/r/select-12.json
new file mode 100644
index 0000000..30a25d2
--- /dev/null
+++ b/public/r/select-12.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-12",
+ "type": "registry:component",
+ "title": "Select 12",
+ "description": "A custom select dropdown with icon",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-12.tsx",
+ "content": "import { useId } from 'react'\n\nimport { FilmIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectWithIconDemo = () => {\n const id = useId()\n\n return (\n \n
Select with icon \n
\n \n \n \n
\n \n \n \n God of Wars \n Ghost Rider \n The Cloth \n The Possession \n \n \n
\n )\n}\n\nexport default SelectWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-13.json b/public/r/select-13.json
new file mode 100644
index 0000000..e21a507
--- /dev/null
+++ b/public/r/select-13.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-13",
+ "type": "registry:component",
+ "title": "Select 13",
+ "description": "A custom select dropdown with helper text for location selection",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-13.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectWithHelperTextDemo = () => {\n const id = useId()\n\n return (\n \n
Select with helper text \n
\n \n \n \n \n Florida \n New York \n California \n Texas \n \n \n
\n Could you share which city you're based in?\n
\n
\n )\n}\n\nexport default SelectWithHelperTextDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-14.json b/public/r/select-14.json
new file mode 100644
index 0000000..51ae756
--- /dev/null
+++ b/public/r/select-14.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-14",
+ "type": "registry:component",
+ "title": "Select 14",
+ "description": "A custom select dropdown with error state and validation message",
+ "registryDependencies": [
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-14.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectInvalidState = () => {\n const id = useId()\n\n return (\n \n
Select with error \n
\n \n \n \n \n Tesla \n BMW \n Audi \n Mercedes-Benz \n \n \n
\n Selected option is invalid\n
\n
\n )\n}\n\nexport default SelectInvalidState\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-15.json b/public/r/select-15.json
new file mode 100644
index 0000000..e279d39
--- /dev/null
+++ b/public/r/select-15.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-15",
+ "type": "registry:component",
+ "title": "Select 15",
+ "description": "A custom select dropdown with different size variants (small, default, large)",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-15.tsx",
+ "content": "import {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectSizesDemo = () => {\n return (\n \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n
\n )\n}\n\nexport default SelectSizesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-16.json b/public/r/select-16.json
new file mode 100644
index 0000000..678d89a
--- /dev/null
+++ b/public/r/select-16.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-16",
+ "type": "registry:component",
+ "title": "Select 16",
+ "description": "A custom select dropdown with colored border and focus ring styling",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-16.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectWithColorBorderAndRingDemo = () => {\n const id = useId()\n\n return (\n \n Select with colored border and ring \n \n \n \n \n \n Electronics \n Clothing \n Home Appliances \n Books \n \n \n
\n )\n}\n\nexport default SelectWithColorBorderAndRingDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-17.json b/public/r/select-17.json
new file mode 100644
index 0000000..7e0c49e
--- /dev/null
+++ b/public/r/select-17.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-17",
+ "type": "registry:component",
+ "title": "Select 17",
+ "description": "A custom select dropdown with colored background and themed styling",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-17.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectBackgroundColorDemo = () => {\n const id = useId()\n\n return (\n \n Select with background color \n \n \n \n \n \n \n Languages \n \n Hindi\n \n \n English\n \n \n Spanish\n \n \n Mandarin\n \n \n French\n \n \n \n \n
\n )\n}\n\nexport default SelectBackgroundColorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-18.json b/public/r/select-18.json
new file mode 100644
index 0000000..81e4b02
--- /dev/null
+++ b/public/r/select-18.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-18",
+ "type": "registry:component",
+ "title": "Select 18",
+ "description": "A ghost-style custom select dropdown with minimal styling and hover effects",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-18.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectGhostDemo = () => {\n const id = useId()\n\n return (\n \n Ghost Select \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n
\n )\n}\n\nexport default SelectGhostDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-19.json b/public/r/select-19.json
new file mode 100644
index 0000000..9cc2a58
--- /dev/null
+++ b/public/r/select-19.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-19",
+ "type": "registry:component",
+ "title": "Select 19",
+ "description": "A disabled custom select dropdown with reduced opacity and interaction",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-19.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectDisabledDemo = () => {\n const id = useId()\n\n return (\n \n Disabled select \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n
\n )\n}\n\nexport default SelectDisabledDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-20.json b/public/r/select-20.json
new file mode 100644
index 0000000..7ee6f19
--- /dev/null
+++ b/public/r/select-20.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-20",
+ "type": "registry:component",
+ "title": "Select 20",
+ "description": "A custom select dropdown with disabled individual options",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-20.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectDisabledOptionDemo = () => {\n const id = useId()\n\n return (\n \n Disabled options select \n \n \n \n \n \n \n Fruits \n Apple \n \n Banana\n \n Blueberry \n \n Grapes\n \n Pineapple \n \n \n \n
\n )\n}\n\nexport default SelectDisabledOptionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-21.json b/public/r/select-21.json
new file mode 100644
index 0000000..c9cdfef
--- /dev/null
+++ b/public/r/select-21.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-21",
+ "type": "registry:component",
+ "title": "Select 21",
+ "description": "A custom select dropdown with required field indicator",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-21.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectRequiredDemo = () => {\n const id = useId()\n\n return (\n \n \n Required select * \n \n \n \n \n \n \n United States \n Japan \n Australia \n Brazil \n \n \n
\n )\n}\n\nexport default SelectRequiredDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-22.json b/public/r/select-22.json
new file mode 100644
index 0000000..802fd6e
--- /dev/null
+++ b/public/r/select-22.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-22",
+ "type": "registry:component",
+ "title": "Select 22",
+ "description": "A custom select dropdown with multiple option groups",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-22.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectWithOptionsGroupsDemo = () => {\n const id = useId()\n\n return (\n \n Select with options groups \n \n \n \n \n \n \n North America \n United States \n Canada \n Mexico \n \n \n Europe \n United Kingdom \n Germany \n France \n \n \n Asia \n India \n Japan \n China \n \n \n \n
\n )\n}\n\nexport default SelectWithOptionsGroupsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-22.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-23.json b/public/r/select-23.json
new file mode 100644
index 0000000..8f05ee9
--- /dev/null
+++ b/public/r/select-23.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-23",
+ "type": "registry:component",
+ "title": "Select 23",
+ "description": "A custom select dropdown with separators and grouped countries by geographic regions",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-23.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectWithSeparatorDemo = () => {\n const id = useId()\n\n return (\n \n Select with separator \n \n \n \n \n \n \n North America \n United States \n Canada \n Mexico \n \n \n \n Europe \n United Kingdom \n Germany \n France \n \n \n \n Asia \n India \n Japan \n China \n \n \n \n
\n )\n}\n\nexport default SelectWithSeparatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-23.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-24.json b/public/r/select-24.json
new file mode 100644
index 0000000..839a2ec
--- /dev/null
+++ b/public/r/select-24.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-24",
+ "type": "registry:component",
+ "title": "Select 24",
+ "description": "A custom select dropdown with overlapping label positioned over the border",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-24.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectWithOverlappingLabelDemo = () => {\n const id = useId()\n\n return (\n \n \n Select with overlapping label\n \n \n \n \n \n \n New York \n London \n Tokyo \n Paris \n \n \n
\n )\n}\n\nexport default SelectWithOverlappingLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-24.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-25.json b/public/r/select-25.json
new file mode 100644
index 0000000..2afa51d
--- /dev/null
+++ b/public/r/select-25.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-25",
+ "type": "registry:component",
+ "title": "Select 25",
+ "description": "A custom select dropdown with inset label design inside bordered container",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-25.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectWithInsetLabelDemo = () => {\n const id = useId()\n\n return (\n \n \n Select with inset label\n \n \n \n \n \n \n Credit Card \n Google Pay \n PayPal \n Bitcoin \n \n \n
\n )\n}\n\nexport default SelectWithInsetLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-25.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-26.json b/public/r/select-26.json
new file mode 100644
index 0000000..4ac984d
--- /dev/null
+++ b/public/r/select-26.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-26",
+ "type": "registry:component",
+ "title": "Select 26",
+ "description": "A timezone select dropdown with grouped time zones by geographic regions",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-26.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectTimeZoneDemo = () => {\n const id = useId()\n\n return (\n \n Timezone Select \n \n \n \n \n \n \n North America \n Eastern Standard Time (EST) \n Central Standard Time (CST) \n Mountain Standard Time (MST) \n Pacific Standard Time (PST) \n Alaska Standard Time (AKST) \n Hawaii Standard Time (HST) \n \n \n Europe & Africa \n Greenwich Mean Time (GMT) \n Central European Time (CET) \n Eastern European Time (EET) \n Western European Summer Time (WEST) \n Central Africa Time (CAT) \n East Africa Time (EAT) \n \n \n Asia \n Moscow Time (MSK) \n India Standard Time (IST) \n China Standard Time (CST) \n Japan Standard Time (JST) \n Korea Standard Time (KST) \n Indonesia Central Standard Time (WITA) \n \n \n Australia & Pacific \n Australian Western Standard Time (AWST) \n Australian Central Standard Time (ACST) \n Australian Eastern Standard Time (AEST) \n New Zealand Standard Time (NZST) \n Fiji Time (FJT) \n \n \n South America \n Argentina Time (ART) \n Bolivia Time (BOT) \n Brasilia Time (BRT) \n Chile Standard Time (CLT) \n \n \n \n
\n )\n}\n\nexport default SelectTimeZoneDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-26.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-27.json b/public/r/select-27.json
new file mode 100644
index 0000000..6ab0f62
--- /dev/null
+++ b/public/r/select-27.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-27",
+ "type": "registry:component",
+ "title": "Select 27",
+ "description": "A music genre select dropdown with icons for each option",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-27.tsx",
+ "content": "import { useId } from 'react'\n\nimport { GuitarIcon, HeadphonesIcon, MicVocalIcon, MusicIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectDemo = () => {\n const id = useId()\n\n return (\n \n Select option with icon \n \n \n \n \n \n \n Music Genres \n \n \n Rock\n \n \n \n Electronic\n \n \n \n Pop\n \n \n \n Jazz\n \n \n \n \n
\n )\n}\n\nexport default SelectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-27.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-28.json b/public/r/select-28.json
new file mode 100644
index 0000000..582b3b2
--- /dev/null
+++ b/public/r/select-28.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-28",
+ "type": "registry:component",
+ "title": "Select 28",
+ "description": "A custom select dropdown with leading text before the selected value",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-28.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectWithLeadingTextDemo = () => {\n const id = useId()\n\n return (\n \n Select with leading text \n \n \n \n Favorite Movie: \n \n \n \n Inception \n Interstellar \n The Dark Knight \n Pulp Fiction \n \n \n
\n )\n}\n\nexport default SelectWithLeadingTextDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-28.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-29.json b/public/r/select-29.json
new file mode 100644
index 0000000..843b25d
--- /dev/null
+++ b/public/r/select-29.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-29",
+ "type": "registry:component",
+ "title": "Select 29",
+ "description": "A status select dropdown with colored circle indicators for each status",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-29.tsx",
+ "content": "import { useId } from 'react'\n\nimport { CircleIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst SelectStatusDemo = () => {\n const id = useId()\n\n return (\n \n Status select \n \n \n \n \n \n \n \n \n In Progress \n \n \n \n \n \n Pending \n \n \n \n \n \n Completed \n \n \n \n \n \n Cancelled \n \n \n \n \n \n Rejected \n \n \n \n \n
\n )\n}\n\nexport default SelectStatusDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-29.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-30.json b/public/r/select-30.json
new file mode 100644
index 0000000..a7c23f1
--- /dev/null
+++ b/public/r/select-30.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-30",
+ "type": "registry:component",
+ "title": "Select 30",
+ "description": "A country select dropdown with flag images for each country option",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-30.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\n\nconst countries = [\n { value: '1', label: 'India', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/india.png' },\n { value: '2', label: 'China', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/china.png' },\n { value: '3', label: 'Monaco', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/monaco.png' },\n { value: '4', label: 'Serbia', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/serbia.png' },\n { value: '5', label: 'Romania', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/romania.png' },\n { value: '6', label: 'Mayotte', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/mayotte.png' },\n { value: '7', label: 'Iraq', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/iraq.png' },\n { value: '8', label: 'Syria', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/syria.png' },\n { value: '9', label: 'Korea', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/korea.png' },\n { value: '10', label: 'Zimbabwe', flag: 'https://cdn.shadcnstudio.com/ss-assets/flags/zimbabwe.png' }\n]\n\nconst SelectWithFlagsDemo = () => {\n const id = useId()\n\n return (\n \n
Options with flag \n
\n \n \n \n \n {countries.map(country => (\n \n {' '}\n {country.label} \n \n ))}\n \n \n
\n )\n}\n\nexport default SelectWithFlagsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-30.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-31.json b/public/r/select-31.json
new file mode 100644
index 0000000..0d8d031
--- /dev/null
+++ b/public/r/select-31.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-31",
+ "type": "registry:component",
+ "title": "Select 31",
+ "description": "A user select dropdown with avatar images for each user option",
+ "registryDependencies": [
+ "avatar",
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-31.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst users = [\n {\n id: '1',\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n fallback: 'PG',\n name: 'Phillip George'\n },\n {\n id: '2',\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n fallback: 'JD',\n name: 'Jaylon Donin'\n },\n {\n id: '3',\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'TC',\n name: 'Tiana Curtis'\n }\n]\n\nconst SelectWithAvatarsDemo = () => {\n const id = useId()\n\n return (\n \n
Options with avatar \n
\n \n \n \n \n \n Impersonate user \n {users.map(item => (\n \n \n \n {item.fallback} \n \n {item.name} \n \n ))}\n \n \n \n
\n )\n}\n\nexport default SelectWithAvatarsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-31.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-32.json b/public/r/select-32.json
new file mode 100644
index 0000000..7db41c1
--- /dev/null
+++ b/public/r/select-32.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-32",
+ "type": "registry:component",
+ "title": "Select 32",
+ "description": "A multi-select dropdown with search functionality for product categories",
+ "dependencies": [
+ "cmdk",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "command",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-32.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport type { Option } from '@/components/ui/multi-select'\nimport MultipleSelector from '@/components/ui/multi-select'\n\nconst categories: Option[] = [\n {\n value: 'clothing',\n label: 'Clothing'\n },\n {\n value: 'footwear',\n label: 'Footwear'\n },\n {\n value: 'accessories',\n label: 'Accessories'\n },\n {\n value: 'jewelry',\n label: 'Jewelry',\n disable: true\n },\n {\n value: 'outerwear',\n label: 'Outerwear'\n },\n {\n value: 'fragrance',\n label: 'Fragrance'\n },\n {\n value: 'makeup',\n label: 'Makeup'\n },\n {\n value: 'skincare',\n label: 'Skincare'\n },\n {\n value: 'furniture',\n label: 'Furniture'\n },\n {\n value: 'lighting',\n label: 'Lighting'\n },\n {\n value: 'kitchenware',\n label: 'Kitchenware',\n disable: true\n },\n {\n value: 'computers',\n label: 'Computers'\n },\n {\n value: 'audio',\n label: 'Audio'\n },\n {\n value: 'wearables',\n label: 'Wearables'\n },\n {\n value: 'supplements',\n label: 'Supplements'\n },\n {\n value: 'sportswear',\n label: 'Sportswear'\n }\n]\n\nconst MultipleSelectDemo = () => {\n return (\n \n )\n}\n\nexport default MultipleSelectDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-32.tsx"
+ },
+ {
+ "path": "src/components/ui/multi-select.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { useEffect } from 'react'\n\nimport { Command as CommandPrimitive, useCommandState } from 'cmdk'\nimport { XIcon } from 'lucide-react'\n\nimport { Command, CommandGroup, CommandItem, CommandList } from '@/components/ui/command'\nimport { cn } from '@/lib/utils'\n\nexport interface Option {\n value: string\n label: string\n disable?: boolean\n\n /** fixed option that can't be removed. */\n fixed?: boolean\n\n /** Group the options by providing key. */\n [key: string]: string | boolean | undefined\n}\ninterface GroupOption {\n [key: string]: Option[]\n}\n\ninterface MultipleSelectorProps {\n value?: Option[]\n defaultOptions?: Option[]\n\n /** manually controlled options */\n options?: Option[]\n placeholder?: string\n\n /** Loading component. */\n loadingIndicator?: React.ReactNode\n\n /** Empty component. */\n emptyIndicator?: React.ReactNode\n\n /** Debounce time for async search. Only work with `onSearch`. */\n delay?: number\n\n /**\n * Only work with `onSearch` prop. Trigger search when `onFocus`.\n * For example, when user click on the input, it will trigger the search to get initial options.\n **/\n triggerSearchOnFocus?: boolean\n\n /** async search */\n onSearch?: (value: string) => Promise\n\n /**\n * sync search. This search will not showing loadingIndicator.\n * The rest props are the same as async search.\n * i.e.: creatable, groupBy, delay.\n **/\n onSearchSync?: (value: string) => Option[]\n onChange?: (options: Option[]) => void\n\n /** Limit the maximum number of selected options. */\n maxSelected?: number\n\n /** When the number of selected options exceeds the limit, the onMaxSelected will be called. */\n onMaxSelected?: (maxLimit: number) => void\n\n /** Hide the placeholder when there are options selected. */\n hidePlaceholderWhenSelected?: boolean\n disabled?: boolean\n\n /** Group the options base on provided key. */\n groupBy?: string\n className?: string\n badgeClassName?: string\n\n /**\n * First item selected is a default behavior by cmdk. That is why the default is true.\n * This is a workaround solution by add a dummy item.\n *\n * @reference: https://github.com/pacocoursey/cmdk/issues/171\n */\n selectFirstItem?: boolean\n\n /** Allow user to create option when there is no option matched. */\n creatable?: boolean\n\n /** Props of `Command` */\n commandProps?: React.ComponentPropsWithoutRef\n\n /** Props of `CommandInput` */\n inputProps?: Omit, 'value' | 'placeholder' | 'disabled'>\n\n /** hide the clear all button. */\n hideClearAllButton?: boolean\n}\n\nexport interface MultipleSelectorRef {\n selectedValue: Option[]\n input: HTMLInputElement\n focus: () => void\n reset: () => void\n}\n\nexport function useDebounce(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = React.useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500)\n\n return () => {\n clearTimeout(timer)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n\nfunction transToGroupOption(options: Option[], groupBy?: string) {\n if (options.length === 0) {\n return {}\n }\n\n if (!groupBy) {\n return {\n '': options\n }\n }\n\n const groupOption: GroupOption = {}\n\n options.forEach(option => {\n const key = (option[groupBy] as string) || ''\n\n if (!groupOption[key]) {\n groupOption[key] = []\n }\n\n groupOption[key].push(option)\n })\n\n return groupOption\n}\n\nfunction removePickedOption(groupOption: GroupOption, picked: Option[]) {\n const cloneOption = JSON.parse(JSON.stringify(groupOption)) as GroupOption\n\n for (const [key, value] of Object.entries(cloneOption)) {\n cloneOption[key] = value.filter(val => !picked.find(p => p.value === val.value))\n }\n\n return cloneOption\n}\n\nfunction isOptionsExist(groupOption: GroupOption, targetOption: Option[]) {\n for (const [, value] of Object.entries(groupOption)) {\n if (value.some(option => targetOption.find(p => p.value === option.value))) {\n return true\n }\n }\n\n return false\n}\n\nconst CommandEmpty = ({ className, ...props }: React.ComponentProps) => {\n const render = useCommandState(state => state.filtered.count === 0)\n\n if (!render) return null\n\n return
\n}\n\nCommandEmpty.displayName = 'CommandEmpty'\n\nconst MultipleSelector = ({\n value,\n onChange,\n placeholder,\n defaultOptions: arrayDefaultOptions = [],\n options: arrayOptions,\n delay,\n onSearch,\n onSearchSync,\n loadingIndicator,\n emptyIndicator,\n maxSelected = Number.MAX_SAFE_INTEGER,\n onMaxSelected,\n hidePlaceholderWhenSelected,\n disabled,\n groupBy,\n className,\n badgeClassName,\n selectFirstItem = true,\n creatable = false,\n triggerSearchOnFocus = false,\n commandProps,\n inputProps,\n hideClearAllButton = false\n}: MultipleSelectorProps) => {\n const inputRef = React.useRef(null)\n const [open, setOpen] = React.useState(false)\n const [onScrollbar, setOnScrollbar] = React.useState(false)\n const [isLoading, setIsLoading] = React.useState(false)\n const dropdownRef = React.useRef(null) // Added this\n\n const [selected, setSelected] = React.useState(value || [])\n\n const [options, setOptions] = React.useState(transToGroupOption(arrayDefaultOptions, groupBy))\n\n const [inputValue, setInputValue] = React.useState('')\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500)\n\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setOpen(false)\n inputRef.current.blur()\n }\n }\n\n const handleUnselect = React.useCallback(\n (option: Option) => {\n const newOptions = selected.filter(s => s.value !== option.value)\n\n setSelected(newOptions)\n onChange?.(newOptions)\n },\n [onChange, selected]\n )\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n const input = inputRef.current\n\n if (input) {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n if (input.value === '' && selected.length > 0) {\n const lastSelectOption = selected[selected.length - 1]\n\n // If last item is fixed, we should not remove it.\n if (!lastSelectOption.fixed) {\n handleUnselect(selected[selected.length - 1])\n }\n }\n }\n\n // This is not a default behavior of the field\n if (e.key === 'Escape') {\n input.blur()\n }\n }\n },\n [handleUnselect, selected]\n )\n\n useEffect(() => {\n if (open) {\n document.addEventListener('mousedown', handleClickOutside)\n document.addEventListener('touchend', handleClickOutside)\n } else {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('touchend', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('touchend', handleClickOutside)\n }\n }, [open])\n\n useEffect(() => {\n if (value) {\n setSelected(value)\n }\n }, [value])\n\n useEffect(() => {\n /** If `onSearch` is provided, do not trigger options updated. */\n if (!arrayOptions || onSearch) {\n return\n }\n\n const newOption = transToGroupOption(arrayOptions || [], groupBy)\n\n if (JSON.stringify(newOption) !== JSON.stringify(options)) {\n setOptions(newOption)\n }\n }, [arrayDefaultOptions, arrayOptions, groupBy, onSearch, options])\n\n useEffect(() => {\n /** sync search */\n\n const doSearchSync = () => {\n const res = onSearchSync?.(debouncedSearchTerm)\n\n setOptions(transToGroupOption(res || [], groupBy))\n }\n\n const exec = async () => {\n if (!onSearchSync || !open) return\n\n if (triggerSearchOnFocus) {\n doSearchSync()\n }\n\n if (debouncedSearchTerm) {\n doSearchSync()\n }\n }\n\n void exec()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus])\n\n useEffect(() => {\n /** async search */\n\n const doSearch = async () => {\n setIsLoading(true)\n const res = await onSearch?.(debouncedSearchTerm)\n\n setOptions(transToGroupOption(res || [], groupBy))\n setIsLoading(false)\n }\n\n const exec = async () => {\n if (!onSearch || !open) return\n\n if (triggerSearchOnFocus) {\n await doSearch()\n }\n\n if (debouncedSearchTerm) {\n await doSearch()\n }\n }\n\n void exec()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus])\n\n const CreatableItem = () => {\n if (!creatable) return undefined\n\n if (\n isOptionsExist(options, [{ value: inputValue, label: inputValue }]) ||\n selected.find(s => s.value === inputValue)\n ) {\n return undefined\n }\n\n const Item = (\n {\n e.preventDefault()\n e.stopPropagation()\n }}\n onSelect={(value: string) => {\n if (selected.length >= maxSelected) {\n onMaxSelected?.(selected.length)\n\n return\n }\n\n setInputValue('')\n const newOptions = [...selected, { value, label: value }]\n\n setSelected(newOptions)\n onChange?.(newOptions)\n }}\n >\n {`Create \"${inputValue}\"`}\n \n )\n\n // For normal creatable\n if (!onSearch && inputValue.length > 0) {\n return Item\n }\n\n // For async search creatable. avoid showing creatable item before loading at first.\n if (onSearch && debouncedSearchTerm.length > 0 && !isLoading) {\n return Item\n }\n\n return undefined\n }\n\n const EmptyItem = React.useCallback(() => {\n if (!emptyIndicator) return undefined\n\n // For async search that showing emptyIndicator\n if (onSearch && !creatable && Object.keys(options).length === 0) {\n return (\n \n {emptyIndicator}\n \n )\n }\n\n return {emptyIndicator} \n }, [creatable, emptyIndicator, onSearch, options])\n\n const selectables = React.useMemo(() => removePickedOption(options, selected), [options, selected])\n\n /** Avoid Creatable Selector freezing or lagging when paste a long string. */\n const commandFilter = React.useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter\n }\n\n if (creatable) {\n return (value: string, search: string) => {\n return value.toLowerCase().includes(search.toLowerCase()) ? 1 : -1\n }\n }\n\n // Using default filter in `cmdk`. We don‘t have to provide it.\n return undefined\n }, [creatable, commandProps?.filter])\n\n return (\n {\n handleKeyDown(e)\n commandProps?.onKeyDown?.(e)\n }}\n className={cn('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch} // When onSearch is provided, we don‘t want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n {\n if (disabled) return\n inputRef?.current?.focus()\n }}\n >\n
\n {selected.map(option => {\n return (\n
\n {option.label}\n {\n if (e.key === 'Enter') {\n handleUnselect(option)\n }\n }}\n onMouseDown={e => {\n e.preventDefault()\n e.stopPropagation()\n }}\n onClick={() => handleUnselect(option)}\n aria-label='Remove'\n >\n \n \n
\n )\n })}\n {/* Avoid having the \"Search\" Icon */}\n
{\n setInputValue(value)\n inputProps?.onValueChange?.(value)\n }}\n onBlur={event => {\n if (!onScrollbar) {\n setOpen(false)\n }\n\n inputProps?.onBlur?.(event)\n }}\n onFocus={event => {\n setOpen(true)\n\n if (triggerSearchOnFocus) {\n onSearch?.(debouncedSearchTerm)\n }\n\n inputProps?.onFocus?.(event)\n }}\n placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-muted-foreground/70 flex-1 bg-transparent outline-hidden disabled:cursor-not-allowed',\n {\n 'w-full': hidePlaceholderWhenSelected,\n 'px-3 py-2': selected.length === 0,\n 'ml-1': selected.length !== 0\n },\n inputProps?.className\n )}\n />\n {\n setSelected(selected.filter(s => s.fixed))\n onChange?.(selected.filter(s => s.fixed))\n }}\n className={cn(\n 'text-muted-foreground/80 hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 absolute top-0 right-0 flex size-9 items-center justify-center rounded-md border border-transparent transition-[color,box-shadow] outline-none focus-visible:ring-[3px]',\n (hideClearAllButton ||\n disabled ||\n selected.length < 1 ||\n selected.filter(s => s.fixed).length === selected.length) &&\n 'hidden'\n )}\n aria-label='Clear all'\n >\n \n \n \n
\n \n
\n {open && (\n {\n setOnScrollbar(false)\n }}\n onMouseEnter={() => {\n setOnScrollbar(true)\n }}\n onMouseUp={() => {\n inputRef?.current?.focus()\n }}\n >\n {isLoading ? (\n <>{loadingIndicator}>\n ) : (\n <>\n {EmptyItem()}\n {CreatableItem()}\n {!selectFirstItem && }\n {Object.entries(selectables).map(([key, dropdowns]) => (\n \n <>\n {dropdowns.map(option => {\n return (\n {\n e.preventDefault()\n e.stopPropagation()\n }}\n onSelect={() => {\n if (selected.length >= maxSelected) {\n onMaxSelected?.(selected.length)\n\n return\n }\n\n setInputValue('')\n const newOptions = [...selected, option]\n\n setSelected(newOptions)\n onChange?.(newOptions)\n }}\n className={cn(\n 'cursor-pointer',\n option.disable && 'pointer-events-none cursor-not-allowed opacity-50'\n )}\n >\n {option.label}\n \n )\n })}\n >\n \n ))}\n >\n )}\n \n )}\n
\n
\n \n )\n}\n\nMultipleSelector.displayName = 'MultipleSelector'\nexport default MultipleSelector\n",
+ "type": "registry:ui",
+ "target": "components/ui/multi-select.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-33.json b/public/r/select-33.json
new file mode 100644
index 0000000..5e0c814
--- /dev/null
+++ b/public/r/select-33.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-33",
+ "type": "registry:component",
+ "title": "Select 33",
+ "description": "A multi-select dropdown with placeholder, badge display and removal functionality",
+ "dependencies": [
+ "cmdk",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "command",
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-33.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport type { Option } from '@/components/ui/multi-select'\nimport MultipleSelector from '@/components/ui/multi-select'\n\nconst categories: Option[] = [\n {\n value: 'clothing',\n label: 'Clothing'\n },\n {\n value: 'footwear',\n label: 'Footwear'\n },\n {\n value: 'accessories',\n label: 'Accessories'\n },\n {\n value: 'jewelry',\n label: 'Jewelry',\n disable: true\n },\n {\n value: 'outerwear',\n label: 'Outerwear'\n },\n {\n value: 'fragrance',\n label: 'Fragrance'\n },\n {\n value: 'makeup',\n label: 'Makeup'\n },\n {\n value: 'skincare',\n label: 'Skincare'\n },\n {\n value: 'furniture',\n label: 'Furniture'\n },\n {\n value: 'lighting',\n label: 'Lighting'\n },\n {\n value: 'kitchenware',\n label: 'Kitchenware',\n disable: true\n },\n {\n value: 'computers',\n label: 'Computers'\n },\n {\n value: 'audio',\n label: 'Audio'\n },\n {\n value: 'wearables',\n label: 'Wearables'\n },\n {\n value: 'supplements',\n label: 'Supplements'\n },\n {\n value: 'sportswear',\n label: 'Sportswear'\n }\n]\n\nconst MultipleSelectWithPlaceholderDemo = () => {\n return (\n \n
Multiselect with placeholder and clear \n
No results found}\n className='w-full'\n />\n \n Inspired by{' '}\n \n shadcn/ui expressions\n \n
\n \n )\n}\n\nexport default MultipleSelectWithPlaceholderDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-33.tsx"
+ },
+ {
+ "path": "src/components/ui/multi-select.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { useEffect } from 'react'\n\nimport { Command as CommandPrimitive, useCommandState } from 'cmdk'\nimport { XIcon } from 'lucide-react'\n\nimport { Command, CommandGroup, CommandItem, CommandList } from '@/components/ui/command'\nimport { cn } from '@/lib/utils'\n\nexport interface Option {\n value: string\n label: string\n disable?: boolean\n\n /** fixed option that can't be removed. */\n fixed?: boolean\n\n /** Group the options by providing key. */\n [key: string]: string | boolean | undefined\n}\ninterface GroupOption {\n [key: string]: Option[]\n}\n\ninterface MultipleSelectorProps {\n value?: Option[]\n defaultOptions?: Option[]\n\n /** manually controlled options */\n options?: Option[]\n placeholder?: string\n\n /** Loading component. */\n loadingIndicator?: React.ReactNode\n\n /** Empty component. */\n emptyIndicator?: React.ReactNode\n\n /** Debounce time for async search. Only work with `onSearch`. */\n delay?: number\n\n /**\n * Only work with `onSearch` prop. Trigger search when `onFocus`.\n * For example, when user click on the input, it will trigger the search to get initial options.\n **/\n triggerSearchOnFocus?: boolean\n\n /** async search */\n onSearch?: (value: string) => Promise\n\n /**\n * sync search. This search will not showing loadingIndicator.\n * The rest props are the same as async search.\n * i.e.: creatable, groupBy, delay.\n **/\n onSearchSync?: (value: string) => Option[]\n onChange?: (options: Option[]) => void\n\n /** Limit the maximum number of selected options. */\n maxSelected?: number\n\n /** When the number of selected options exceeds the limit, the onMaxSelected will be called. */\n onMaxSelected?: (maxLimit: number) => void\n\n /** Hide the placeholder when there are options selected. */\n hidePlaceholderWhenSelected?: boolean\n disabled?: boolean\n\n /** Group the options base on provided key. */\n groupBy?: string\n className?: string\n badgeClassName?: string\n\n /**\n * First item selected is a default behavior by cmdk. That is why the default is true.\n * This is a workaround solution by add a dummy item.\n *\n * @reference: https://github.com/pacocoursey/cmdk/issues/171\n */\n selectFirstItem?: boolean\n\n /** Allow user to create option when there is no option matched. */\n creatable?: boolean\n\n /** Props of `Command` */\n commandProps?: React.ComponentPropsWithoutRef\n\n /** Props of `CommandInput` */\n inputProps?: Omit, 'value' | 'placeholder' | 'disabled'>\n\n /** hide the clear all button. */\n hideClearAllButton?: boolean\n}\n\nexport interface MultipleSelectorRef {\n selectedValue: Option[]\n input: HTMLInputElement\n focus: () => void\n reset: () => void\n}\n\nexport function useDebounce(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = React.useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500)\n\n return () => {\n clearTimeout(timer)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n\nfunction transToGroupOption(options: Option[], groupBy?: string) {\n if (options.length === 0) {\n return {}\n }\n\n if (!groupBy) {\n return {\n '': options\n }\n }\n\n const groupOption: GroupOption = {}\n\n options.forEach(option => {\n const key = (option[groupBy] as string) || ''\n\n if (!groupOption[key]) {\n groupOption[key] = []\n }\n\n groupOption[key].push(option)\n })\n\n return groupOption\n}\n\nfunction removePickedOption(groupOption: GroupOption, picked: Option[]) {\n const cloneOption = JSON.parse(JSON.stringify(groupOption)) as GroupOption\n\n for (const [key, value] of Object.entries(cloneOption)) {\n cloneOption[key] = value.filter(val => !picked.find(p => p.value === val.value))\n }\n\n return cloneOption\n}\n\nfunction isOptionsExist(groupOption: GroupOption, targetOption: Option[]) {\n for (const [, value] of Object.entries(groupOption)) {\n if (value.some(option => targetOption.find(p => p.value === option.value))) {\n return true\n }\n }\n\n return false\n}\n\nconst CommandEmpty = ({ className, ...props }: React.ComponentProps) => {\n const render = useCommandState(state => state.filtered.count === 0)\n\n if (!render) return null\n\n return
\n}\n\nCommandEmpty.displayName = 'CommandEmpty'\n\nconst MultipleSelector = ({\n value,\n onChange,\n placeholder,\n defaultOptions: arrayDefaultOptions = [],\n options: arrayOptions,\n delay,\n onSearch,\n onSearchSync,\n loadingIndicator,\n emptyIndicator,\n maxSelected = Number.MAX_SAFE_INTEGER,\n onMaxSelected,\n hidePlaceholderWhenSelected,\n disabled,\n groupBy,\n className,\n badgeClassName,\n selectFirstItem = true,\n creatable = false,\n triggerSearchOnFocus = false,\n commandProps,\n inputProps,\n hideClearAllButton = false\n}: MultipleSelectorProps) => {\n const inputRef = React.useRef(null)\n const [open, setOpen] = React.useState(false)\n const [onScrollbar, setOnScrollbar] = React.useState(false)\n const [isLoading, setIsLoading] = React.useState(false)\n const dropdownRef = React.useRef(null) // Added this\n\n const [selected, setSelected] = React.useState(value || [])\n\n const [options, setOptions] = React.useState(transToGroupOption(arrayDefaultOptions, groupBy))\n\n const [inputValue, setInputValue] = React.useState('')\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500)\n\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setOpen(false)\n inputRef.current.blur()\n }\n }\n\n const handleUnselect = React.useCallback(\n (option: Option) => {\n const newOptions = selected.filter(s => s.value !== option.value)\n\n setSelected(newOptions)\n onChange?.(newOptions)\n },\n [onChange, selected]\n )\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n const input = inputRef.current\n\n if (input) {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n if (input.value === '' && selected.length > 0) {\n const lastSelectOption = selected[selected.length - 1]\n\n // If last item is fixed, we should not remove it.\n if (!lastSelectOption.fixed) {\n handleUnselect(selected[selected.length - 1])\n }\n }\n }\n\n // This is not a default behavior of the field\n if (e.key === 'Escape') {\n input.blur()\n }\n }\n },\n [handleUnselect, selected]\n )\n\n useEffect(() => {\n if (open) {\n document.addEventListener('mousedown', handleClickOutside)\n document.addEventListener('touchend', handleClickOutside)\n } else {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('touchend', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('touchend', handleClickOutside)\n }\n }, [open])\n\n useEffect(() => {\n if (value) {\n setSelected(value)\n }\n }, [value])\n\n useEffect(() => {\n /** If `onSearch` is provided, do not trigger options updated. */\n if (!arrayOptions || onSearch) {\n return\n }\n\n const newOption = transToGroupOption(arrayOptions || [], groupBy)\n\n if (JSON.stringify(newOption) !== JSON.stringify(options)) {\n setOptions(newOption)\n }\n }, [arrayDefaultOptions, arrayOptions, groupBy, onSearch, options])\n\n useEffect(() => {\n /** sync search */\n\n const doSearchSync = () => {\n const res = onSearchSync?.(debouncedSearchTerm)\n\n setOptions(transToGroupOption(res || [], groupBy))\n }\n\n const exec = async () => {\n if (!onSearchSync || !open) return\n\n if (triggerSearchOnFocus) {\n doSearchSync()\n }\n\n if (debouncedSearchTerm) {\n doSearchSync()\n }\n }\n\n void exec()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus])\n\n useEffect(() => {\n /** async search */\n\n const doSearch = async () => {\n setIsLoading(true)\n const res = await onSearch?.(debouncedSearchTerm)\n\n setOptions(transToGroupOption(res || [], groupBy))\n setIsLoading(false)\n }\n\n const exec = async () => {\n if (!onSearch || !open) return\n\n if (triggerSearchOnFocus) {\n await doSearch()\n }\n\n if (debouncedSearchTerm) {\n await doSearch()\n }\n }\n\n void exec()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus])\n\n const CreatableItem = () => {\n if (!creatable) return undefined\n\n if (\n isOptionsExist(options, [{ value: inputValue, label: inputValue }]) ||\n selected.find(s => s.value === inputValue)\n ) {\n return undefined\n }\n\n const Item = (\n {\n e.preventDefault()\n e.stopPropagation()\n }}\n onSelect={(value: string) => {\n if (selected.length >= maxSelected) {\n onMaxSelected?.(selected.length)\n\n return\n }\n\n setInputValue('')\n const newOptions = [...selected, { value, label: value }]\n\n setSelected(newOptions)\n onChange?.(newOptions)\n }}\n >\n {`Create \"${inputValue}\"`}\n \n )\n\n // For normal creatable\n if (!onSearch && inputValue.length > 0) {\n return Item\n }\n\n // For async search creatable. avoid showing creatable item before loading at first.\n if (onSearch && debouncedSearchTerm.length > 0 && !isLoading) {\n return Item\n }\n\n return undefined\n }\n\n const EmptyItem = React.useCallback(() => {\n if (!emptyIndicator) return undefined\n\n // For async search that showing emptyIndicator\n if (onSearch && !creatable && Object.keys(options).length === 0) {\n return (\n \n {emptyIndicator}\n \n )\n }\n\n return {emptyIndicator} \n }, [creatable, emptyIndicator, onSearch, options])\n\n const selectables = React.useMemo(() => removePickedOption(options, selected), [options, selected])\n\n /** Avoid Creatable Selector freezing or lagging when paste a long string. */\n const commandFilter = React.useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter\n }\n\n if (creatable) {\n return (value: string, search: string) => {\n return value.toLowerCase().includes(search.toLowerCase()) ? 1 : -1\n }\n }\n\n // Using default filter in `cmdk`. We don‘t have to provide it.\n return undefined\n }, [creatable, commandProps?.filter])\n\n return (\n {\n handleKeyDown(e)\n commandProps?.onKeyDown?.(e)\n }}\n className={cn('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch} // When onSearch is provided, we don‘t want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n {\n if (disabled) return\n inputRef?.current?.focus()\n }}\n >\n
\n {selected.map(option => {\n return (\n
\n {option.label}\n {\n if (e.key === 'Enter') {\n handleUnselect(option)\n }\n }}\n onMouseDown={e => {\n e.preventDefault()\n e.stopPropagation()\n }}\n onClick={() => handleUnselect(option)}\n aria-label='Remove'\n >\n \n \n
\n )\n })}\n {/* Avoid having the \"Search\" Icon */}\n
{\n setInputValue(value)\n inputProps?.onValueChange?.(value)\n }}\n onBlur={event => {\n if (!onScrollbar) {\n setOpen(false)\n }\n\n inputProps?.onBlur?.(event)\n }}\n onFocus={event => {\n setOpen(true)\n\n if (triggerSearchOnFocus) {\n onSearch?.(debouncedSearchTerm)\n }\n\n inputProps?.onFocus?.(event)\n }}\n placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-muted-foreground/70 flex-1 bg-transparent outline-hidden disabled:cursor-not-allowed',\n {\n 'w-full': hidePlaceholderWhenSelected,\n 'px-3 py-2': selected.length === 0,\n 'ml-1': selected.length !== 0\n },\n inputProps?.className\n )}\n />\n {\n setSelected(selected.filter(s => s.fixed))\n onChange?.(selected.filter(s => s.fixed))\n }}\n className={cn(\n 'text-muted-foreground/80 hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 absolute top-0 right-0 flex size-9 items-center justify-center rounded-md border border-transparent transition-[color,box-shadow] outline-none focus-visible:ring-[3px]',\n (hideClearAllButton ||\n disabled ||\n selected.length < 1 ||\n selected.filter(s => s.fixed).length === selected.length) &&\n 'hidden'\n )}\n aria-label='Clear all'\n >\n \n \n \n
\n \n
\n {open && (\n {\n setOnScrollbar(false)\n }}\n onMouseEnter={() => {\n setOnScrollbar(true)\n }}\n onMouseUp={() => {\n inputRef?.current?.focus()\n }}\n >\n {isLoading ? (\n <>{loadingIndicator}>\n ) : (\n <>\n {EmptyItem()}\n {CreatableItem()}\n {!selectFirstItem && }\n {Object.entries(selectables).map(([key, dropdowns]) => (\n \n <>\n {dropdowns.map(option => {\n return (\n {\n e.preventDefault()\n e.stopPropagation()\n }}\n onSelect={() => {\n if (selected.length >= maxSelected) {\n onMaxSelected?.(selected.length)\n\n return\n }\n\n setInputValue('')\n const newOptions = [...selected, option]\n\n setSelected(newOptions)\n onChange?.(newOptions)\n }}\n className={cn(\n 'cursor-pointer',\n option.disable && 'pointer-events-none cursor-not-allowed opacity-50'\n )}\n >\n {option.label}\n \n )\n })}\n >\n \n ))}\n >\n )}\n \n )}\n
\n
\n \n )\n}\n\nMultipleSelector.displayName = 'MultipleSelector'\nexport default MultipleSelector\n",
+ "type": "registry:ui",
+ "target": "components/ui/multi-select.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-34.json b/public/r/select-34.json
new file mode 100644
index 0000000..9ad16a6
--- /dev/null
+++ b/public/r/select-34.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-34",
+ "type": "registry:component",
+ "title": "Select 34",
+ "description": "A native multiple select dropdown for dietary preferences with bordered container",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-34.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { SelectNative } from '@/components/ui/select-native'\n\nconst SelectNativeMultipleDemo = () => {\n const id = useId()\n\n return (\n \n
Native multiple select \n
\n \n Vegetarian \n Vegan \n Gluten-Free \n Halal \n Kosher \n Dairy-Free \n \n
\n
\n )\n}\n\nexport default SelectNativeMultipleDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-34.tsx"
+ },
+ {
+ "path": "src/components/ui/select-native.tsx",
+ "content": "import type { ComponentProps } from 'react'\n\nimport { ChevronDownIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst SelectNative = ({ className, children, ...props }: ComponentProps<'select'>) => {\n return (\n \n \n {children}\n \n {!props.multiple && (\n \n \n \n )}\n
\n )\n}\n\nexport { SelectNative }\n",
+ "type": "registry:ui",
+ "target": "components/ui/select-native.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-35.json b/public/r/select-35.json
new file mode 100644
index 0000000..a44e0b0
--- /dev/null
+++ b/public/r/select-35.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-35",
+ "type": "registry:component",
+ "title": "Select 35",
+ "description": "A React Aria Components listbox with single selection for currency options",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-35.tsx",
+ "content": "'use client'\n\nimport { ListBox, ListBoxItem } from 'react-aria-components'\n\nimport { Label } from '@/components/ui/label'\n\nconst listitems = [\n { id: 'usd', label: 'USD (United States Dollar)' },\n { id: 'eur', label: 'EUR (Euro)' },\n { id: 'gbp', label: 'GBP (British Pound)', isDisabled: true },\n { id: 'jpy', label: 'JPY (Japanese Yen)' }\n]\n\nconst ListboxSingleOptionDemo = () => {\n return (\n \n
Listbox with single option selectable \n
\n \n {listitems.map(item => (\n \n {item.label}\n \n ))}\n \n
\n
\n Built using{' '}\n \n React Aria\n \n
\n
\n )\n}\n\nexport default ListboxSingleOptionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-35.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-36.json b/public/r/select-36.json
new file mode 100644
index 0000000..9aeaa0c
--- /dev/null
+++ b/public/r/select-36.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-36",
+ "type": "registry:component",
+ "title": "Select 36",
+ "description": "A React Aria Components listbox with multiple selection and grouped language options",
+ "dependencies": [
+ "react-aria-components"
+ ],
+ "registryDependencies": [
+ "label"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-36.tsx",
+ "content": "'use client'\n\nimport { Header, ListBox, ListBoxItem, ListBoxSection, Separator } from 'react-aria-components'\n\nimport { Label } from '@/components/ui/label'\n\nconst ListBoxWithOptionGroupsDemo = () => {\n return (\n \n
Listbox with option groups \n
\n \n \n \n \n English\n \n \n French\n \n \n Spanish\n \n \n \n \n \n \n Hindi\n \n \n Japanese\n \n \n Mandarin\n \n \n \n \n \n \n Swahili\n \n \n Arabic\n \n \n Russian\n \n \n \n
\n
\n Built using{' '}\n \n React Aria\n \n
\n
\n )\n}\n\nexport default ListBoxWithOptionGroupsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-36.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select-37.json b/public/r/select-37.json
new file mode 100644
index 0000000..72ec72d
--- /dev/null
+++ b/public/r/select-37.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-37",
+ "type": "registry:component",
+ "title": "Select 37",
+ "description": "An animated select dropdown with slide-in from bottom transition effect",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-37.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectMenuSlideInDemo = () => {\n const id = useId()\n\n return (\n \n Select menu slide-in from bottom \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n
\n )\n}\n\nexport default SelectMenuSlideInDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-37.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/select-38.json b/public/r/select-38.json
new file mode 100644
index 0000000..6324ffa
--- /dev/null
+++ b/public/r/select-38.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select-38",
+ "type": "registry:component",
+ "title": "Select 38",
+ "description": "An animated select dropdown with zoom-in transition effect from center",
+ "registryDependencies": [
+ "label",
+ "select"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/select/select-38.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue\n} from '@/components/ui/select'\n\nconst SelectMenuZoomInDemo = () => {\n const id = useId()\n\n return (\n \n Select menu zoom-in \n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n
\n )\n}\n\nexport default SelectMenuZoomInDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/select/select-38.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/sheet-01.json b/public/r/sheet-01.json
new file mode 100644
index 0000000..4a83a84
--- /dev/null
+++ b/public/r/sheet-01.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sheet-01",
+ "type": "registry:component",
+ "title": "Sheet 1",
+ "description": "A basic sheet component with form inputs for profile editing",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-01.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger\n} from '@/components/ui/sheet'\n\nconst SheetDemo = () => {\n return (\n \n \n Default \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n Save changes \n \n Close \n \n \n \n \n )\n}\n\nexport default SheetDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sheet-02.json b/public/r/sheet-02.json
new file mode 100644
index 0000000..2f1c1c3
--- /dev/null
+++ b/public/r/sheet-02.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sheet-02",
+ "type": "registry:component",
+ "title": "Sheet 2",
+ "description": "A sheet component demonstrating different slide directions (top, right, bottom, left)",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-02.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger\n} from '@/components/ui/sheet'\n\nconst SheetSidesDemo = () => {\n return (\n \n
\n \n Top \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n Save changes \n \n Close \n \n \n \n \n
\n \n Right \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n Save changes \n \n Close \n \n \n \n \n
\n \n Bottom \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n Save changes \n \n Close \n \n \n \n \n
\n \n Left \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n Save changes \n \n Close \n \n \n \n \n
\n )\n}\n\nexport default SheetSidesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sheet-03.json b/public/r/sheet-03.json
new file mode 100644
index 0000000..dd14b87
--- /dev/null
+++ b/public/r/sheet-03.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sheet-03",
+ "type": "registry:component",
+ "title": "Sheet 3",
+ "description": "A non-modal sheet component without overlay for profile editing",
+ "registryDependencies": [
+ "button",
+ "input",
+ "label",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-03.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger\n} from '@/components/ui/sheet'\n\nconst SheetWithNoOverlayDemo = () => {\n return (\n \n \n No Overlay \n \n \n \n Edit profile \n Make changes to your profile here. Click save when you're done. \n \n \n \n Save changes \n \n Close \n \n \n \n \n )\n}\n\nexport default SheetWithNoOverlayDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sheet-04.json b/public/r/sheet-04.json
new file mode 100644
index 0000000..21dc31a
--- /dev/null
+++ b/public/r/sheet-04.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sheet-04",
+ "type": "registry:component",
+ "title": "Sheet 4",
+ "description": "A sheet component with scrollable content for terms and conditions",
+ "registryDependencies": [
+ "button",
+ "scroll-area",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-04.tsx",
+ "content": "import { Button } from '@/components/ui/button'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger\n} from '@/components/ui/sheet'\n\nconst SheetWithScrollableContentDemo = () => {\n return (\n \n \n Scrollable Content \n \n \n \n \n Terms & Condition \n Make sure read the terms and conditions before proceeding. \n \n \n
Last Updated: June 1, 2025
\n\n
1. Introduction \n
\n Welcome to our platform. These Terms and Conditions outline the rules and regulations for the use of our\n services. By accessing or using our services, you agree to comply with these terms. If you do not agree\n with any of these terms, please do not use our services.\n
\n\n
2. Acceptance of Terms \n
\n By using our services, you confirm that you have read, understood, and accepted these terms. You also\n agree to comply with any additional guidelines, policies, or rules that may apply to specific features of\n our services.\n
\n\n
3. Services Provided \n
\n We offer a range of digital services including but not limited to content creation, subscription services,\n and access to various online tools. You acknowledge that the nature of our services may change over time,\n and we reserve the right to modify, suspend, or discontinue services at any time.\n
\n\n
4. User Obligations \n
\n As a user, you agree to provide accurate and complete information when required, and to update this\n information if necessary. You are responsible for maintaining the confidentiality of your account details,\n including username and password, and for all activities under your account.\n
\n\n
5. Prohibited Activities \n
You may not use our services for any unlawful activities, including but not limited to:
\n
\n Distributing malicious content or viruses \n Engaging in illegal activities or fraud \n Impersonating another user or entity \n Harassing or bullying other users \n \n\n
6. Content Ownership \n
\n All content, including text, images, graphics, and software on our platform, is owned by us or our\n licensors and is protected by copyright laws. You are granted a limited, non-exclusive license to access\n and use this content for personal or business purposes.\n
\n\n
7. Privacy and Data Protection \n
\n Your privacy is important to us. Please refer to our Privacy Policy to understand how we\n collect, use, and protect your personal data.\n
\n\n
8. Payment Terms \n
\n Some of our services are available for a fee. You agree to pay all applicable charges and fees associated\n with your use of the services. We reserve the right to change the pricing of our services at any time.\n
\n\n
9. Termination \n
\n We may suspend or terminate your account if you violate these Terms and Conditions or engage in any\n behavior that we deem inappropriate. Upon termination, your access to our services will be revoked, and\n any outstanding payments will be due immediately.\n
\n\n
10. Disclaimers and Limitation of Liability \n
\n We provide our services "as is" and make no warranties regarding the accuracy, reliability, or\n availability of the services. We are not responsible for any damages, losses, or expenses incurred by your\n use of our services.\n
\n\n
11. Governing Law \n
\n These Terms and Conditions shall be governed by and construed in accordance with the laws of the\n jurisdiction in which our company is based. Any disputes arising from these terms shall be subject to the\n exclusive jurisdiction of the courts of that jurisdiction.\n
\n\n
12. Changes to Terms \n
\n We reserve the right to update or modify these Terms and Conditions at any time. Any changes will be\n posted on this page, and the revised terms will take effect immediately upon posting. It is your\n responsibility to review these terms periodically for any updates.\n
\n\n
13. Contact Information \n
If you have any questions or concerns about these Terms and Conditions, please contact us at:
\n
Email: support@example.com
\n
Phone: +1 (800) 123-4567
\n
\n \n \n Accept \n \n \n Cancel \n \n \n \n \n \n )\n}\n\nexport default SheetWithScrollableContentDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sheet-05.json b/public/r/sheet-05.json
new file mode 100644
index 0000000..bfcb2e5
--- /dev/null
+++ b/public/r/sheet-05.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sheet-05",
+ "type": "registry:component",
+ "title": "Sheet 5",
+ "description": "A sheet component with form validation and structured user registration",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "alert",
+ "button",
+ "form",
+ "input",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-05.tsx",
+ "content": "'use client'\n\nimport { CheckCheckIcon } from 'lucide-react'\n\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nimport { Alert, AlertTitle } from '@/components/ui/alert'\nimport { Button } from '@/components/ui/button'\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Input } from '@/components/ui/input'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger\n} from '@/components/ui/sheet'\n\nconst SheetWithFormDemo = () => {\n const FormSchema = z.object({\n firstName: z.string().min(1, 'First name is required').min(2, 'First name must be at least 2 characters'),\n lastName: z.string().min(1, 'Last name is required').min(2, 'Last name must be at least 2 characters'),\n email: z.string().min(1, 'Email is required').email({ message: 'Please enter a valid email address.' }),\n mobileNumber: z\n .number({ required_error: 'Mobile number is required', invalid_type_error: 'Please enter a valid number' })\n .int('Mobile number must be a whole number')\n .positive('Mobile number must be positive')\n .refine(val => val.toString().length === 10, 'Mobile number must be exactly 10 digits'),\n password: z.string().min(1, 'Password is required').min(8, 'Password must be at least 8 characters')\n })\n\n const form = useForm>({\n resolver: zodResolver(FormSchema),\n defaultValues: {\n firstName: '',\n lastName: '',\n email: '',\n mobileNumber: undefined,\n password: ''\n }\n })\n\n const onSubmit = () => {\n toast.custom(() => (\n \n \n Account created successfully! \n \n ))\n }\n\n return (\n \n \n Sign Up \n \n \n \n Sign Up \n \n \n \n \n (\n \n First Name \n \n \n \n \n \n )}\n />\n (\n \n Last Name \n \n \n \n \n \n )}\n />\n (\n \n Email \n \n \n \n \n \n )}\n />\n (\n \n Mobile Number \n \n {\n const value = e.target.value.replace(/[^\\d]/g, '')\n\n const limitedValue = value.slice(0, 10)\n\n const numValue = limitedValue === '' ? undefined : parseInt(limitedValue, 10)\n\n field.onChange(numValue)\n }}\n />\n \n \n \n )}\n />\n (\n \n Password \n \n \n \n \n \n )}\n />\n
\n \n Create Account \n\n \n Close \n \n \n \n \n \n \n )\n}\n\nexport default SheetWithFormDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sheet-06.json b/public/r/sheet-06.json
new file mode 100644
index 0000000..0953c78
--- /dev/null
+++ b/public/r/sheet-06.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sheet-06",
+ "type": "registry:component",
+ "title": "Sheet 6",
+ "description": "A navigation sheet component with collapsible menu structure",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "collapsible",
+ "sheet"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-06.tsx",
+ "content": "import type { ForwardRefExoticComponent, RefAttributes } from 'react'\n\nimport {\n BookTextIcon,\n CalendarDaysIcon,\n ChevronRightIcon,\n CircleSmallIcon,\n HeartPlusIcon,\n HomeIcon,\n LayoutPanelTopIcon,\n LogInIcon,\n LogOutIcon,\n MailIcon,\n MessageSquareTextIcon,\n PanelTopIcon,\n ShoppingCartIcon,\n type LucideProps\n} from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'\n\ntype NavigationItem = {\n name: string\n icon: ForwardRefExoticComponent & RefAttributes>\n} & (\n | {\n type: 'page'\n children?: never\n }\n | {\n type: 'category'\n children: NavigationItem[]\n }\n)\n\nconst navigationMenu: NavigationItem[] = [\n {\n name: 'Dashboard',\n icon: HomeIcon,\n type: 'page'\n },\n {\n name: 'Layouts',\n icon: LayoutPanelTopIcon,\n type: 'category',\n children: [\n {\n name: 'Content Navbar',\n icon: LayoutPanelTopIcon,\n type: 'page'\n },\n {\n name: 'Horizontal',\n icon: LayoutPanelTopIcon,\n type: 'page'\n },\n {\n name: 'Without Menu',\n icon: LayoutPanelTopIcon,\n type: 'page'\n }\n ]\n },\n {\n name: 'Front Pages',\n icon: PanelTopIcon,\n type: 'category',\n children: [\n {\n name: 'Landing Page',\n icon: PanelTopIcon,\n type: 'page'\n },\n {\n name: 'Pricing Page',\n icon: PanelTopIcon,\n type: 'page'\n },\n {\n name: 'Checkout Page',\n icon: PanelTopIcon,\n type: 'page'\n }\n ]\n },\n {\n name: 'Chat',\n icon: MessageSquareTextIcon,\n type: 'page'\n },\n {\n name: 'Email',\n icon: MailIcon,\n type: 'page'\n },\n {\n name: 'Calendar',\n icon: CalendarDaysIcon,\n type: 'page'\n },\n {\n name: 'Ecommerce',\n icon: ShoppingCartIcon,\n type: 'category',\n children: [\n {\n name: 'Products',\n icon: ShoppingCartIcon,\n type: 'page'\n },\n {\n name: 'Categories',\n icon: ShoppingCartIcon,\n type: 'page'\n },\n {\n name: 'Shopping & Delivery',\n icon: ShoppingCartIcon,\n type: 'page'\n },\n {\n name: 'Location',\n icon: ShoppingCartIcon,\n type: 'page'\n }\n ]\n },\n {\n name: 'Sign In',\n icon: LogInIcon,\n type: 'page'\n },\n {\n name: 'Sign Out',\n icon: LogOutIcon,\n type: 'page'\n },\n {\n name: 'Support',\n icon: HeartPlusIcon,\n type: 'page'\n },\n {\n name: 'Documentation',\n icon: BookTextIcon,\n type: 'page'\n }\n]\n\nconst NavigationMenu = ({ item, level }: { level: number; item: NavigationItem }) => {\n if (item.type === 'page') {\n return (\n \n {level === 0 ? : }\n {item.name} \n
\n )\n }\n\n return (\n \n \n {level === 0 ? : }\n {item.name} \n \n \n \n {item.children.map(item => (\n \n ))}\n \n \n )\n}\n\nconst SheetWithNavigationMenuDemo = () => {\n return (\n \n \n Navigation Menu \n \n \n \n Menu \n \n \n {navigationMenu.map(item => (\n \n ))}\n
\n \n \n )\n}\n\nexport default SheetWithNavigationMenuDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sheet-07.json b/public/r/sheet-07.json
new file mode 100644
index 0000000..77af6e1
--- /dev/null
+++ b/public/r/sheet-07.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sheet-07",
+ "type": "registry:component",
+ "title": "Sheet 7",
+ "description": "A sheet component with data table, pagination, and form integration for adding user data",
+ "dependencies": [
+ "@tanstack/react-table",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "button",
+ "checkbox",
+ "input",
+ "label",
+ "select",
+ "sheet",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sheet/sheet-07.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { PlusIcon } from 'lucide-react'\n\nimport type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState } from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\n\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger\n} from '@/components/ui/sheet'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst data: Payment[] = [\n {\n id: '1',\n name: 'Shang Chain',\n amount: 699,\n status: 'success',\n email: 'shang07@yahoo.com'\n },\n {\n id: '2',\n name: 'Kevin Lincoln',\n amount: 242,\n status: 'success',\n email: 'kevinli09@gmail.com'\n },\n {\n id: '3',\n name: 'Milton Rose',\n amount: 655,\n status: 'processing',\n email: 'rose96@gmail.com'\n },\n {\n id: '4',\n name: 'Silas Ryan',\n amount: 874,\n status: 'success',\n email: 'silas22@gmail.com'\n },\n {\n id: '5',\n name: 'Ben Tenison',\n amount: 541,\n status: 'failed',\n email: 'bent@hotmail.com'\n }\n]\n\nexport type Payment = {\n id: string\n name: string\n amount: number\n status: 'pending' | 'processing' | 'success' | 'failed'\n email: string\n}\n\nexport const columns: ColumnDef[] = [\n {\n id: 'select',\n header: ({ table }) => (\n table.toggleAllPageRowsSelected(!!value)}\n aria-label='Select all'\n />\n ),\n cell: ({ row }) => (\n row.toggleSelected(!!value)}\n aria-label='Select row'\n />\n ),\n enableSorting: false,\n enableHiding: false\n },\n {\n header: 'Name',\n accessorKey: 'name',\n cell: ({ row }) => {row.getValue('name')}
\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: ({ row }) => {row.getValue('status')}
\n },\n {\n accessorKey: 'email',\n header: 'Email',\n cell: ({ row }) => {row.getValue('email')}
\n },\n {\n accessorKey: 'amount',\n header: () => Amount
,\n cell: ({ row }) => {\n const amount = parseFloat(row.getValue('amount'))\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount)\n\n return {formatted}
\n }\n }\n]\n\nconst DataTableDensityDemo = () => {\n const [tableData, setTableData] = useState(data)\n const [globalFilter, setGlobalFilter] = useState('')\n const [sorting, setSorting] = useState([])\n const [columnFilters, setColumnFilters] = useState([])\n const [columnVisibility, setColumnVisibility] = useState({})\n const [rowSelection, setRowSelection] = useState({})\n const [isSheetOpen, setIsSheetOpen] = useState(false)\n\n // Form state for adding new user\n const [newUser, setNewUser] = useState({\n name: '',\n email: '',\n amount: '',\n status: 'pending' as Payment['status']\n })\n\n // Function to handle form submission\n const handleAddUser = () => {\n if (!newUser.name || !newUser.email || !newUser.amount) {\n return // Basic validation\n }\n\n const newPayment: Payment = {\n id: String(tableData.length + 1),\n name: newUser.name,\n email: newUser.email,\n amount: parseFloat(newUser.amount),\n status: newUser.status\n }\n\n setTableData([...tableData, newPayment])\n\n // Reset form\n setNewUser({\n name: '',\n email: '',\n amount: '',\n status: 'pending'\n })\n\n setIsSheetOpen(false)\n }\n\n const table = useReactTable({\n data: tableData,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n onGlobalFilterChange: setGlobalFilter,\n globalFilterFn: 'includesString',\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n globalFilter\n }\n })\n\n return (\n \n
\n
setGlobalFilter(String(event.target.value))}\n className='max-w-2xs'\n />\n
\n \n \n \n Add Users\n \n \n \n \n Add New User \n Add a new user to the table. Fill in all the required information. \n \n \n
\n Name \n setNewUser({ ...newUser, name: e.target.value })}\n placeholder='Enter user name'\n />\n
\n
\n Email \n setNewUser({ ...newUser, email: e.target.value })}\n placeholder='Enter email address'\n />\n
\n
\n Amount \n setNewUser({ ...newUser, amount: e.target.value })}\n placeholder='Enter amount'\n />\n
\n
\n Status \n setNewUser({ ...newUser, status: value })}\n >\n \n \n \n \n Pending \n Processing \n Success \n Failed \n \n \n
\n
\n \n \n Add User\n \n \n Cancel \n \n \n \n \n
\n
\n
\n \n {table.getHeaderGroups().map(headerGroup => (\n \n {headerGroup.headers.map(header => {\n return (\n \n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n \n )\n })}\n \n ))}\n \n \n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map(row => (\n \n {row.getVisibleCells().map(cell => (\n {flexRender(cell.column.columnDef.cell, cell.getContext())} \n ))}\n \n ))\n ) : (\n \n \n No results.\n \n \n )}\n \n
\n
\n
Add new user with sheet
\n
\n )\n}\n\nexport default DataTableDensityDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sheet/sheet-07.tsx"
+ }
+ ],
+ "meta": {
+ "className": "col-span-full border-r-0"
+ }
+}
\ No newline at end of file
diff --git a/public/r/slack.json b/public/r/slack.json
new file mode 100644
index 0000000..83240fe
--- /dev/null
+++ b/public/r/slack.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "slack",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Lato, sans-serif",
+ "font-mono": "Roboto Mono, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0.5rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(1.00 0 0)",
+ "foreground": "oklch(0.23 0 0)",
+ "card": "oklch(0.98 0 0)",
+ "card-foreground": "oklch(0.23 0 0)",
+ "popover": "oklch(0.98 0 0)",
+ "popover-foreground": "oklch(0.23 0 0)",
+ "primary": "oklch(0.37 0.14 323.40)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.96 0.01 311.36)",
+ "secondary-foreground": "oklch(0.31 0.11 327.10)",
+ "muted": "oklch(0.97 0 0)",
+ "muted-foreground": "oklch(0.49 0 0)",
+ "accent": "oklch(0.88 0.02 323.34)",
+ "accent-foreground": "oklch(0.31 0.11 327.10)",
+ "destructive": "oklch(0.59 0.22 11.39)",
+ "border": "oklch(0.91 0 0)",
+ "input": "oklch(0.91 0 0)",
+ "ring": "oklch(0.37 0.14 323.40)",
+ "chart-1": "oklch(0.31 0.11 327.10)",
+ "chart-2": "oklch(0.37 0.14 323.40)",
+ "chart-3": "oklch(0.59 0.22 11.39)",
+ "chart-4": "oklch(0.77 0.13 222.66)",
+ "chart-5": "oklch(0.69 0.14 160.27)",
+ "sidebar": "oklch(0.96 0.01 311.36)",
+ "sidebar-foreground": "oklch(0.23 0 0)",
+ "sidebar-primary": "oklch(0.37 0.14 323.40)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.88 0.02 323.34)",
+ "sidebar-accent-foreground": "oklch(0.31 0.11 327.10)",
+ "sidebar-border": "oklch(0.91 0 0)",
+ "sidebar-ring": "oklch(0.37 0.14 323.40)",
+ "font-sans": "Lato, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "Roboto Mono, monospace",
+ "radius": "0.5rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.23 0.01 260.69)",
+ "foreground": "oklch(0.93 0 0)",
+ "card": "oklch(0.26 0.01 260.70)",
+ "card-foreground": "oklch(0.93 0 0)",
+ "popover": "oklch(0.26 0.01 260.70)",
+ "popover-foreground": "oklch(0.93 0 0)",
+ "primary": "oklch(0.58 0.14 327.21)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.30 0.01 254.00)",
+ "secondary-foreground": "oklch(0.93 0 0)",
+ "muted": "oklch(0.26 0.01 260.70)",
+ "muted-foreground": "oklch(0.68 0 0)",
+ "accent": "oklch(0.33 0.03 326.28)",
+ "accent-foreground": "oklch(0.93 0 0)",
+ "destructive": "oklch(0.59 0.22 11.39)",
+ "border": "oklch(0.30 0.01 268.37)",
+ "input": "oklch(0.30 0.01 268.37)",
+ "ring": "oklch(0.58 0.14 327.21)",
+ "chart-1": "oklch(0.58 0.14 327.21)",
+ "chart-2": "oklch(0.77 0.13 222.66)",
+ "chart-3": "oklch(0.69 0.14 160.27)",
+ "chart-4": "oklch(0.59 0.22 11.39)",
+ "chart-5": "oklch(0.80 0.15 82.32)",
+ "sidebar": "oklch(0.23 0.01 260.69)",
+ "sidebar-foreground": "oklch(0.93 0 0)",
+ "sidebar-primary": "oklch(0.58 0.14 327.21)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.33 0.03 326.28)",
+ "sidebar-accent-foreground": "oklch(0.93 0 0)",
+ "sidebar-border": "oklch(0.30 0.01 268.37)",
+ "sidebar-ring": "oklch(0.58 0.14 327.21)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/social-proof-01.json b/public/r/social-proof-01.json
new file mode 100644
index 0000000..4a9099f
--- /dev/null
+++ b/public/r/social-proof-01.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "social-proof-01",
+ "type": "registry:block",
+ "title": "Social Proof 1",
+ "description": "Feature checklist layout with split design showcasing product benefits alongside a complementary image. Perfect for highlighting key features with checkmark icons and descriptive content.",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/marketing-ui/social-proof/social-proof-01/page.tsx",
+ "content": "import SocialProof from '@/components/shadcn-studio/blocks/social-proof-01/social-proof-01'\n\nconst features = [\n {\n title: 'Powerful Campaign Tracking & ROI Analysis',\n description: 'Track campaign performance and analyze return on investment'\n },\n {\n title: 'Customizable Reporting & Data Exportation',\n description: 'Create custom reports and export data easily'\n }\n]\n\nconst SocialProofPage = () => {\n return \n}\n\nexport default SocialProofPage\n",
+ "type": "registry:page",
+ "target": "app/social-proof-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/social-proof-01/social-proof-01.tsx",
+ "content": "import { CircleCheckIcon } from 'lucide-react'\n\ntype Feature = {\n title: string\n description: string\n}\n\nconst SocialProof = ({ features }: { features: Feature[] }) => {\n return (\n \n \n
\n
\n
\n
Social Proof
\n
Create Impactful White Label Reports \n
\n Craft customizable reports that showcase your campaign's success, align with your brand, and\n simplify sharing insights with stakeholders while enabling data export and ROI analysis.\n
\n
\n\n
\n {features.map((feature, index) => (\n \n \n {feature.title} \n \n ))}\n \n
\n\n
\n
\n
\n
\n
\n
\n \n )\n}\n\nexport default SocialProof\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/social-proof-01/social-proof-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "marketing-ui",
+ "section": "social-proof"
+ }
+}
\ No newline at end of file
diff --git a/public/r/sonner-01.json b/public/r/sonner-01.json
new file mode 100644
index 0000000..afdaa57
--- /dev/null
+++ b/public/r/sonner-01.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-01",
+ "type": "registry:component",
+ "title": "Sonner 1",
+ "description": "A basic toast notification with simple message display",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-01.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SonnerDemo = () => {\n return (\n toast('Action completed successfully!')}>\n Default Toast\n \n )\n}\n\nexport default SonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-02.json b/public/r/sonner-02.json
new file mode 100644
index 0000000..dc09eff
--- /dev/null
+++ b/public/r/sonner-02.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-02",
+ "type": "registry:component",
+ "title": "Sonner 2",
+ "description": "A toast notification with title and description for detailed information",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-02.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SonnerWithDescriptionDemo = () => {\n return (\n \n toast('Event is created', {\n description: 'Friday, August 15, 2025 at 9:00 AM'\n })\n }\n >\n Toast with description\n \n )\n}\n\nexport default SonnerWithDescriptionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-03.json b/public/r/sonner-03.json
new file mode 100644
index 0000000..33991d9
--- /dev/null
+++ b/public/r/sonner-03.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-03",
+ "type": "registry:component",
+ "title": "Sonner 3",
+ "description": "A toast notification with custom icon for enhanced visual communication",
+ "dependencies": [
+ "lucide-react",
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-03.tsx",
+ "content": "'use client'\n\nimport { TruckIcon } from 'lucide-react'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SonnerWithIconDemo = () => {\n return (\n \n toast(\n \n \n Your order has been successfully placed, and your parcel is on its way.\n
\n )\n }\n >\n Toast with icon\n \n )\n}\n\nexport default SonnerWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-04.json b/public/r/sonner-04.json
new file mode 100644
index 0000000..a999176
--- /dev/null
+++ b/public/r/sonner-04.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-04",
+ "type": "registry:component",
+ "title": "Sonner 4",
+ "description": "A toast notification with avatar component for personalized user notifications",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-04.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\n\nconst SonnerWithAvatarDemo = () => {\n return (\n \n toast(\n \n
\n \n HR \n \n Hey Henry Richer, your profile is now up to date!\n
\n )\n }\n >\n Toast with avatar\n \n )\n}\n\nexport default SonnerWithAvatarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-05.json b/public/r/sonner-05.json
new file mode 100644
index 0000000..3909bbd
--- /dev/null
+++ b/public/r/sonner-05.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-05",
+ "type": "registry:component",
+ "title": "Sonner 5",
+ "description": "A closable toast notification with user-controlled dismiss functionality",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-05.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst ClosableSonnerDemo = () => {\n return (\n \n toast('Action completed successfully!', {\n closeButton: true\n })\n }\n >\n Closable Toast\n \n )\n}\n\nexport default ClosableSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-06.json b/public/r/sonner-06.json
new file mode 100644
index 0000000..8e25abf
--- /dev/null
+++ b/public/r/sonner-06.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-06",
+ "type": "registry:component",
+ "title": "Sonner 6",
+ "description": "A toast notification with action button for interactive user responses",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-06.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SonnerWithActionDemo = () => {\n return (\n \n toast('Action completed successfully!', {\n action: {\n label: 'Undo',\n onClick: () => console.log('Undo')\n }\n })\n }\n >\n Toast with action\n \n )\n}\n\nexport default SonnerWithActionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-07.json b/public/r/sonner-07.json
new file mode 100644
index 0000000..c3e3f80
--- /dev/null
+++ b/public/r/sonner-07.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-07",
+ "type": "registry:component",
+ "title": "Sonner 7",
+ "description": "A promise-based toast notification with loading, success, and error states",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-07.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SonnerWithPromiseDemo = () => {\n const promise = () =>\n new Promise((resolve, reject) =>\n setTimeout(() => {\n if (Math.random() < 0.5) {\n resolve('foo')\n } else {\n reject('fox')\n }\n }, 2000)\n )\n\n return (\n \n toast.promise(promise, {\n loading: 'Loading...',\n success: 'Toast has been added successfully!',\n error: 'Oops, there was an error adding the toast.'\n })\n }\n >\n Toast with promise\n \n )\n}\n\nexport default SonnerWithPromiseDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-08.json b/public/r/sonner-08.json
new file mode 100644
index 0000000..572cefe
--- /dev/null
+++ b/public/r/sonner-08.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-08",
+ "type": "registry:component",
+ "title": "Sonner 8",
+ "description": "A toast notification with configurable positioning options for all screen corners and centers for e.g. (top-left, top-right, bottom-left, bottom-right, center)",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-08.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SonnerPositionDemo = () => {\n return (\n \n \n toast('Action completed successfully!', {\n position: 'top-left'\n })\n }\n >\n Top Left\n \n \n toast('Action completed successfully!', {\n position: 'top-center'\n })\n }\n >\n Top Center\n \n \n toast('Action completed successfully!', {\n position: 'top-right'\n })\n }\n >\n Top Right\n \n \n toast('Action completed successfully!', {\n position: 'bottom-left'\n })\n }\n >\n Bottom Left\n \n \n toast('Action completed successfully!', {\n position: 'bottom-center'\n })\n }\n >\n Bottom Center\n \n \n toast('Action completed successfully!', {\n position: 'bottom-right'\n })\n }\n >\n Bottom Right\n \n
\n )\n}\n\nexport default SonnerPositionDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-09.json b/public/r/sonner-09.json
new file mode 100644
index 0000000..a4fef65
--- /dev/null
+++ b/public/r/sonner-09.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-09",
+ "type": "registry:component",
+ "title": "Sonner 9",
+ "description": "A soft-styled info toast notification with color-mixed background for subtle messaging",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-09.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SoftInfoSonnerDemo = () => {\n return (\n \n toast.info('This is for your information, please note.', {\n style: {\n '--normal-bg':\n 'color-mix(in oklab, light-dark(var(--color-sky-600), var(--color-sky-400)) 10%, var(--background))',\n '--normal-text': 'light-dark(var(--color-sky-600), var(--color-sky-400))',\n '--normal-border': 'light-dark(var(--color-sky-600), var(--color-sky-400))'\n } as React.CSSProperties\n })\n }\n >\n Soft Info Toast\n \n )\n}\n\nexport default SoftInfoSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-10.json b/public/r/sonner-10.json
new file mode 100644
index 0000000..74eab49
--- /dev/null
+++ b/public/r/sonner-10.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-10",
+ "type": "registry:component",
+ "title": "Sonner 10",
+ "description": "A soft-styled success toast notification with green color theming for positive feedback",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-10.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SoftSuccessSonnerDemo = () => {\n return (\n \n toast.success('Action completed successfully!', {\n style: {\n '--normal-bg':\n 'color-mix(in oklab, light-dark(var(--color-green-600), var(--color-green-400)) 10%, var(--background))',\n '--normal-text': 'light-dark(var(--color-green-600), var(--color-green-400))',\n '--normal-border': 'light-dark(var(--color-green-600), var(--color-green-400))'\n } as React.CSSProperties\n })\n }\n >\n Soft Success Toast\n \n )\n}\n\nexport default SoftSuccessSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-11.json b/public/r/sonner-11.json
new file mode 100644
index 0000000..8ce2056
--- /dev/null
+++ b/public/r/sonner-11.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-11",
+ "type": "registry:component",
+ "title": "Sonner 11",
+ "description": "A soft-styled warning toast notification with amber color theming for caution messages",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-11.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SoftWarningSonnerDemo = () => {\n return (\n \n toast.warning('Warning: Please check the entered data.', {\n style: {\n '--normal-bg':\n 'color-mix(in oklab, light-dark(var(--color-amber-600), var(--color-amber-400)) 10%, var(--background))',\n '--normal-text': 'light-dark(var(--color-amber-600), var(--color-amber-400))',\n '--normal-border': 'light-dark(var(--color-amber-600), var(--color-amber-400))'\n } as React.CSSProperties\n })\n }\n >\n Soft Warning Toast\n \n )\n}\n\nexport default SoftWarningSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-12.json b/public/r/sonner-12.json
new file mode 100644
index 0000000..419b56d
--- /dev/null
+++ b/public/r/sonner-12.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-12",
+ "type": "registry:component",
+ "title": "Sonner 12",
+ "description": "A soft-styled destructive error toast notification with subtle red theming for error messages",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-12.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SoftDestructiveSonnerDemo = () => {\n return (\n \n toast.error('Oops, there was an error processing your request.', {\n style: {\n '--normal-bg': 'color-mix(in oklab, var(--destructive) 10%, var(--background))',\n '--normal-text': 'var(--destructive)',\n '--normal-border': 'var(--destructive)'\n } as React.CSSProperties\n })\n }\n >\n Soft Destructive Toast\n \n )\n}\n\nexport default SoftDestructiveSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-13.json b/public/r/sonner-13.json
new file mode 100644
index 0000000..8296943
--- /dev/null
+++ b/public/r/sonner-13.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-13",
+ "type": "registry:component",
+ "title": "Sonner 13",
+ "description": "An outline-styled info toast notification with border highlighting for informational messages",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-13.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst OutlineInfoSonnerDemo = () => {\n return (\n \n toast.info('This is for your information, please note.', {\n style: {\n '--normal-bg': 'var(--background)',\n '--normal-text': 'light-dark(var(--color-sky-600), var(--color-sky-400))',\n '--normal-border': 'light-dark(var(--color-sky-600), var(--color-sky-400))'\n } as React.CSSProperties\n })\n }\n >\n Outline Info Toast\n \n )\n}\n\nexport default OutlineInfoSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-14.json b/public/r/sonner-14.json
new file mode 100644
index 0000000..e25ee31
--- /dev/null
+++ b/public/r/sonner-14.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-14",
+ "type": "registry:component",
+ "title": "Sonner 14",
+ "description": "An outline-styled success toast notification with green border theming for positive feedback",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-14.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst OutlineSuccessSonnerDemo = () => {\n return (\n \n toast.success('Action completed successfully!', {\n style: {\n '--normal-bg': 'var(--background)',\n '--normal-text': 'light-dark(var(--color-green-600), var(--color-green-400))',\n '--normal-border': 'light-dark(var(--color-green-600), var(--color-green-400))'\n } as React.CSSProperties\n })\n }\n >\n Outline Success Toast\n \n )\n}\n\nexport default OutlineSuccessSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-15.json b/public/r/sonner-15.json
new file mode 100644
index 0000000..6ddd246
--- /dev/null
+++ b/public/r/sonner-15.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-15",
+ "type": "registry:component",
+ "title": "Sonner 15",
+ "description": "An outline-styled warning toast notification with amber border theming for caution messages",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-15.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst OutlineWarningSonnerDemo = () => {\n return (\n \n toast.warning('Warning: Please check the entered data.', {\n style: {\n '--normal-bg': 'var(--background)',\n '--normal-text': 'light-dark(var(--color-amber-600), var(--color-amber-400))',\n '--normal-border': 'light-dark(var(--color-amber-600), var(--color-amber-400))'\n } as React.CSSProperties\n })\n }\n >\n Outline Warning Toast\n \n )\n}\n\nexport default OutlineWarningSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-16.json b/public/r/sonner-16.json
new file mode 100644
index 0000000..4d0d7e9
--- /dev/null
+++ b/public/r/sonner-16.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-16",
+ "type": "registry:component",
+ "title": "Sonner 16",
+ "description": "An outline-styled destructive error toast notification with red border theming for error messages",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-16.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst OutlineDestructiveSonnerDemo = () => {\n return (\n \n toast.error('Oops, there was an error processing your request.', {\n style: {\n '--normal-bg': 'var(--background)',\n '--normal-text': 'var(--destructive)',\n '--normal-border': 'var(--destructive)'\n } as React.CSSProperties\n })\n }\n >\n Outline Destructive Toast\n \n )\n}\n\nexport default OutlineDestructiveSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-17.json b/public/r/sonner-17.json
new file mode 100644
index 0000000..fc705f2
--- /dev/null
+++ b/public/r/sonner-17.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-17",
+ "type": "registry:component",
+ "title": "Sonner 17",
+ "description": "A solid-styled info toast notification with blue background and white text for prominent messaging",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-17.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SolidInfoSonnerDemo = () => {\n return (\n \n toast.info('This is for your information, please note.', {\n style: {\n '--normal-bg': 'light-dark(var(--color-sky-600), var(--color-sky-400))',\n '--normal-text': 'var(--color-white)',\n '--normal-border': 'light-dark(var(--color-sky-600), var(--color-sky-400))'\n } as React.CSSProperties\n })\n }\n >\n Solid Info Toast\n \n )\n}\n\nexport default SolidInfoSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-18.json b/public/r/sonner-18.json
new file mode 100644
index 0000000..f94f4b3
--- /dev/null
+++ b/public/r/sonner-18.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-18",
+ "type": "registry:component",
+ "title": "Sonner 18",
+ "description": "A solid-styled success toast notification with green background and white text for prominent positive feedback",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-18.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SolidSuccessSonnerDemo = () => {\n return (\n \n toast.success('Action completed successfully!', {\n style: {\n '--normal-bg': 'light-dark(var(--color-green-600), var(--color-green-400))',\n '--normal-text': 'var(--color-white)',\n '--normal-border': 'light-dark(var(--color-green-600), var(--color-green-400))'\n } as React.CSSProperties\n })\n }\n >\n Solid Success Toast\n \n )\n}\n\nexport default SolidSuccessSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-19.json b/public/r/sonner-19.json
new file mode 100644
index 0000000..b87fd2c
--- /dev/null
+++ b/public/r/sonner-19.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-19",
+ "type": "registry:component",
+ "title": "Sonner 19",
+ "description": "A solid-styled warning toast notification with amber background and white text for prominent caution messages",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-19.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SolidWarningSonnerDemo = () => {\n return (\n \n toast.warning('Warning: Please check the entered data.', {\n style: {\n '--normal-bg': 'light-dark(var(--color-amber-600), var(--color-amber-400))',\n '--normal-text': 'var(--color-white)',\n '--normal-border': 'light-dark(var(--color-amber-600), var(--color-amber-400))'\n } as React.CSSProperties\n })\n }\n >\n Solid Warning Toast\n \n )\n}\n\nexport default SolidWarningSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/sonner-20.json b/public/r/sonner-20.json
new file mode 100644
index 0000000..cefd8aa
--- /dev/null
+++ b/public/r/sonner-20.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sonner-20",
+ "type": "registry:component",
+ "title": "Sonner 20",
+ "description": "A solid-styled destructive error toast notification with red background and white text for prominent error messages",
+ "dependencies": [
+ "sonner"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/sonner/sonner-20.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '@/components/ui/button'\n\nconst SolidDestructiveSonnerDemo = () => {\n return (\n \n toast.error('Oops, there was an error processing your request.', {\n style: {\n '--normal-bg':\n 'light-dark(var(--destructive), color-mix(in oklab, var(--destructive) 60%, var(--background)))',\n '--normal-text': 'var(--color-white)',\n '--normal-border': 'transparent'\n } as React.CSSProperties\n })\n }\n >\n Solid Destructive Toast\n \n )\n}\n\nexport default SolidDestructiveSonnerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/sonner/sonner-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/spotify.json b/public/r/spotify.json
new file mode 100644
index 0000000..230d1d8
--- /dev/null
+++ b/public/r/spotify.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "spotify",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Lato, sans-serif",
+ "font-mono": "Roboto Mono, Geist Mono, Geist Mono Fallback, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "font-serif": "Merriweather, Geist, Geist Fallback, ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "radius": "0.25rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.99 0 0)",
+ "foreground": "oklch(0.35 0.02 165.48)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.35 0.02 165.48)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.35 0.02 165.48)",
+ "primary": "oklch(0.67 0.17 153.85)",
+ "primary-foreground": "oklch(0.99 0.02 175.22)",
+ "secondary": "oklch(0.90 0.02 238.66)",
+ "secondary-foreground": "oklch(0.20 0.02 266.02)",
+ "muted": "oklch(0.90 0.02 240.73)",
+ "muted-foreground": "oklch(0.50 0.03 268.53)",
+ "accent": "oklch(0.90 0.02 240.73)",
+ "accent-foreground": "oklch(0.35 0.02 165.48)",
+ "destructive": "oklch(0.61 0.24 20.96)",
+ "border": "oklch(0.94 0.01 238.46)",
+ "input": "oklch(0.85 0.02 240.75)",
+ "ring": "oklch(0.67 0.17 153.85)",
+ "chart-1": "oklch(0.67 0.17 153.85)",
+ "chart-2": "oklch(0.50 0.10 270.06)",
+ "chart-3": "oklch(0.72 0.12 201.79)",
+ "chart-4": "oklch(0.80 0.10 100.65)",
+ "chart-5": "oklch(0.60 0.15 300.14)",
+ "sidebar": "oklch(0.98 0.01 238.45)",
+ "sidebar-foreground": "oklch(0.35 0.02 165.48)",
+ "sidebar-primary": "oklch(0.67 0.17 153.85)",
+ "sidebar-primary-foreground": "oklch(0.98 0.01 238.45)",
+ "sidebar-accent": "oklch(0.90 0.02 240.73)",
+ "sidebar-accent-foreground": "oklch(0.35 0.02 165.48)",
+ "sidebar-border": "oklch(0.85 0.02 240.75)",
+ "sidebar-ring": "oklch(0.67 0.17 153.85)",
+ "font-sans": "Lato, sans-serif",
+ "font-serif": "Merriweather, Geist, Geist Fallback, ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "Roboto Mono, Geist Mono, Geist Mono Fallback, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "radius": "0.25rem",
+ "shadow-color": "oklch(0.35 0.05 163.50)",
+ "shadow-opacity": "0.04",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.02)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.02)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 1px 2px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 1px 2px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow-md": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 2px 4px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 4px 6px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.04), 0px 8px 10px -1px oklch(0.35 0.05 163.02 / 0.04)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0.35 0.05 163.02 / 0.10)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.15 0.02 269.18)",
+ "foreground": "oklch(0.95 0.01 238.46)",
+ "card": "oklch(0.20 0.02 266.02)",
+ "card-foreground": "oklch(0.95 0.01 238.46)",
+ "popover": "oklch(0.20 0.02 266.02)",
+ "popover-foreground": "oklch(0.95 0.01 238.46)",
+ "primary": "oklch(0.67 0.17 153.85)",
+ "primary-foreground": "oklch(0.15 0.02 269.18)",
+ "secondary": "oklch(0.30 0.03 271.05)",
+ "secondary-foreground": "oklch(0.95 0.01 238.46)",
+ "muted": "oklch(0.30 0.03 271.05)",
+ "muted-foreground": "oklch(0.60 0.03 269.46)",
+ "accent": "oklch(0.30 0.03 271.05)",
+ "accent-foreground": "oklch(0.95 0.01 238.46)",
+ "destructive": "oklch(0.64 0.25 19.69)",
+ "border": "oklch(0.95 0.01 238.46 / 15%)",
+ "input": "oklch(0.95 0.01 238.46 / 20%)",
+ "ring": "oklch(0.67 0.17 153.85)",
+ "chart-1": "oklch(0.67 0.17 153.85)",
+ "chart-2": "oklch(0.60 0.10 269.83)",
+ "chart-3": "oklch(0.72 0.12 201.79)",
+ "chart-4": "oklch(0.80 0.10 100.65)",
+ "chart-5": "oklch(0.60 0.15 300.14)",
+ "sidebar": "oklch(0.20 0.02 266.02)",
+ "sidebar-foreground": "oklch(0.95 0.01 238.46)",
+ "sidebar-primary": "oklch(0.67 0.17 153.85)",
+ "sidebar-primary-foreground": "oklch(0.15 0.02 269.18)",
+ "sidebar-accent": "oklch(0.30 0.03 271.05)",
+ "sidebar-accent-foreground": "oklch(0.95 0.01 238.46)",
+ "sidebar-border": "oklch(0.95 0.01 238.46 / 15%)",
+ "sidebar-ring": "oklch(0.67 0.17 153.85)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0 0 0)",
+ "shadow-opacity": "0.01",
+ "shadow-blur": "2px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 2px 0px oklch(0 0 0 / 0.01)",
+ "shadow-xs": "0px 1px 2px 0px oklch(0 0 0 / 0.01)",
+ "shadow-sm": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 1px 2px -1px oklch(0 0 0 / 0.01)",
+ "shadow-md": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 2px 4px -1px oklch(0 0 0 / 0.01)",
+ "shadow-lg": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 4px 6px -1px oklch(0 0 0 / 0.01)",
+ "shadow-xl": "0px 1px 2px 0px oklch(0 0 0 / 0.01), 0px 8px 10px -1px oklch(0 0 0 / 0.01)",
+ "shadow-2xl": "0px 1px 2px 0px oklch(0 0 0 / 0.03)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/statistics-component-01.json b/public/r/statistics-component-01.json
new file mode 100644
index 0000000..4632386
--- /dev/null
+++ b/public/r/statistics-component-01.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "statistics-component-01",
+ "type": "registry:block",
+ "title": "Statistics 1",
+ "description": "Logistics and shipping statistics cards displaying Shipped Orders, Damaged Returns, Missed Delivery Slots, and Late Deliveries with percentage change indicators and \"than last week\" comparison periods",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/app/(blank)/preview/dashboard-and-application/statistics-component/statistics-component-01/page.tsx",
+ "content": "import { CalendarX2Icon, Clock8Icon, TriangleAlertIcon, TruckIcon } from 'lucide-react'\n\nimport StatisticsCard from '@/components/shadcn-studio/blocks/statistics-card-01'\n\n// Statistics card data\nconst StatisticsCardData = [\n {\n icon: ,\n value: '42',\n title: 'Shipped Orders',\n changePercentage: '+18.2%'\n },\n {\n icon: ,\n value: '8',\n title: 'Damaged Returns',\n changePercentage: '-8.7%'\n },\n {\n icon: ,\n value: '27',\n title: 'Missed Delivery Slots',\n changePercentage: '+4.3%'\n },\n {\n icon: ,\n value: '13',\n title: 'Late Deliveries',\n changePercentage: '-2.5%'\n }\n]\n\nconst StatisticsCardPreview = () => {\n return (\n \n
\n {StatisticsCardData.map((card, index) => (\n \n ))}\n
\n
\n )\n}\n\nexport default StatisticsCardPreview\n",
+ "type": "registry:page",
+ "target": "app/statistics-component-01/page.tsx"
+ },
+ {
+ "path": "src/components/shadcn-studio/blocks/statistics-card-01.tsx",
+ "content": "import type { ReactNode } from 'react'\n\nimport { Card, CardContent, CardHeader } from '@/components/ui/card'\n\nimport { cn } from '@/lib/utils'\n\n// Statistics card data type\ntype StatisticsCardProps = {\n icon: ReactNode\n value: string\n title: string\n changePercentage: string\n className?: string\n}\n\nconst StatisticsCard = ({ icon, value, title, changePercentage, className }: StatisticsCardProps) => {\n return (\n \n \n \n {icon}\n
\n {value} \n \n \n {title} \n \n {changePercentage} \n than last week \n
\n \n \n )\n}\n\nexport default StatisticsCard\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/blocks/statistics-card-01.tsx"
+ }
+ ],
+ "meta": {
+ "category": "dashboard-and-application",
+ "section": "statistics-component"
+ }
+}
\ No newline at end of file
diff --git a/public/r/summer.json b/public/r/summer.json
new file mode 100644
index 0000000..845462d
--- /dev/null
+++ b/public/r/summer.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "summer",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Nunito, Segoe UI, Tahoma, Geneva, Verdana, sans-serif",
+ "font-mono": "Fira Code, ui-monospace, SFMono-Regular",
+ "font-serif": "Lora, ui-serif, Georgia, Cambria, Times New Roman, Times, serif",
+ "radius": "0.6rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.98 0.01 81.76)",
+ "foreground": "oklch(0.38 0.02 64.16)",
+ "card": "oklch(0.97 0.02 72.57)",
+ "card-foreground": "oklch(0.38 0.02 64.16)",
+ "popover": "oklch(0.96 0.04 83.12)",
+ "popover-foreground": "oklch(0.38 0.02 64.16)",
+ "primary": "oklch(0.70 0.17 28.12)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.81 0.15 71.81)",
+ "secondary-foreground": "oklch(0.38 0.02 64.16)",
+ "muted": "oklch(0.94 0.03 61.12)",
+ "muted-foreground": "oklch(0.62 0.06 59.24)",
+ "accent": "oklch(0.64 0.22 28.93)",
+ "accent-foreground": "oklch(1.00 0 0)",
+ "destructive": "oklch(0.57 0.20 26.34)",
+ "border": "oklch(0.87 0.08 65.83)",
+ "input": "oklch(0.96 0.03 78.77)",
+ "ring": "oklch(0.70 0.17 28.12)",
+ "chart-1": "oklch(0.70 0.17 28.12)",
+ "chart-2": "oklch(0.81 0.15 71.81)",
+ "chart-3": "oklch(0.71 0.18 37.63)",
+ "chart-4": "oklch(0.89 0.15 91.66)",
+ "chart-5": "oklch(0.59 0.19 36.05)",
+ "sidebar": "oklch(0.97 0.02 72.57)",
+ "sidebar-foreground": "oklch(0.38 0.02 64.16)",
+ "sidebar-primary": "oklch(0.70 0.17 28.12)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.81 0.15 71.81)",
+ "sidebar-accent-foreground": "oklch(0.38 0.02 64.16)",
+ "sidebar-border": "oklch(0.87 0.08 65.83)",
+ "sidebar-ring": "oklch(0.70 0.17 28.12)",
+ "font-sans": "Nunito, Segoe UI, Tahoma, Geneva, Verdana, sans-serif",
+ "font-serif": "Lora, ui-serif, Georgia, Cambria, Times New Roman, Times, serif",
+ "font-mono": "Fira Code, ui-monospace, SFMono-Regular",
+ "radius": "0.6rem",
+ "shadow-color": "oklch(0.70 0.17 28.12 / 30%)",
+ "shadow-opacity": "0.05",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-md": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 2px 4px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 4px 6px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 8px 10px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.13)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.26 0.02 63.41)",
+ "foreground": "oklch(0.87 0.08 65.83)",
+ "card": "oklch(0.31 0.03 60.03)",
+ "card-foreground": "oklch(0.87 0.08 65.83)",
+ "popover": "oklch(0.36 0.03 54.43)",
+ "popover-foreground": "oklch(0.87 0.08 65.83)",
+ "primary": "oklch(0.70 0.17 28.12)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.81 0.15 71.81)",
+ "secondary-foreground": "oklch(0.26 0.02 63.41)",
+ "muted": "oklch(0.56 0.05 59.94)",
+ "muted-foreground": "oklch(0.79 0.06 71.87)",
+ "accent": "oklch(0.61 0.21 27.04)",
+ "accent-foreground": "oklch(1.00 0 0)",
+ "destructive": "oklch(0.50 0.19 27.43)",
+ "border": "oklch(0.45 0.05 60.24)",
+ "input": "oklch(0.40 0.04 60.31)",
+ "ring": "oklch(0.70 0.17 28.12)",
+ "chart-1": "oklch(0.70 0.17 28.12)",
+ "chart-2": "oklch(0.81 0.15 71.81)",
+ "chart-3": "oklch(0.71 0.18 37.63)",
+ "chart-4": "oklch(0.89 0.15 91.66)",
+ "chart-5": "oklch(0.59 0.19 36.05)",
+ "sidebar": "oklch(0.31 0.03 60.03)",
+ "sidebar-foreground": "oklch(0.87 0.08 65.83)",
+ "sidebar-primary": "oklch(0.70 0.17 28.12)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.81 0.15 71.81)",
+ "sidebar-accent-foreground": "oklch(0.26 0.02 63.41)",
+ "sidebar-border": "oklch(0.45 0.05 60.24)",
+ "sidebar-ring": "oklch(0.70 0.17 28.12)",
+ "radius": "0.625rem",
+ "shadow-color": "oklch(0.70 0.17 28.12 / 70%)",
+ "shadow-opacity": "0.05",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-xs": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.03)",
+ "shadow-sm": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 1px 2px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-md": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 2px 4px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-lg": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 4px 6px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.05), 0px 8px 10px -1px oklch(0.70 0.17 28.12 / 0.05)",
+ "shadow-2xl": "0px 1px 3px 0px oklch(0.70 0.17 28.12 / 0.13)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/sunset-horizon.json b/public/r/sunset-horizon.json
new file mode 100644
index 0000000..602acd8
--- /dev/null
+++ b/public/r/sunset-horizon.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sunset-horizon",
+ "type": "registry:style",
+ "cssVars": {
+ "theme": {
+ "font-sans": "Montserrat, sans-serif",
+ "font-mono": "Ubuntu Mono, monospace",
+ "font-serif": "Merriweather, serif",
+ "radius": "0.625rem",
+ "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
+ "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
+ "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
+ "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
+ "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
+ },
+ "light": {
+ "background": "oklch(0.99 0.01 67.74)",
+ "foreground": "oklch(0.34 0.01 7.89)",
+ "card": "oklch(1.00 0 0)",
+ "card-foreground": "oklch(0.34 0.01 7.89)",
+ "popover": "oklch(1.00 0 0)",
+ "popover-foreground": "oklch(0.34 0.01 7.89)",
+ "primary": "oklch(0.74 0.16 34.57)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.96 0.02 28.97)",
+ "secondary-foreground": "oklch(0.56 0.13 32.65)",
+ "muted": "oklch(0.97 0.02 44.86)",
+ "muted-foreground": "oklch(0.49 0.05 27.86)",
+ "accent": "oklch(0.83 0.11 57.89)",
+ "accent-foreground": "oklch(0.34 0.01 7.89)",
+ "destructive": "oklch(0.61 0.21 22.21)",
+ "border": "oklch(0.93 0.04 40.57)",
+ "input": "oklch(0.93 0.04 40.57)",
+ "ring": "oklch(0.74 0.16 34.57)",
+ "chart-1": "oklch(0.74 0.16 34.57)",
+ "chart-2": "oklch(0.83 0.11 57.89)",
+ "chart-3": "oklch(0.88 0.08 56.41)",
+ "chart-4": "oklch(0.82 0.11 41.27)",
+ "chart-5": "oklch(0.64 0.13 32.06)",
+ "sidebar": "oklch(0.97 0.02 44.86)",
+ "sidebar-foreground": "oklch(0.34 0.01 7.89)",
+ "sidebar-primary": "oklch(0.74 0.16 34.57)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.83 0.11 57.89)",
+ "sidebar-accent-foreground": "oklch(0.34 0.01 7.89)",
+ "sidebar-border": "oklch(0.93 0.04 40.57)",
+ "sidebar-ring": "oklch(0.74 0.16 34.57)",
+ "font-sans": "Montserrat, sans-serif",
+ "font-serif": "Merriweather, serif",
+ "font-mono": "Ubuntu Mono, monospace",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.09",
+ "shadow-blur": "12px",
+ "shadow-spread": "-3px",
+ "shadow-offset-x": "0px",
+ "shadow-offset-y": "6px",
+ "spacing": "0.25rem",
+ "shadow-2xs": "0px 6px 12px -3px oklch(0.00 0 0 / 0.04)",
+ "shadow-xs": "0px 6px 12px -3px oklch(0.00 0 0 / 0.04)",
+ "shadow-sm": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 1px 2px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 1px 2px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow-md": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 2px 4px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow-lg": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 4px 6px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow-xl": "0px 6px 12px -3px oklch(0.00 0 0 / 0.09), 0px 8px 10px -4px oklch(0.00 0 0 / 0.09)",
+ "shadow-2xl": "0px 6px 12px -3px oklch(0.00 0 0 / 0.22)",
+ "tracking-normal": "0em"
+ },
+ "dark": {
+ "background": "oklch(0.26 0.02 351.79)",
+ "foreground": "oklch(0.94 0.01 48.70)",
+ "card": "oklch(0.32 0.02 339.89)",
+ "card-foreground": "oklch(0.94 0.01 48.70)",
+ "popover": "oklch(0.32 0.02 339.89)",
+ "popover-foreground": "oklch(0.94 0.01 48.70)",
+ "primary": "oklch(0.74 0.16 34.57)",
+ "primary-foreground": "oklch(1.00 0 0)",
+ "secondary": "oklch(0.36 0.02 342.33)",
+ "secondary-foreground": "oklch(0.94 0.01 48.70)",
+ "muted": "oklch(0.32 0.02 339.89)",
+ "muted-foreground": "oklch(0.84 0.02 50.14)",
+ "accent": "oklch(0.83 0.11 57.89)",
+ "accent-foreground": "oklch(0.26 0.02 351.79)",
+ "destructive": "oklch(0.61 0.21 22.21)",
+ "border": "oklch(0.36 0.02 342.33)",
+ "input": "oklch(0.36 0.02 342.33)",
+ "ring": "oklch(0.74 0.16 34.57)",
+ "chart-1": "oklch(0.74 0.16 34.57)",
+ "chart-2": "oklch(0.83 0.11 57.89)",
+ "chart-3": "oklch(0.88 0.08 56.41)",
+ "chart-4": "oklch(0.82 0.11 41.27)",
+ "chart-5": "oklch(0.64 0.13 32.06)",
+ "sidebar": "oklch(0.26 0.02 351.79)",
+ "sidebar-foreground": "oklch(0.94 0.01 48.70)",
+ "sidebar-primary": "oklch(0.74 0.16 34.57)",
+ "sidebar-primary-foreground": "oklch(1.00 0 0)",
+ "sidebar-accent": "oklch(0.83 0.11 57.89)",
+ "sidebar-accent-foreground": "oklch(0.26 0.02 351.79)",
+ "sidebar-border": "oklch(0.36 0.02 342.33)",
+ "sidebar-ring": "oklch(0.74 0.16 34.57)",
+ "radius": "0.625rem",
+ "shadow-color": "hsl(0 0% 0%)",
+ "shadow-opacity": "0.1",
+ "shadow-blur": "3px",
+ "shadow-spread": "0px",
+ "shadow-offset-x": "0",
+ "shadow-offset-y": "1px",
+ "letter-spacing": "0em",
+ "spacing": "0.25rem",
+ "font-sans": "'Geist', 'Geist Fallback', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
+ "font-serif": "\"Geist\", \"Geist Fallback\", ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif",
+ "font-mono": "\"Geist Mono\", \"Geist Mono Fallback\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
+ "shadow-2xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-xs": "0 1px 3px 0px oklch(0.00 0 0 / 0.05)",
+ "shadow-sm": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 1px 2px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-md": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 2px 4px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-lg": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 4px 6px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.10), 0 8px 10px -1px oklch(0.00 0 0 / 0.10)",
+ "shadow-2xl": "0 1px 3px 0px oklch(0.00 0 0 / 0.25)"
+ }
+ },
+ "css": {
+ "@layer base": {
+ "body": {
+ "letter-spacing": "var(--tracking-normal)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/r/switch-01.json b/public/r/switch-01.json
new file mode 100644
index 0000000..b5219ea
--- /dev/null
+++ b/public/r/switch-01.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-01",
+ "type": "registry:component",
+ "title": "Switch 1",
+ "description": "A basic switch component with label for simple on/off controls",
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-01.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchDemo = () => {\n return (\n \n \n Airplane Mode \n
\n )\n}\n\nexport default SwitchDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-02.json b/public/r/switch-02.json
new file mode 100644
index 0000000..5c1b04e
--- /dev/null
+++ b/public/r/switch-02.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-02",
+ "type": "registry:component",
+ "title": "Switch 2",
+ "description": "A square-styled switch with rounded corners for alternative visual design",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-02.tsx",
+ "content": "import { Switch } from '@/components/ui/switch'\n\nconst SwitchSquareDemo = () => {\n return \n}\n\nexport default SwitchSquareDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-03.json b/public/r/switch-03.json
new file mode 100644
index 0000000..8df15aa
--- /dev/null
+++ b/public/r/switch-03.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-03",
+ "type": "registry:component",
+ "title": "Switch 3",
+ "description": "A mini-sized switch with border styling for compact interface layouts",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-03.tsx",
+ "content": "import { Switch } from '@/components/ui/switch'\n\nconst SwitchMiniDemo = () => {\n return (\n \n )\n}\n\nexport default SwitchMiniDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-04.json b/public/r/switch-04.json
new file mode 100644
index 0000000..2bfdb87
--- /dev/null
+++ b/public/r/switch-04.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-04",
+ "type": "registry:component",
+ "title": "Switch 4",
+ "description": "Color-themed switches with destructive, success, info, and warning variants",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-04.tsx",
+ "content": "import { Switch } from '@/components/ui/switch'\n\nconst SwitchColorsDemo = () => {\n return (\n \n \n \n \n \n
\n )\n}\n\nexport default SwitchColorsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-05.json b/public/r/switch-05.json
new file mode 100644
index 0000000..3a2e881
--- /dev/null
+++ b/public/r/switch-05.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-05",
+ "type": "registry:component",
+ "title": "Switch 5",
+ "description": "Multiple size variations of switches with small, medium, and large options",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-05.tsx",
+ "content": "import { Switch } from '@/components/ui/switch'\n\nconst SwitchSizesDemo = () => {\n return (\n \n \n \n \n
\n )\n}\n\nexport default SwitchSizesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-06.json b/public/r/switch-06.json
new file mode 100644
index 0000000..f1d4fb8
--- /dev/null
+++ b/public/r/switch-06.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-06",
+ "type": "registry:component",
+ "title": "Switch 6",
+ "description": "Outline-styled switches with transparent backgrounds and colored borders for different themes",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-06.tsx",
+ "content": "import { Switch } from '@/components/ui/switch'\n\nconst SwitchOutlineDemo = () => {\n return (\n \n \n \n \n \n \n
\n )\n}\n\nexport default SwitchOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-07.json b/public/r/switch-07.json
new file mode 100644
index 0000000..8bb49de
--- /dev/null
+++ b/public/r/switch-07.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-07",
+ "type": "registry:component",
+ "title": "Switch 7",
+ "description": "A gradient-styled switch with amber to sky/indigo color transitions based on state",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-07.tsx",
+ "content": "import { Switch } from '@/components/ui/switch'\n\nconst SwitchGradientDemo = () => {\n return (\n \n )\n}\n\nexport default SwitchGradientDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-08.json b/public/r/switch-08.json
new file mode 100644
index 0000000..c641cd2
--- /dev/null
+++ b/public/r/switch-08.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-08",
+ "type": "registry:component",
+ "title": "Switch 8",
+ "description": "A switch with dynamic label that changes text based on toggle state (Yes/No)",
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-08.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchToggleLabelDemo = () => {\n const [checked, setChecked] = useState(true)\n\n return (\n \n \n \n {checked ? 'Yes' : 'No'}\n \n
\n )\n}\n\nexport default SwitchToggleLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-09.json b/public/r/switch-09.json
new file mode 100644
index 0000000..2b2276b
--- /dev/null
+++ b/public/r/switch-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-09",
+ "type": "registry:component",
+ "title": "Switch 9",
+ "description": "A dual-label switch with clickable Yes/No labels that toggle the switch state",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-09.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchDualToggleLabelDemo = () => {\n const id = useId()\n const [checked, setChecked] = useState(false)\n\n const toggleSwitch = () => setChecked(prev => !prev)\n\n return (\n \n setChecked(false)}\n >\n Yes\n \n \n setChecked(true)}\n >\n No\n \n
\n )\n}\n\nexport default SwitchDualToggleLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-10.json b/public/r/switch-10.json
new file mode 100644
index 0000000..aa9aa10
--- /dev/null
+++ b/public/r/switch-10.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-10",
+ "type": "registry:component",
+ "title": "Switch 10",
+ "description": "A switch with icon label that toggles between sun and moon icons for theme switching",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-10.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { MoonIcon, SunIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchIconLabelDemo = () => {\n const [checked, setChecked] = useState(true)\n\n return (\n \n \n \n Toggle switch \n {checked ? (\n \n ) : (\n \n )}\n \n
\n )\n}\n\nexport default SwitchIconLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-11.json b/public/r/switch-11.json
new file mode 100644
index 0000000..77d67b5
--- /dev/null
+++ b/public/r/switch-11.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-11",
+ "type": "registry:component",
+ "title": "Switch 11",
+ "description": "A dual-icon switch with clickable sun and moon icons for theme mode switching",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-11.tsx",
+ "content": "'use client'\n\nimport { useId, useState } from 'react'\n\nimport { MoonIcon, SunIcon } from 'lucide-react'\n\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchDualIconLabelDemo = () => {\n const id = useId()\n const [checked, setChecked] = useState(true)\n\n const toggleSwitch = () => setChecked(prev => !prev)\n\n return (\n \n setChecked(false)}\n >\n \n \n \n setChecked(true)}\n >\n \n \n
\n )\n}\n\nexport default SwitchDualIconLabelDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-12.json b/public/r/switch-12.json
new file mode 100644
index 0000000..407213e
--- /dev/null
+++ b/public/r/switch-12.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-12",
+ "type": "registry:component",
+ "title": "Switch 12",
+ "description": "A switch with check and X icon indicators that change visibility based on toggle state",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-12.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CheckIcon, XIcon } from 'lucide-react'\n\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchIconIndicatorDemo = () => {\n const [checked, setChecked] = useState(true)\n\n return (\n \n
\n \n \n \n \n \n \n \n
\n
\n )\n}\n\nexport default SwitchIconIndicatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-13.json b/public/r/switch-13.json
new file mode 100644
index 0000000..4d91048
--- /dev/null
+++ b/public/r/switch-13.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-13",
+ "type": "registry:component",
+ "title": "Switch 13",
+ "description": "A switch with sliding check and X icon indicators that move with the toggle handle",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-13.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { CheckIcon, XIcon } from 'lucide-react'\n\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchPermanentIndicatorDemo = () => {\n const [checked, setChecked] = useState(true)\n\n return (\n \n
\n \n \n \n \n \n \n \n
\n
\n )\n}\n\nexport default SwitchPermanentIndicatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-14.json b/public/r/switch-14.json
new file mode 100644
index 0000000..5772b69
--- /dev/null
+++ b/public/r/switch-14.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-14",
+ "type": "registry:component",
+ "title": "Switch 14",
+ "description": "A square-styled switch with sliding Yes/No text indicators in the background",
+ "registryDependencies": [
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-14.tsx",
+ "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchSquarePermanentIndicatorDemo = () => {\n const [checked, setChecked] = useState(true)\n\n return (\n \n
\n \n \n No \n \n \n Yes \n \n
\n
\n )\n}\n\nexport default SwitchSquarePermanentIndicatorDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-15.json b/public/r/switch-15.json
new file mode 100644
index 0000000..777b02f
--- /dev/null
+++ b/public/r/switch-15.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-15",
+ "type": "registry:component",
+ "title": "Switch 15",
+ "description": "A switch integrated within a card layout with database icon for backup settings",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-15.tsx",
+ "content": "import { useId } from 'react'\n\nimport { DatabaseIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchCardDemo = () => {\n const id = useId()\n\n return (\n \n
\n
\n
\n
\n
Backup \n
\n Backup every file from your project.\n
\n
\n
\n
\n )\n}\n\nexport default SwitchCardDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-16.json b/public/r/switch-16.json
new file mode 100644
index 0000000..82c1fd9
--- /dev/null
+++ b/public/r/switch-16.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-16",
+ "type": "registry:component",
+ "title": "Switch 16",
+ "description": "A switch card with Google Cloud icon for backup service toggle functionality",
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-16.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchCardDemo = () => {\n const id = useId()\n\n return (\n \n
\n
\n
\n
\n
Google Cloud Backup \n
\n Backup every picture, video and PDFs.\n
\n
\n
\n
\n )\n}\n\nexport default SwitchCardDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-17.json b/public/r/switch-17.json
new file mode 100644
index 0000000..2b672a1
--- /dev/null
+++ b/public/r/switch-17.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-17",
+ "type": "registry:component",
+ "title": "Switch 17",
+ "description": "A switch card with GitHub icon for repository connection toggle functionality",
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-17.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/switch'\n\nconst SwitchCardDemo = () => {\n const id = useId()\n\n return (\n \n
\n
\n
\n
\n
Connect with GitHub \n
\n Access your projects direct from GitHub.\n
\n
\n
\n
\n )\n}\n\nexport default SwitchCardDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-18.json b/public/r/switch-18.json
new file mode 100644
index 0000000..04a729a
--- /dev/null
+++ b/public/r/switch-18.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-18",
+ "type": "registry:component",
+ "title": "Switch 18",
+ "description": "A list group of switches with icons for skill preference selection across multiple categories",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "label",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-18.tsx",
+ "content": "import { ChartPieIcon, CodeIcon, PaletteIcon } from 'lucide-react'\n\nimport { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/switch'\n\nconst skills = [\n { label: 'Web Development', icon: CodeIcon },\n { label: 'Data Analysis', icon: ChartPieIcon },\n { label: 'Graphic Design', icon: PaletteIcon }\n]\n\nconst SwitchListGroupDemo = () => {\n return (\n \n Switch to your preferred field: \n \n {skills.map(({ label, icon: Icon }) => (\n \n \n \n {label}\n \n \n \n \n ))}\n \n \n )\n}\n\nexport default SwitchListGroupDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch-19.json b/public/r/switch-19.json
new file mode 100644
index 0000000..66a753b
--- /dev/null
+++ b/public/r/switch-19.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-19",
+ "type": "registry:component",
+ "title": "Switch 19",
+ "description": "Animated motion switches in multiple sizes with smooth transition effects",
+ "dependencies": [
+ "@radix-ui/react-switch",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-19.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/motion-switch'\n\nconst SwitchAnimatedDemo = () => {\n return (\n \n
\n \n Small switch \n
\n
\n \n Medium switch \n
\n
\n \n Large switch \n
\n
\n )\n}\n\nexport default SwitchAnimatedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-19.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-switch.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\nimport { motion } from 'motion/react'\n\nimport { cn } from '@/lib/utils'\n\nconst SIZES = {\n sm: { TRACK_WIDTH: 26, THUMB_SIZE: 14, THUMB_STRETCH: 18 },\n md: { TRACK_WIDTH: 32, THUMB_SIZE: 16, THUMB_STRETCH: 25 },\n lg: { TRACK_WIDTH: 48, THUMB_SIZE: 24, THUMB_STRETCH: 40 }\n}\n\nconst STRETCH_DURATION = 120 // ms\n\ntype Size = keyof typeof SIZES\n\ninterface SwitchProps extends React.ComponentProps {\n size?: Size\n}\n\nfunction Switch({ className, size = 'md', ...props }: SwitchProps) {\n const { TRACK_WIDTH, THUMB_SIZE, THUMB_STRETCH } = SIZES[size]\n const [isChecked, setIsChecked] = React.useState(props.checked ?? props.defaultChecked ?? false)\n const [isStretching, setIsStretching] = React.useState(false)\n\n React.useEffect(() => {\n if (props.checked !== undefined) setIsChecked(props.checked)\n }, [props.checked])\n\n React.useEffect(() => {\n setIsStretching(true)\n const timeout = setTimeout(() => setIsStretching(false), STRETCH_DURATION)\n\n return () => clearTimeout(timeout)\n }, [isChecked])\n\n const handleCheckedChange = (checked: boolean) => {\n setIsChecked(checked)\n props.onCheckedChange?.(checked)\n }\n\n const thumbWidth = isStretching ? THUMB_STRETCH : THUMB_SIZE\n const offsetUnchecked = 0\n const offsetChecked = TRACK_WIDTH - thumbWidth - 2\n\n const thumbLeft = isChecked ? offsetChecked : offsetUnchecked\n\n return (\n \n \n \n \n \n )\n}\n\nexport { Switch }\n",
+ "type": "registry:ui",
+ "target": "components/ui/motion-switch.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/switch-20.json b/public/r/switch-20.json
new file mode 100644
index 0000000..ee12c34
--- /dev/null
+++ b/public/r/switch-20.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch-20",
+ "type": "registry:component",
+ "title": "Switch 20",
+ "description": "Animated gradient motion switches with color transitions and multiple size variations",
+ "dependencies": [
+ "@radix-ui/react-switch",
+ "motion"
+ ],
+ "registryDependencies": [
+ "label",
+ "utils"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/switch/switch-20.tsx",
+ "content": "import { Label } from '@/components/ui/label'\nimport { Switch } from '@/components/ui/motion-switch'\n\nconst SwitchAnimatedGradientDemo = () => {\n return (\n \n
\n \n Small switch \n
\n
\n \n Medium switch \n
\n
\n \n Large switch \n
\n
\n )\n}\n\nexport default SwitchAnimatedGradientDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/switch/switch-20.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-switch.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\nimport { motion } from 'motion/react'\n\nimport { cn } from '@/lib/utils'\n\nconst SIZES = {\n sm: { TRACK_WIDTH: 26, THUMB_SIZE: 14, THUMB_STRETCH: 18 },\n md: { TRACK_WIDTH: 32, THUMB_SIZE: 16, THUMB_STRETCH: 25 },\n lg: { TRACK_WIDTH: 48, THUMB_SIZE: 24, THUMB_STRETCH: 40 }\n}\n\nconst STRETCH_DURATION = 120 // ms\n\ntype Size = keyof typeof SIZES\n\ninterface SwitchProps extends React.ComponentProps {\n size?: Size\n}\n\nfunction Switch({ className, size = 'md', ...props }: SwitchProps) {\n const { TRACK_WIDTH, THUMB_SIZE, THUMB_STRETCH } = SIZES[size]\n const [isChecked, setIsChecked] = React.useState(props.checked ?? props.defaultChecked ?? false)\n const [isStretching, setIsStretching] = React.useState(false)\n\n React.useEffect(() => {\n if (props.checked !== undefined) setIsChecked(props.checked)\n }, [props.checked])\n\n React.useEffect(() => {\n setIsStretching(true)\n const timeout = setTimeout(() => setIsStretching(false), STRETCH_DURATION)\n\n return () => clearTimeout(timeout)\n }, [isChecked])\n\n const handleCheckedChange = (checked: boolean) => {\n setIsChecked(checked)\n props.onCheckedChange?.(checked)\n }\n\n const thumbWidth = isStretching ? THUMB_STRETCH : THUMB_SIZE\n const offsetUnchecked = 0\n const offsetChecked = TRACK_WIDTH - thumbWidth - 2\n\n const thumbLeft = isChecked ? offsetChecked : offsetUnchecked\n\n return (\n \n \n \n \n \n )\n}\n\nexport { Switch }\n",
+ "type": "registry:ui",
+ "target": "components/ui/motion-switch.tsx"
+ }
+ ],
+ "meta": {
+ "isAnimated": true
+ }
+}
\ No newline at end of file
diff --git a/public/r/table-01.json b/public/r/table-01.json
new file mode 100644
index 0000000..1e680df
--- /dev/null
+++ b/public/r/table-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-01",
+ "type": "registry:component",
+ "title": "Table 1",
+ "description": "A basic table with caption, header, body, and footer displaying invoice data",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-01.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow\n} from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst TableDemo = () => {\n return (\n \n Default table. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n\nexport default TableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-02.json b/public/r/table-02.json
new file mode 100644
index 0000000..76da54b
--- /dev/null
+++ b/public/r/table-02.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-02",
+ "type": "registry:component",
+ "title": "Table 2",
+ "description": "A bordered table with complete border styling around the table container",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-02.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow\n} from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst TableBorderDemo = () => {\n return (\n \n Bordered table. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n\nexport default TableBorderDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-03.json b/public/r/table-03.json
new file mode 100644
index 0000000..9f96549
--- /dev/null
+++ b/public/r/table-03.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-03",
+ "type": "registry:component",
+ "title": "Table 3",
+ "description": "A table with rounded corners and shadow styling for enhanced visual appeal",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-03.tsx",
+ "content": "import { Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst TableRoundedCornerDemo = () => {\n return (\n \n
\n
\n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n
Rounded corner table
\n
\n )\n}\n\nexport default TableRoundedCornerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-04.json b/public/r/table-04.json
new file mode 100644
index 0000000..887d311
--- /dev/null
+++ b/public/r/table-04.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-04",
+ "type": "registry:component",
+ "title": "Table 4",
+ "description": "A table with vertical lines between columns for clear data separation",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-04.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow\n} from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst TableWithVerticalLinesDemo = () => {\n return (\n \n Table with vertical lines. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n\nexport default TableWithVerticalLinesDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-05.json b/public/r/table-05.json
new file mode 100644
index 0000000..78c5ee0
--- /dev/null
+++ b/public/r/table-05.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-05",
+ "type": "registry:component",
+ "title": "Table 5",
+ "description": "A table without borders for a clean, minimal appearance",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-05.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow\n} from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst TableWithOutBorderDemo = () => {\n return (\n \n Table without border. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n\nexport default TableWithOutBorderDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-06.json b/public/r/table-06.json
new file mode 100644
index 0000000..6e54c46
--- /dev/null
+++ b/public/r/table-06.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-06",
+ "type": "registry:component",
+ "title": "Table 6",
+ "description": "A striped rows table with alternating row background colors for improved readability",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-06.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow\n} from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst StripedRowsTableDemo = () => {\n return (\n \n Striped rows table. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n\nexport default StripedRowsTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-07.json b/public/r/table-07.json
new file mode 100644
index 0000000..4fcbc9d
--- /dev/null
+++ b/public/r/table-07.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-07",
+ "type": "registry:component",
+ "title": "Table 7",
+ "description": "A striped columns table with alternating column background colors for enhanced data comparison",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-07.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow\n} from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst StrippedColumnTableDemo = () => {\n return (\n \n Striped columns table. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n\nexport default StrippedColumnTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-08.json b/public/r/table-08.json
new file mode 100644
index 0000000..d902b7f
--- /dev/null
+++ b/public/r/table-08.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-08",
+ "type": "registry:component",
+ "title": "Table 8",
+ "description": "A table with highlighted row functionality for emphasis and user interaction",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-08.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow\n} from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst TableHighlightedRowDemo = () => {\n return (\n \n Highlight row table. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n\nexport default TableHighlightedRowDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-09.json b/public/r/table-09.json
new file mode 100644
index 0000000..a0d4d43
--- /dev/null
+++ b/public/r/table-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-09",
+ "type": "registry:component",
+ "title": "Table 9",
+ "description": "A table with vertical scrolling functionality for displaying large datasets",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-09.tsx",
+ "content": "import { Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV008',\n paymentStatus: 'Paid',\n totalAmount: '$350.00',\n paymentMethod: 'Debit Card'\n },\n {\n invoice: 'INV009',\n paymentStatus: 'Pending',\n totalAmount: '$969.00',\n paymentMethod: 'Google Pay'\n },\n {\n invoice: 'INV010',\n paymentStatus: 'Unpaid',\n totalAmount: '$815.00',\n paymentMethod: 'Apple Pay'\n }\n]\n\nconst OverflowScrollTableDemo = () => {\n return (\n \n
\n
\n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n
Overflow scroll table
\n
\n )\n}\n\nexport default OverflowScrollTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-10.json b/public/r/table-10.json
new file mode 100644
index 0000000..3f72867
--- /dev/null
+++ b/public/r/table-10.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-10",
+ "type": "registry:component",
+ "title": "Table 10",
+ "description": "A table with sticky header that remains visible during vertical scrolling",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-10.tsx",
+ "content": "import { Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV008',\n paymentStatus: 'Paid',\n totalAmount: '$350.00',\n paymentMethod: 'Debit Card'\n },\n {\n invoice: 'INV009',\n paymentStatus: 'Pending',\n totalAmount: '$969.00',\n paymentMethod: 'Google Pay'\n },\n {\n invoice: 'INV010',\n paymentStatus: 'Unpaid',\n totalAmount: '$815.00',\n paymentMethod: 'Apple Pay'\n }\n]\n\nconst StickyHeaderTableDemo = () => {\n return (\n \n
\n
\n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n
Sticky header table
\n
\n )\n}\n\nexport default StickyHeaderTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-11.json b/public/r/table-11.json
new file mode 100644
index 0000000..d8b22f6
--- /dev/null
+++ b/public/r/table-11.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-11",
+ "type": "registry:component",
+ "title": "Table 11",
+ "description": "A table with sticky first column that remains fixed during horizontal scrolling",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-11.tsx",
+ "content": "import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst invoices = [\n {\n id: 1,\n name: 'Alice Smith',\n occupation: 'Software Engineer',\n employer: 'Alpha Tech',\n email: 'alice@example.com',\n location: 'United States',\n lastaccess: '12/16/2021',\n salary: '$120,000'\n },\n {\n id: 2,\n name: 'Bob Johnson',\n occupation: 'Marketing Manager',\n employer: 'Beta Corp',\n email: 'bob@example.com',\n location: 'Canada',\n lastaccess: '11/05/2021',\n salary: '$100,000'\n },\n {\n id: 3,\n name: 'Charlie Brown',\n occupation: 'Graphic Designer',\n employer: 'Gamma Studios',\n email: 'charlie@example.com',\n location: 'United Kingdom',\n lastaccess: '09/20/2022',\n salary: '$75,000'\n },\n {\n id: 4,\n name: 'Dora Emily',\n occupation: 'HR Manager',\n employer: 'Delta Corp',\n email: 'dora@example.com',\n location: 'Australia',\n lastaccess: '08/10/2020',\n salary: '$40,000'\n },\n {\n id: 5,\n name: 'Ethan Hunt',\n occupation: 'Secret Agent',\n employer: 'Eagle Eye',\n email: 'ethan@example.com',\n location: 'India',\n lastaccess: '11/20/2021',\n salary: '$220,000'\n },\n {\n id: 6,\n name: 'Fiona Brown',\n occupation: 'Financial Analyst',\n employer: 'Fox Finance',\n email: 'fiona@example.com',\n location: 'France',\n lastaccess: '07/05/2021',\n salary: '$150,000'\n },\n {\n id: 7,\n name: 'George Wilson',\n occupation: 'Project Manager',\n employer: 'Gazelle Technologies',\n email: 'george@example.com',\n location: 'Brazil',\n lastaccess: '05/25/2021',\n salary: '$135,000'\n }\n]\n\nconst StickyColumnTableDemo = () => {\n return (\n \n
\n
\n \n \n ID \n Name \n Occupation \n Employer \n Email \n Location \n Last Access \n Salary \n \n \n \n {invoices.map(invoice => (\n \n {invoice.id} \n {invoice.name} \n {invoice.occupation} \n {invoice.employer} \n {invoice.email} \n {invoice.location} \n {invoice.lastaccess} \n {invoice.salary} \n \n ))}\n \n
\n
\n
Sticky column table
\n
\n )\n}\n\nexport default StickyColumnTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-12.json b/public/r/table-12.json
new file mode 100644
index 0000000..b6d7439
--- /dev/null
+++ b/public/r/table-12.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-12",
+ "type": "registry:component",
+ "title": "Table 12",
+ "description": "A vertical table layout for displaying data in a column-oriented format with key-value pairs",
+ "registryDependencies": [
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-12.tsx",
+ "content": "import { Table, TableBody, TableCell, TableRow } from '@/components/ui/table'\n\nconst VerticalTableDemo = () => {\n return (\n \n
\n
\n \n \n Product Name \n Iphone 16 PRO \n \n \n Serial Number \n DF121543309KU \n \n \n Category \n Smartphone \n \n \n Purchase Date \n 15/06/205 \n \n \n Warranty Expiry \n 15/06/2026 \n \n \n Origin \n China \n \n \n Assign User \n Alice Johnson \n \n \n Value \n $1,120.0 \n \n \n
\n
\n
Vertical table
\n
\n )\n}\n\nexport default VerticalTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-13.json b/public/r/table-13.json
new file mode 100644
index 0000000..8a2a222
--- /dev/null
+++ b/public/r/table-13.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-13",
+ "type": "registry:component",
+ "title": "Table 13",
+ "description": "A table with avatar components for displaying user information with profile pictures",
+ "registryDependencies": [
+ "avatar",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-13.tsx",
+ "content": "import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst items = [\n {\n id: '1',\n name: 'Philip George',\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-1.png',\n fallback: 'PG',\n email: 'philipgeorge20@gmail.com',\n location: 'Mumbai, India',\n status: 'Active',\n balance: '$10,696.00'\n },\n {\n id: '2',\n name: 'Tiana Curtis',\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-2.png',\n fallback: 'TC',\n email: 'tiana12@yahoo.com',\n location: 'New York, US',\n status: 'applied',\n balance: '$0.00'\n },\n {\n id: '3',\n name: 'Jaylon Donin',\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-3.png',\n fallback: 'JD',\n email: 'jaylon23d.@outlook.com',\n location: 'Washington, US',\n status: 'Active',\n balance: '$569.00'\n },\n {\n id: '4',\n name: 'Kim Yim',\n src: 'https://cdn.shadcnstudio.com/ss-assets/avatar/avatar-4.png',\n fallback: 'KY',\n email: 'kim96@gmail.com',\n location: 'Busan, South Korea',\n status: 'Inactive',\n balance: '-$506.90'\n }\n]\n\nconst TableWithAvatarDemo = () => {\n return (\n \n
\n
\n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n {items.map(item => (\n \n \n \n
\n \n {item.fallback} \n \n
{item.name}
\n
\n \n {item.email} \n {item.location} \n {item.status} \n {item.balance} \n \n ))}\n \n
\n
\n
Table with avatar
\n
\n )\n}\n\nexport default TableWithAvatarDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-14.json b/public/r/table-14.json
new file mode 100644
index 0000000..fbed7b7
--- /dev/null
+++ b/public/r/table-14.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-14",
+ "type": "registry:component",
+ "title": "Table 14",
+ "description": "A table with integrated pagination controls for navigating through large datasets",
+ "registryDependencies": [
+ "pagination",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-14.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious\n} from '@/components/ui/pagination'\nimport { Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card'\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal'\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer'\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card'\n }\n]\n\nconst TableRoundedCornerDemo = () => {\n return (\n \n
\n
\n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n
\n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n \n \n \n
Table with pagination
\n
\n )\n}\n\nexport default TableRoundedCornerDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-15.json b/public/r/table-15.json
new file mode 100644
index 0000000..848c2a5
--- /dev/null
+++ b/public/r/table-15.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-15",
+ "type": "registry:component",
+ "title": "Table 15",
+ "description": "A table with selectable rows using checkboxes for bulk actions and data manipulation",
+ "registryDependencies": [
+ "checkbox",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-15.tsx",
+ "content": "import { useId } from 'react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst items = [\n {\n id: '1',\n name: 'Philip George',\n email: 'philipgeorge20@gmail.com',\n location: 'Mumbai, India',\n status: 'Active',\n balance: '$10,696.00'\n },\n {\n id: '2',\n name: 'Sarah Chen',\n email: 'sarah.c@company.com',\n location: 'Singapore',\n status: 'Active',\n balance: '$600.00'\n },\n {\n id: '3',\n name: 'James Wilson',\n email: 'j.wilson@company.com',\n location: 'London, UK',\n status: 'Inactive',\n balance: '$650.00'\n },\n {\n id: '4',\n name: 'Maria Garcia',\n email: 'm.garcia@company.com',\n location: 'Madrid, Spain',\n status: 'Active',\n balance: '$0.00'\n },\n {\n id: '5',\n name: 'David Kim',\n email: 'd.kim@company.com',\n location: 'Seoul, KR',\n status: 'Active',\n balance: '-$1,000.00'\n }\n]\n\nconst TableSelectableRowDemo = () => {\n const id = useId()\n\n return (\n \n
\n
\n \n \n \n \n \n Name \n Email \n Location \n Status \n Balance \n \n \n \n {items.map(item => (\n \n \n \n \n {item.name} \n {item.email} \n {item.location} \n {item.status} \n {item.balance} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n
\n
Table with row selection
\n
\n )\n}\n\nexport default TableSelectableRowDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/table-16.json b/public/r/table-16.json
new file mode 100644
index 0000000..fd02755
--- /dev/null
+++ b/public/r/table-16.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "table-16",
+ "type": "registry:component",
+ "title": "Table 16",
+ "description": "A comprehensive product table with avatars, checkboxes, buttons, and action controls",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "avatar",
+ "button",
+ "checkbox",
+ "table"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/table/table-16.tsx",
+ "content": "import { useId } from 'react'\n\nimport { ArchiveIcon, PencilIcon, Trash2Icon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\n\nconst items = [\n {\n id: '1',\n productName: 'Chair',\n model: 'Wooden Garden Chair',\n src: 'https://cdn.shadcnstudio.com/ss-assets/products/product-1.png',\n fallback: 'WGC',\n color: 'Black',\n category: 'Furniture',\n price: '$269.09'\n },\n {\n id: '2',\n productName: 'Nike Shoes',\n model: 'Jordan 1 Retro OG',\n src: 'https://cdn.shadcnstudio.com/ss-assets/products/product-2.png',\n fallback: 'J1R',\n color: 'Red',\n category: 'Sneakers',\n price: '$150.00'\n },\n {\n id: '3',\n productName: 'OnePluse',\n model: 'OnePlus 7 Pro',\n src: 'https://cdn.shadcnstudio.com/ss-assets/products/product-3.png',\n fallback: 'O7P',\n color: 'Nebula Blue',\n category: 'Smartphone',\n price: '$869.00'\n },\n {\n id: '4',\n productName: 'Nintendo',\n model: 'Nintendo Switch',\n src: 'https://cdn.shadcnstudio.com/ss-assets/products/product-4.png',\n fallback: 'NS',\n color: 'Neon Blue and Red',\n category: 'Console Gaming',\n price: '$499.00'\n },\n {\n id: '5',\n productName: 'Apple Magic Mouse',\n model: 'Apple Magic Mouse',\n src: 'https://cdn.shadcnstudio.com/ss-assets/products/product-5.png',\n fallback: 'AMM',\n color: 'Black',\n category: 'Electronics',\n price: '$110.29'\n }\n]\n\nconst ProductTableDemo = () => {\n const id = useId()\n\n return (\n \n
\n
\n \n \n \n \n \n Product \n Color \n Category \n Price \n Actions \n \n \n \n {items.map(item => (\n \n \n \n \n \n \n
\n \n {item.fallback} \n \n
\n
{item.productName}
\n
{item.model} \n
\n
\n \n {item.color} \n {item.category} \n {item.price} \n \n \n \n \n \n \n \n \n \n \n \n \n ))}\n \n
\n
\n
Product Table
\n
\n )\n}\n\nexport default ProductTableDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/table/table-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-01.json b/public/r/tabs-01.json
new file mode 100644
index 0000000..68ee1cd
--- /dev/null
+++ b/public/r/tabs-01.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-01",
+ "type": "registry:component",
+ "title": "Tabs 1",
+ "description": "Basic tabs component with default styling for content organization and navigation",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-01.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-01.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-02.json b/public/r/tabs-02.json
new file mode 100644
index 0000000..9bb648f
--- /dev/null
+++ b/public/r/tabs-02.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-02",
+ "type": "registry:component",
+ "title": "Tabs 2",
+ "description": "Outlined tabs with border styling and background transparency for modern interface design",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-02.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsOutlinedDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsOutlinedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-02.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-03.json b/public/r/tabs-03.json
new file mode 100644
index 0000000..97fd36a
--- /dev/null
+++ b/public/r/tabs-03.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-03",
+ "type": "registry:component",
+ "title": "Tabs 3",
+ "description": "Tabs with icons for enhanced visual navigation and improved user experience",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-03.tsx",
+ "content": "import { BookIcon, GiftIcon, HeartIcon } from 'lucide-react'\n\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n icon: BookIcon,\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n icon: HeartIcon,\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise',\n value: 'surprise',\n icon: GiftIcon,\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsWithIconDemo = () => {\n return (\n \n
\n \n {tabs.map(({ icon: Icon, name, value }) => (\n \n \n {name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-03.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-04.json b/public/r/tabs-04.json
new file mode 100644
index 0000000..1e88fa9
--- /dev/null
+++ b/public/r/tabs-04.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-04",
+ "type": "registry:component",
+ "title": "Tabs 4",
+ "description": "Tabs with badge components for displaying notifications, counters, or status indicators",
+ "registryDependencies": [
+ "badge",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-04.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n count: 8,\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n count: 3,\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise',\n value: 'surprise',\n count: 6,\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsWithBadgeDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n {tab.count} \n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsWithBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-04.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-05.json b/public/r/tabs-05.json
new file mode 100644
index 0000000..1120888
--- /dev/null
+++ b/public/r/tabs-05.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-05",
+ "type": "registry:component",
+ "title": "Tabs 5",
+ "description": "Vertical tabs with icons displayed above text labels in a stacked layout",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-05.tsx",
+ "content": "import { BookIcon, GiftIcon, HeartIcon } from 'lucide-react'\n\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n icon: BookIcon,\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n icon: HeartIcon,\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n icon: GiftIcon,\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsWithVerticalIconDemo = () => {\n return (\n \n
\n \n {tabs.map(({ icon: Icon, name, value }) => (\n \n \n {name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsWithVerticalIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-05.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-06.json b/public/r/tabs-06.json
new file mode 100644
index 0000000..7426986
--- /dev/null
+++ b/public/r/tabs-06.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-06",
+ "type": "registry:component",
+ "title": "Tabs 6",
+ "description": "Tabs with badge count indicators showing numerical values for each tab",
+ "registryDependencies": [
+ "badge",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-06.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n count: 8,\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n count: 3,\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n count: 6,\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsWithVerticalBadgeDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.count} \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsWithVerticalBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-06.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-07.json b/public/r/tabs-07.json
new file mode 100644
index 0000000..a9a1a48
--- /dev/null
+++ b/public/r/tabs-07.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-07",
+ "type": "registry:component",
+ "title": "Tabs 7",
+ "description": "Icon-only tabs with tooltip labels for compact navigation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-07.tsx",
+ "content": "import { BookIcon, GiftIcon, HeartIcon } from 'lucide-react'\n\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n icon: BookIcon,\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n icon: HeartIcon,\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n icon: GiftIcon,\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsWithTooltipDemo = () => {\n return (\n \n
\n \n {tabs.map(({ icon: Icon, name, value }) => (\n \n \n \n \n \n \n \n \n {name} \n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsWithTooltipDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-07.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-08.json b/public/r/tabs-08.json
new file mode 100644
index 0000000..050f9f3
--- /dev/null
+++ b/public/r/tabs-08.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-08",
+ "type": "registry:component",
+ "title": "Tabs 8",
+ "description": "Simple justified tabs with equal width distribution across the container",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-08.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsSoftPillsDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsSoftPillsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-08.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-09.json b/public/r/tabs-09.json
new file mode 100644
index 0000000..90308dd
--- /dev/null
+++ b/public/r/tabs-09.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-09",
+ "type": "registry:component",
+ "title": "Tabs 9",
+ "description": "Solid pill-style tabs with rounded corners and filled background",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-09.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsSolidPillsDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsSolidPillsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-09.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-10.json b/public/r/tabs-10.json
new file mode 100644
index 0000000..7a27253
--- /dev/null
+++ b/public/r/tabs-10.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-10",
+ "type": "registry:component",
+ "title": "Tabs 10",
+ "description": "Outlined pill-style tabs with border styling and transparent background",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-10.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsOutlinedPillsDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsOutlinedPillsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-10.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-11.json b/public/r/tabs-11.json
new file mode 100644
index 0000000..7755ac0
--- /dev/null
+++ b/public/r/tabs-11.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-11",
+ "type": "registry:component",
+ "title": "Tabs 11",
+ "description": "Underline tabs with border bottom styling for minimal navigation",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-11.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsUnderlineDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsUnderlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-11.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-12.json b/public/r/tabs-12.json
new file mode 100644
index 0000000..f6e34fa
--- /dev/null
+++ b/public/r/tabs-12.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-12",
+ "type": "registry:component",
+ "title": "Tabs 12",
+ "description": "Sharp-cornered tabs with rectangular styling and bottom border",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-12.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsSharpDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsSharpDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-12.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-13.json b/public/r/tabs-13.json
new file mode 100644
index 0000000..59c596f
--- /dev/null
+++ b/public/r/tabs-13.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-13",
+ "type": "registry:component",
+ "title": "Tabs 13",
+ "description": "Lifted tabs with shadow effects for elevated appearance",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-13.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsLiftedDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsLiftedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-13.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-14.json b/public/r/tabs-14.json
new file mode 100644
index 0000000..e981db3
--- /dev/null
+++ b/public/r/tabs-14.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-14",
+ "type": "registry:component",
+ "title": "Tabs 14",
+ "description": "Overflow tabs with scrollable area for handling many tab items",
+ "registryDependencies": [
+ "scroll-area",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-14.tsx",
+ "content": "import { ScrollArea, ScrollBar } from '@/components/ui/scroll-area'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n },\n {\n name: 'Trending',\n value: 'trending',\n content: (\n <>\n Stay on top of what's trending . Discover what\n everyone's talking about, from viral trends to the latest memes and conversations.\n >\n )\n },\n {\n name: 'Events',\n value: 'events',\n content: (\n <>\n Check out upcoming events happening near you. Whether\n virtual or in-person, there's always something to join and be a part of.\n >\n )\n },\n {\n name: 'News',\n value: 'news',\n content: (\n <>\n Stay updated with the latest news across the globe. From\n tech breakthroughs to world events, get the stories that matter most.\n >\n )\n },\n {\n name: 'Community',\n value: 'community',\n content: (\n <>\n Connect with the community —share your thoughts, ask\n questions, and join discussions with like-minded individuals.\n >\n )\n },\n {\n name: 'Rewards',\n value: 'rewards',\n content: (\n <>\n Unlock exclusive rewards and perks for your activity.\n Keep an eye out for new ways to earn and redeem your points.\n >\n )\n },\n {\n name: 'Profile',\n value: 'profile',\n content: (\n <>\n View and edit your profile information, track your\n activity, and customize your experience. It's all about you here!\n >\n )\n }\n]\n\nconst TabsOverflowDemo = () => {\n return (\n \n
\n \n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n \n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsOverflowDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-14.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-15.json b/public/r/tabs-15.json
new file mode 100644
index 0000000..9f6623a
--- /dev/null
+++ b/public/r/tabs-15.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-15",
+ "type": "registry:component",
+ "title": "Tabs 15",
+ "description": "Vertical tabs layout with left-side navigation structure",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-15.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-15.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-16.json b/public/r/tabs-16.json
new file mode 100644
index 0000000..73b409a
--- /dev/null
+++ b/public/r/tabs-16.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-16",
+ "type": "registry:component",
+ "title": "Tabs 16",
+ "description": "Vertical tabs with underline styling in left-side layout",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-16.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalUnderlineDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalUnderlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-16.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-17.json b/public/r/tabs-17.json
new file mode 100644
index 0000000..dce8b7f
--- /dev/null
+++ b/public/r/tabs-17.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-17",
+ "type": "registry:component",
+ "title": "Tabs 17",
+ "description": "Soft vertical tabs with gentle styling and left navigation",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-17.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsSoftVerticalDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsSoftVerticalDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-17.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-18.json b/public/r/tabs-18.json
new file mode 100644
index 0000000..1f6b21f
--- /dev/null
+++ b/public/r/tabs-18.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-18",
+ "type": "registry:component",
+ "title": "Tabs 18",
+ "description": "Vertical tabs with solid background styling and left layout",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-18.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalSolidDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalSolidDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-18.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-19.json b/public/r/tabs-19.json
new file mode 100644
index 0000000..e734119
--- /dev/null
+++ b/public/r/tabs-19.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-19",
+ "type": "registry:component",
+ "title": "Tabs 19",
+ "description": "Vertical tabs with sharp corners and rectangular styling",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-19.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalSharpDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalSharpDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-19.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-20.json b/public/r/tabs-20.json
new file mode 100644
index 0000000..e6e30d2
--- /dev/null
+++ b/public/r/tabs-20.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-20",
+ "type": "registry:component",
+ "title": "Tabs 20",
+ "description": "Vertical tabs with lined separator styling for organized layout",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-20.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalLinedDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalLinedDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-20.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-21.json b/public/r/tabs-21.json
new file mode 100644
index 0000000..59d0c0b
--- /dev/null
+++ b/public/r/tabs-21.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-21",
+ "type": "registry:component",
+ "title": "Tabs 21",
+ "description": "Vertical tabs with tooltip functionality for additional information",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-21.tsx",
+ "content": "import { BookIcon, GiftIcon, HeartIcon } from 'lucide-react'\n\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n icon: BookIcon,\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n icon: HeartIcon,\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n icon: GiftIcon,\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalWithTooltipDemo = () => {\n return (\n \n
\n \n {tabs.map(({ icon: Icon, name, value }) => (\n \n \n \n \n \n \n \n \n \n {name}\n \n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalWithTooltipDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-21.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-22.json b/public/r/tabs-22.json
new file mode 100644
index 0000000..da6fad7
--- /dev/null
+++ b/public/r/tabs-22.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-22",
+ "type": "registry:component",
+ "title": "Tabs 22",
+ "description": "Vertical tabs with icons for enhanced visual navigation",
+ "dependencies": [
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-22.tsx",
+ "content": "import { BookIcon, GiftIcon, HeartIcon } from 'lucide-react'\n\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n icon: BookIcon,\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n icon: HeartIcon,\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n icon: GiftIcon,\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalWithIconDemo = () => {\n return (\n \n
\n \n {tabs.map(({ icon: Icon, name, value }) => (\n \n \n {name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalWithIconDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-22.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-23.json b/public/r/tabs-23.json
new file mode 100644
index 0000000..be9bdbe
--- /dev/null
+++ b/public/r/tabs-23.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-23",
+ "type": "registry:component",
+ "title": "Tabs 23",
+ "description": "Vertical tabs with badge indicators in left navigation layout",
+ "registryDependencies": [
+ "badge",
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-23.tsx",
+ "content": "import { Badge } from '@/components/ui/badge'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n count: 8,\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n count: 3,\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n count: 6,\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalWithBadgeDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n {tab.count} \n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalWithBadgeDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-23.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-24.json b/public/r/tabs-24.json
new file mode 100644
index 0000000..e6f6f0c
--- /dev/null
+++ b/public/r/tabs-24.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-24",
+ "type": "registry:component",
+ "title": "Tabs 24",
+ "description": "Vertical tabs with outline styling for clean bordered appearance",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-24.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsVerticalOutlineDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsVerticalOutlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-24.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-25.json b/public/r/tabs-25.json
new file mode 100644
index 0000000..275e5e1
--- /dev/null
+++ b/public/r/tabs-25.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-25",
+ "type": "registry:component",
+ "title": "Tabs 25",
+ "description": "Custom styled tabs with primary background active state and enhanced hover effects",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-25.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsCustomDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsCustomDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-25.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-26.json b/public/r/tabs-26.json
new file mode 100644
index 0000000..acf2b56
--- /dev/null
+++ b/public/r/tabs-26.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-26",
+ "type": "registry:component",
+ "title": "Tabs 26",
+ "description": "Custom tabs with underline styling using bottom border and no background",
+ "registryDependencies": [
+ "tabs"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-26.tsx",
+ "content": "import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst TabsCustomUnderlineDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n
\n )\n}\n\nexport default TabsCustomUnderlineDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-26.tsx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tabs-27.json b/public/r/tabs-27.json
new file mode 100644
index 0000000..a338ae5
--- /dev/null
+++ b/public/r/tabs-27.json
@@ -0,0 +1,33 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tabs-27",
+ "type": "registry:component",
+ "title": "Tabs 27",
+ "description": "Animated tabs with motion highlight transitions using motion-tabs components",
+ "dependencies": [
+ "motion"
+ ],
+ "files": [
+ {
+ "path": "src/components/shadcn-studio/tabs/tabs-27.tsx",
+ "content": "import { Tabs, TabsContent, TabsContents, TabsList, TabsTrigger } from '@/components/ui/motion-tabs'\n\nconst tabs = [\n {\n name: 'Explore',\n value: 'explore',\n content: (\n <>\n Discover fresh ideas , trending topics, and hidden gems\n curated just for you. Start exploring and let your curiosity lead the way!\n >\n )\n },\n {\n name: 'Favorites',\n value: 'favorites',\n content: (\n <>\n All your favorites are saved here. Revisit articles,\n collections, and moments you love, any time you want a little inspiration.\n >\n )\n },\n {\n name: 'Surprise Me',\n value: 'surprise',\n content: (\n <>\n Surprise! Here's something unexpected—a fun fact, a\n quirky tip, or a daily challenge. Come back for a new surprise every day!\n >\n )\n }\n]\n\nconst AnimatedTabsDemo = () => {\n return (\n \n
\n \n {tabs.map(tab => (\n \n {tab.name}\n \n ))}\n \n\n \n {tabs.map(tab => (\n \n {tab.content}
\n \n ))}\n \n \n\n
\n Inspired by{' '}\n \n Animate UI\n \n
\n
\n )\n}\n\nexport default AnimatedTabsDemo\n",
+ "type": "registry:component",
+ "target": "components/shadcn-studio/tabs/tabs-27.tsx"
+ },
+ {
+ "path": "src/components/ui/motion-highlight.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport type { Transition } from 'motion/react'\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/utils'\n\ntype MotionHighlightMode = 'children' | 'parent'\n\ntype Bounds = {\n top: number\n left: number\n width: number\n height: number\n}\n\ntype MotionHighlightContextType = {\n mode: MotionHighlightMode\n activeValue: T | null\n setActiveValue: (value: T | null) => void\n setBounds: (bounds: DOMRect) => void\n clearBounds: () => void\n id: string\n hover: boolean\n className?: string\n activeClassName?: string\n setActiveClassName: (className: string) => void\n transition?: Transition\n disabled?: boolean\n enabled?: boolean\n exitDelay?: number\n forceUpdateBounds?: boolean\n}\n\nconst MotionHighlightContext = React.createContext<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MotionHighlightContextType | undefined\n>(undefined)\n\nfunction useMotionHighlight(): MotionHighlightContextType {\n const context = React.useContext(MotionHighlightContext)\n\n if (!context) {\n throw new Error('useMotionHighlight must be used within a MotionHighlightProvider')\n }\n\n return context as unknown as MotionHighlightContextType\n}\n\ntype BaseMotionHighlightProps = {\n mode?: MotionHighlightMode\n value?: T | null\n defaultValue?: T | null\n onValueChange?: (value: T | null) => void\n className?: string\n transition?: Transition\n hover?: boolean\n disabled?: boolean\n enabled?: boolean\n exitDelay?: number\n}\n\ntype ParentModeMotionHighlightProps = {\n boundsOffset?: Partial\n containerClassName?: string\n forceUpdateBounds?: boolean\n}\n\ntype ControlledParentModeMotionHighlightProps = BaseMotionHighlightProps &\n ParentModeMotionHighlightProps & {\n mode: 'parent'\n controlledItems: true\n children: React.ReactNode\n }\n\ntype ControlledChildrenModeMotionHighlightProps = BaseMotionHighlightProps