diff --git a/.gitignore b/.gitignore
index cacf0c4f..a09fccbc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,4 +35,6 @@ yarn-error.log*
*.tsbuildinfo
next-env.d.ts
-.idea
\ No newline at end of file
+.idea
+
+/public/r
\ No newline at end of file
diff --git a/README.md b/README.md
index 24592e0e..cf3ca8b7 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ registry's `/r/${component_name}.json` endpoint. This endpoint will provide v0 t
and metadata to start your v0 chat with your component, theme, and other related code.
These `/r/${component_name}.json` files are generated using `shadcn/ui` during the `build` and `dev` based on the
-repository's [`registry.json`](./registry.json). For more information, refer to the
+repository's [`registry.json`](./registries/registry.json). For more information, refer to the
[documentation](https://ui.shadcn.com/docs/registry/registry-json).
## Theming
@@ -43,7 +43,7 @@ on [ui.shadcn.com/docs](https://ui.shadcn.com/docs).
#### MCP
-To use this registry with MCP, you must also edit [`registry.json`](./registry.json)'s first
+To use this registry with MCP, you must also edit [`registry.json`](./registries/registry.json)'s first
`registry-item` named `theme`. This `registry:theme` item not only contains the tailwind configuration, but it also
contains your design tokens / CSS variables.
diff --git a/package.json b/package.json
index 2b7d7ef8..b2049930 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "registry-starter",
- "version": "0.0.1",
+ "version": "0.0.2",
"private": true,
"scripts": {
"dev": "npm run registry:build && next dev --turbopack",
@@ -8,10 +8,15 @@
"start": "next start",
"lint": "biome check",
"lint:fix": "biome check --write",
- "registry:build": "npx shadcn@latest build && cp registry.json public/r/registry.json"
+ "registry_core:build": "npx shadcn@latest build ./registries/registry.json --output ./public/r && copy registries\\registry.json public\\r\\registry.json",
+ "registry_marketplace_next:build": "npx shadcn@latest build ./registries/marketplace/next/registry.json --output ./public/r/marketplace/next && copy registries\\marketplace\\next\\registry.json public\\r\\marketplace\\next\\registry.json",
+ "registry_marketplace_react:build": "npx shadcn@latest build ./registries/marketplace/react/registry.json --output ./public/r/marketplace/react && copy registries\\marketplace\\react\\registry.json public\\r\\marketplace\\react\\registry.json",
+ "registry:build": "npm run registry_core:build && npm run registry_marketplace_next:build && npm run registry_marketplace_react:build"
},
"dependencies": {
"@hookform/resolvers": "^5.1.1",
+ "@mdi/js": "^7.4.47",
+ "@mdi/react": "^1.6.1",
"@radix-ui/react-accordion": "^1.2.11",
"@radix-ui/react-alert-dialog": "^1.1.14",
"@radix-ui/react-aspect-ratio": "^1.1.7",
@@ -38,6 +43,9 @@
"@radix-ui/react-toggle": "^1.1.9",
"@radix-ui/react-toggle-group": "^1.1.10",
"@radix-ui/react-tooltip": "^1.2.7",
+ "@sitecore-marketplace-sdk/client": "^0.2.0",
+ "@sitecore-marketplace-sdk/xmc": "^0.2.1",
+ "@tanstack/react-form": "^1.21.3",
"@tanstack/react-table": "^8.21.3",
"@vercel/analytics": "^1.5.0",
"@vercel/speed-insights": "^1.2.0",
@@ -62,6 +70,8 @@
"zod": "^3.25.76"
},
"devDependencies": {
+ "@auth0/auth0-react": "^2.5.0",
+ "@auth0/nextjs-auth0": "^4.10.0",
"@biomejs/biome": "1.9.4",
"@tailwindcss/postcss": "^4.1.11",
"@testing-library/dom": "^10.4.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5317ade2..5522804c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -11,6 +11,12 @@ importers:
'@hookform/resolvers':
specifier: ^5.1.1
version: 5.1.1(react-hook-form@7.60.0(react@19.1.0))
+ '@mdi/js':
+ specifier: ^7.4.47
+ version: 7.4.47
+ '@mdi/react':
+ specifier: ^1.6.1
+ version: 1.6.1
'@radix-ui/react-accordion':
specifier: ^1.2.11
version: 1.2.11(@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)
@@ -89,6 +95,15 @@ importers:
'@radix-ui/react-tooltip':
specifier: ^1.2.7
version: 1.2.7(@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)
+ '@sitecore-marketplace-sdk/client':
+ specifier: ^0.2.0
+ version: 0.2.0
+ '@sitecore-marketplace-sdk/xmc':
+ specifier: ^0.2.1
+ version: 0.2.1(@sitecore-marketplace-sdk/client@0.2.0)
+ '@tanstack/react-form':
+ specifier: ^1.21.3
+ version: 1.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@tanstack/react-table':
specifier: ^8.21.3
version: 8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -156,6 +171,12 @@ importers:
specifier: ^3.25.76
version: 3.25.76
devDependencies:
+ '@auth0/auth0-react':
+ specifier: ^2.5.0
+ version: 2.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@auth0/nextjs-auth0':
+ specifier: ^4.10.0
+ version: 4.10.0(next@15.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@biomejs/biome':
specifier: 1.9.4
version: 1.9.4
@@ -218,6 +239,22 @@ packages:
'@asamuzakjp/css-color@3.2.0':
resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
+ '@auth0/auth0-react@2.5.0':
+ resolution: {integrity: sha512-o2nuJ85D4ESRybh3zbA5Dl1Oe17fRZL+/Q17b1qQdS+0QWZrXTEzTMD0wb0tYGST5rJb8rt7pVh6Tj4cWhdTCQ==}
+ peerDependencies:
+ react: ^16.11.0 || ^17 || ^18 || ^19
+ react-dom: ^16.11.0 || ^17 || ^18 || ^19
+
+ '@auth0/auth0-spa-js@2.4.1':
+ resolution: {integrity: sha512-GE1XPLEgEUeqYBw5VcA52+3ubJDh4VKZFqdu0mr6h7anu+rFZb389cDbfpW145I23T1knZB/jvQtuRrkcLuT+Q==}
+
+ '@auth0/nextjs-auth0@4.10.0':
+ resolution: {integrity: sha512-4CBuMlPJ4boxrB5IYisqMh9VBn74PGsspMfZpLG5JvrgDklw2CZsThW+UeAi1YMhE4/3VHyeht2yzN1Fs95bug==}
+ peerDependencies:
+ next: ^14.2.25 || ^15.2.3
+ react: ^18.0.0 || ^19.0.0 || ^19.0.0-0
+ react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-0
+
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
@@ -314,6 +351,10 @@ packages:
'@date-fns/tz@1.2.0':
resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==}
+ '@edge-runtime/cookies@5.0.2':
+ resolution: {integrity: sha512-Sd8LcWpZk/SWEeKGE8LT6gMm5MGfX/wm+GPnh1eBEtCpya3vYqn37wYknwAHw92ONoyyREl1hJwxV/Qx2DWNOg==}
+ engines: {node: '>=16'}
+
'@emnapi/runtime@1.4.4':
resolution: {integrity: sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==}
@@ -470,6 +511,10 @@ packages:
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+ '@hey-api/client-fetch@0.8.3':
+ resolution: {integrity: sha512-EBVa8wwUMyBSeQ32PtCz6u5bFQZIMAufvwCT1ZtpjqT3caJQEza4NokbGU50q1ZVrMsM5Ot6GuDNJOF3TMo26Q==}
+ deprecated: Starting with v0.73.0, this package is bundled directly inside @hey-api/openapi-ts.
+
'@hookform/resolvers@5.1.1':
resolution: {integrity: sha512-J/NVING3LMAEvexJkyTLjruSm7aOFx7QX21pzkiJfMoNG0wl5aFEjLTl7ay7IQb9EWY6AkrBy7tHL2Alijpdcg==}
peerDependencies:
@@ -614,6 +659,12 @@ packages:
'@jridgewell/trace-mapping@0.3.29':
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
+ '@mdi/js@7.4.47':
+ resolution: {integrity: sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==}
+
+ '@mdi/react@1.6.1':
+ resolution: {integrity: sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==}
+
'@next/env@15.4.4':
resolution: {integrity: sha512-SJKOOkULKENyHSYXE5+KiFU6itcIb6wSBjgM92meK0HVKpo94dNOLZVdLLuS7/BxImROkGoPsjR4EnuDucqiiA==}
@@ -665,6 +716,9 @@ packages:
cpu: [x64]
os: [win32]
+ '@panva/hkdf@1.2.1':
+ resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==}
+
'@radix-ui/number@1.1.1':
resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
@@ -1380,6 +1434,18 @@ packages:
cpu: [x64]
os: [win32]
+ '@sitecore-marketplace-sdk/client@0.2.0':
+ resolution: {integrity: sha512-qG9EHp/5BZS3OXlD2M762q5SK9Cq5uMCUodlgoGtmCzdYGHkw1zToLMHveT7b9sxsIzn9r88Urwk45JX3Z8qrg==}
+ engines: {node: '>=16'}
+
+ '@sitecore-marketplace-sdk/core@0.2.1':
+ resolution: {integrity: sha512-VASAsahBRyL0yukCFY/JUb663RCowJxGrqDI0F0rsU24IRZtxdMKiKa6ypMmAelDIRKuDnn4Tl7uJKUKqF0yfA==}
+
+ '@sitecore-marketplace-sdk/xmc@0.2.1':
+ resolution: {integrity: sha512-yx3BLibH51h59vLKlxkNmwKpllJfJSFHUNUui+DaJ7XjPze+DSFbCr6I7Dsz++Nv6GEdlLlJPuvJc9oIK0VPOw==}
+ peerDependencies:
+ '@sitecore-marketplace-sdk/client': 0.2.0
+
'@standard-schema/utils@0.3.0':
resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
@@ -1549,6 +1615,28 @@ packages:
'@tailwindcss/postcss@4.1.11':
resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==}
+ '@tanstack/devtools-event-client@0.2.5':
+ resolution: {integrity: sha512-iVdqw879KETXyyPHc3gQR5Ld0GjlPLk7bKenBUhzr3+z1FiQZvsbfgYfRRokTSPcgwANAV7aA2Uv05nx5xWT8A==}
+ engines: {node: '>=18'}
+
+ '@tanstack/form-core@1.21.3':
+ resolution: {integrity: sha512-vSBWmc2WyMH2KbDwPp7aEvvfPXOiCAv/jhJ9dFojdI0eGggSdW/2mF7lXe5V5xgYfNeCH2cSztu2EykJp3I8tg==}
+
+ '@tanstack/react-form@1.21.3':
+ resolution: {integrity: sha512-bd5kttI3s8gJNZMF1l3VVs0CuDa930z/OKhErCS7BSNO3XY7q/nPCffueFp9nGx0wa9mCumqOuuEP+Z0PPCgFw==}
+ peerDependencies:
+ '@tanstack/react-start': ^1.130.10
+ react: ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@tanstack/react-start':
+ optional: true
+
+ '@tanstack/react-store@0.7.5':
+ resolution: {integrity: sha512-A+WZtEnHZpvbKXm8qR+xndNKywBLez2KKKKEQc7w0Qs45GvY1LpRI3BTZNmELwEVim8+Apf99iEDH2J+MUIzlQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
'@tanstack/react-table@8.21.3':
resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==}
engines: {node: '>=12'}
@@ -1556,6 +1644,9 @@ packages:
react: '>=16.8'
react-dom: '>=16.8'
+ '@tanstack/store@0.7.5':
+ resolution: {integrity: sha512-qd/OjkjaFRKqKU4Yjipaen/EOB9MyEg6Wr9fW103RBPACf1ZcKhbhcu2S5mj5IgdPib6xFIgCUti/mKVkl+fRw==}
+
'@tanstack/table-core@8.21.3':
resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
engines: {node: '>=12'}
@@ -1708,6 +1799,9 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ browser-tabs-lock@1.3.0:
+ resolution: {integrity: sha512-g6nHaobTiT0eMZ7jh16YpD2kcjAp+PInbiVq3M1x6KKaEIVhT4v9oURNIpZLOZ3LQbQ3XYfNhMAb/9hzNLIWrw==}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -1840,6 +1934,9 @@ packages:
decimal.js@10.6.0:
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+ decode-formdata@0.9.0:
+ resolution: {integrity: sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw==}
+
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
@@ -1855,6 +1952,9 @@ packages:
detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+ devalue@5.3.2:
+ resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==}
+
dom-accessibility-api@0.5.16:
resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
@@ -1864,6 +1964,9 @@ packages:
dom-helpers@5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+ dpop@2.1.1:
+ resolution: {integrity: sha512-J0Of2JTiM4h5si0tlbPQ/lkqfZ5wAEVkKYBhkwyyANnPJfWH4VsR5uIkZ+T+OSPIwDYUg1fbd5Mmodd25HjY1w==}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -1889,6 +1992,9 @@ packages:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
+ es-cookie@1.3.2:
+ resolution: {integrity: sha512-UTlYYhXGLOy05P/vKVT2Ui7WtC7NiRzGtJyAKKn32g5Gvcjn7KAClLPWlipCtxIus934dFg9o9jXiBL0nP+t9Q==}
+
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -2004,6 +2110,9 @@ packages:
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
hasBin: true
+ jose@6.1.0:
+ resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -2169,10 +2278,16 @@ packages:
nwsapi@2.2.20:
resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==}
+ oauth4webapi@3.8.1:
+ resolution: {integrity: sha512-olkZDELNycOWQf9LrsELFq8n05LwJgV8UkrS0cburk6FOwf8GvLam+YB+Uj5Qvryee+vwWOfQVeI5Vm0MVg7SA==}
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
+ openid-client@6.8.0:
+ resolution: {integrity: sha512-oG1d1nAVhIIE+JSjLS+7E9wY1QOJpZltkzlJdbZ7kEn7Hp3hqur2TEeQ8gLOHoHkhbRAGZJKoOnEQcLOQJuIyg==}
+
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
@@ -2354,6 +2469,11 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
+ swr@2.3.6:
+ resolution: {integrity: sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==}
+ peerDependencies:
+ react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
@@ -2428,6 +2548,14 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ uuid@11.1.0:
+ resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
+ hasBin: true
+
+ uuid@13.0.0:
+ resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==}
+ hasBin: true
+
vaul@1.1.2:
resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==}
peerDependencies:
@@ -2530,6 +2658,30 @@ snapshots:
'@csstools/css-tokenizer': 3.0.4
lru-cache: 10.4.3
+ '@auth0/auth0-react@2.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@auth0/auth0-spa-js': 2.4.1
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+
+ '@auth0/auth0-spa-js@2.4.1':
+ dependencies:
+ browser-tabs-lock: 1.3.0
+ dpop: 2.1.1
+ es-cookie: 1.3.2
+
+ '@auth0/nextjs-auth0@4.10.0(next@15.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@edge-runtime/cookies': 5.0.2
+ '@panva/hkdf': 1.2.1
+ jose: 6.1.0
+ next: 15.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ oauth4webapi: 3.8.1
+ openid-client: 6.8.0
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ swr: 2.3.6(react@19.1.0)
+
'@babel/code-frame@7.27.1':
dependencies:
'@babel/helper-validator-identifier': 7.27.1
@@ -2597,6 +2749,8 @@ snapshots:
'@date-fns/tz@1.2.0': {}
+ '@edge-runtime/cookies@5.0.2': {}
+
'@emnapi/runtime@1.4.4':
dependencies:
tslib: 2.8.1
@@ -2688,6 +2842,8 @@ snapshots:
'@floating-ui/utils@0.2.10': {}
+ '@hey-api/client-fetch@0.8.3': {}
+
'@hookform/resolvers@5.1.1(react-hook-form@7.60.0(react@19.1.0))':
dependencies:
'@standard-schema/utils': 0.3.0
@@ -2797,6 +2953,12 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.4
+ '@mdi/js@7.4.47': {}
+
+ '@mdi/react@1.6.1':
+ dependencies:
+ prop-types: 15.8.1
+
'@next/env@15.4.4': {}
'@next/swc-darwin-arm64@15.4.4':
@@ -2823,6 +2985,8 @@ snapshots:
'@next/swc-win32-x64-msvc@15.4.4':
optional: true
+ '@panva/hkdf@1.2.1': {}
+
'@radix-ui/number@1.1.1': {}
'@radix-ui/primitive@1.1.2': {}
@@ -3538,6 +3702,22 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.45.0':
optional: true
+ '@sitecore-marketplace-sdk/client@0.2.0':
+ dependencies:
+ '@sitecore-marketplace-sdk/core': 0.2.1
+ tslib: 2.8.1
+ uuid: 11.1.0
+
+ '@sitecore-marketplace-sdk/core@0.2.1':
+ dependencies:
+ tslib: 2.8.1
+ uuid: 11.1.0
+
+ '@sitecore-marketplace-sdk/xmc@0.2.1(@sitecore-marketplace-sdk/client@0.2.0)':
+ dependencies:
+ '@hey-api/client-fetch': 0.8.3
+ '@sitecore-marketplace-sdk/client': 0.2.0
+
'@standard-schema/utils@0.3.0': {}
'@swc/core-darwin-arm64@1.12.14':
@@ -3668,12 +3848,39 @@ snapshots:
postcss: 8.5.6
tailwindcss: 4.1.11
+ '@tanstack/devtools-event-client@0.2.5': {}
+
+ '@tanstack/form-core@1.21.3':
+ dependencies:
+ '@tanstack/devtools-event-client': 0.2.5
+ '@tanstack/store': 0.7.5
+ uuid: 13.0.0
+
+ '@tanstack/react-form@1.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@tanstack/form-core': 1.21.3
+ '@tanstack/react-store': 0.7.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ decode-formdata: 0.9.0
+ devalue: 5.3.2
+ react: 19.1.0
+ transitivePeerDependencies:
+ - react-dom
+
+ '@tanstack/react-store@0.7.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@tanstack/store': 0.7.5
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ use-sync-external-store: 1.5.0(react@19.1.0)
+
'@tanstack/react-table@8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@tanstack/table-core': 8.21.3
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
+ '@tanstack/store@0.7.5': {}
+
'@tanstack/table-core@8.21.3': {}
'@testing-library/dom@10.4.0':
@@ -3789,6 +3996,10 @@ snapshots:
asynckit@0.4.0: {}
+ browser-tabs-lock@1.3.0:
+ dependencies:
+ lodash: 4.17.21
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -3914,6 +4125,8 @@ snapshots:
decimal.js@10.6.0: {}
+ decode-formdata@0.9.0: {}
+
delayed-stream@1.0.0: {}
dequal@2.0.3: {}
@@ -3922,6 +4135,8 @@ snapshots:
detect-node-es@1.1.0: {}
+ devalue@5.3.2: {}
+
dom-accessibility-api@0.5.16: {}
dom-accessibility-api@0.6.3: {}
@@ -3931,6 +4146,8 @@ snapshots:
'@babel/runtime': 7.27.6
csstype: 3.1.3
+ dpop@2.1.1: {}
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -3956,6 +4173,8 @@ snapshots:
entities@6.0.1: {}
+ es-cookie@1.3.2: {}
+
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
@@ -4088,6 +4307,8 @@ snapshots:
jiti@2.4.2: {}
+ jose@6.1.0: {}
+
js-tokens@4.0.0: {}
jsdom@25.0.1:
@@ -4233,8 +4454,15 @@ snapshots:
nwsapi@2.2.20: {}
+ oauth4webapi@3.8.1: {}
+
object-assign@4.1.1: {}
+ openid-client@6.8.0:
+ dependencies:
+ jose: 6.1.0
+ oauth4webapi: 3.8.1
+
parse5@7.3.0:
dependencies:
entities: 6.0.1
@@ -4458,6 +4686,12 @@ snapshots:
dependencies:
has-flag: 4.0.0
+ swr@2.3.6(react@19.1.0):
+ dependencies:
+ dequal: 2.0.3
+ react: 19.1.0
+ use-sync-external-store: 1.5.0(react@19.1.0)
+
symbol-tree@3.2.4: {}
tailwind-merge@3.3.1: {}
@@ -4518,6 +4752,10 @@ snapshots:
dependencies:
react: 19.1.0
+ uuid@11.1.0: {}
+
+ uuid@13.0.0: {}
+
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)
diff --git a/registries/marketplace/next/registry.json b/registries/marketplace/next/registry.json
new file mode 100644
index 00000000..bdd1fa51
--- /dev/null
+++ b/registries/marketplace/next/registry.json
@@ -0,0 +1,153 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry.json",
+ "name": "Sitecore Marketplace",
+ "homepage": "https://blok-shadcn.vercel.app",
+ "items": [
+ {
+ "name": "quickstart",
+ "type": "registry:block",
+ "title": "Quickstart for Next.js",
+ "description": "A quickstart for next.js Sitecore marketplace apps with marketplace sdk",
+ "dependencies": [
+ "@sitecore-marketplace-sdk/client"
+ ],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/badge.json",
+ "https://blok-shadcn.vercel.app/r/card.json",
+ "https://blok-shadcn.vercel.app/r/collapsible.json"
+ ],
+ "files": [
+ {
+ "path": "src/marketplace/next/components/providers/marketplace.tsx",
+ "type": "registry:component",
+ "target": "components/providers/marketplace.tsx"
+ },
+ {
+ "path": "src/marketplace/next/components/examples/build-in-auth/application-context.tsx",
+ "type": "registry:component",
+ "target": "components/examples/build-in-auth/application-context.tsx"
+ },
+ {
+ "path": "src/marketplace/next/layouts/layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/marketplace/next/components/examples/build-in-auth/page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "quickstart-with-custom-auth",
+ "type": "registry:block",
+ "title": "Quickstart for Next js with server side authentication",
+ "description": "A quickstart for next.js Sitecore marketplace apps with server side authentication",
+ "dependencies": [
+ "@auth0/auth0-react"
+ ],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/marketplace/next/quickstart.json"
+ ],
+ "files": [
+ {
+ "path": "src/marketplace/next/components/providers/auth.tsx",
+ "type": "registry:component",
+ "target": "components/providers/auth.tsx"
+ },
+ {
+ "path": "src/marketplace/next/layouts/with-auth.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/marketplace/next/next.config.ts",
+ "type": "registry:file",
+ "target": "next.config.ts"
+ }
+ ],
+ "envVars": {
+ "NEXT_PUBLIC_AUTH0_DOMAIN": "https://auth.sitecorecloud.io",
+ "NEXT_PUBLIC_AUTH0_AUDIENCE": "https://api-webapp.sitecorecloud.io",
+ "NEXT_PUBLIC_AUTH0_SCOPE": "openid profile email offline_access",
+ "NEXT_PUBLIC_AUTH0_CLIENT_ID": "your-marketplace-client-id",
+ "NEXT_PUBLIC_SITECORE_APP_ID": "your-app-id",
+ "NEXT_PUBLIC_APP_BASE_URL": "https://localhost:3000",
+ "NEXT_PUBLIC_SITECORE_ORGANIZATION_ID": "your-organization-id",
+ "NEXT_PUBLIC_SITECORE_TENANT_ID": "marketplace-app-tenant-id-after-installation"
+ },
+ "docs": "Your app needs to run in 'https'. We suggest to add '--experimental-https' in your dev script in package.json. Also, make sure to update your environment variables. Happy coding!"
+ },
+ {
+ "name": "quickstart-with-client-side-xmc",
+ "type": "registry:block",
+ "title": "Quickstart for Next.js with XMC API examples",
+ "description": "A quickstart for next.js Sitecore marketplace apps with XMC API examples",
+ "dependencies": [
+ "@sitecore-marketplace-sdk/xmc"
+ ],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/marketplace/next/quickstart.json",
+ "https://blok-shadcn.vercel.app/r/button.json",
+ "https://blok-shadcn.vercel.app/r/alert.json",
+ "https://blok-shadcn.vercel.app/r/skeleton.json",
+ "https://blok-shadcn.vercel.app/r/separator.json"
+ ],
+ "files": [
+ {
+ "path": "src/marketplace/next/components/providers/marketplace-w-xmc.tsx",
+ "type": "registry:component",
+ "target": "components/providers/marketplace.tsx"
+ },
+ {
+ "path": "src/marketplace/next/components/examples/build-in-auth/with-xmc/list-languages.tsx",
+ "type": "registry:component",
+ "target": "components/examples/build-in-auth/with-xmc/list-languages.tsx"
+ },
+ {
+ "path": "src/marketplace/next/components/examples/build-in-auth/with-xmc/page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "quickstart-with-full-stack-xmc",
+ "type": "registry:block",
+ "title": "Quickstart for Next.js with full-stack XMC APIs examples",
+ "description": "A quickstart for next.js Sitecore marketplace apps with full-stack XMC API examples",
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/marketplace/next/quickstart-with-custom-auth.json",
+ "https://blok-shadcn.vercel.app/r/marketplace/next/quickstart-with-client-side-xmc.json"
+ ],
+ "files": [
+ {
+ "path": "src/marketplace/next/components/examples/custom-auth/with-api-route/list-languages.tsx",
+ "type": "registry:component",
+ "target": "components/examples/custom-auth/with-api-route/list-languages.tsx"
+ },
+ {
+ "path": "src/marketplace/next/components/examples/custom-auth/with-api-route/route.ts",
+ "type": "registry:file",
+ "target": "app/api/sites/languages/route.ts"
+ },
+ {
+ "path": "src/marketplace/next/components/examples/custom-auth/with-server-action/list-languages.tsx",
+ "type": "registry:component",
+ "target": "components/examples/custom-auth/with-server-action/list-languages.tsx"
+ },
+ {
+ "path": "src/marketplace/next/components/examples/custom-auth/with-server-action/action.ts",
+ "type": "registry:file",
+ "target": "components/examples/custom-auth/with-server-action/action.ts"
+ },
+ {
+ "path": "src/marketplace/next/components/examples/custom-auth/page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/registries/marketplace/react/registry.json b/registries/marketplace/react/registry.json
new file mode 100644
index 00000000..71e84c82
--- /dev/null
+++ b/registries/marketplace/react/registry.json
@@ -0,0 +1,57 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry.json",
+ "name": "sitecore marketplace",
+ "homepage": "https://blok-shadcn.vercel.app",
+ "items": [
+ {
+ "name": "quickstart",
+ "type": "registry:block",
+ "title": "Quickstart for React SPA Sitecore marketplace apps with marketplace sdk",
+ "description": "A quickstart for next.js Sitecore marketplace apps with marketplace sdk",
+ "dependencies": [
+ "@sitecore-marketplace-sdk/client"
+ ],
+ "files": [
+ {
+ "path": "src/marketplace/react/components/providers/marketplace.tsx",
+ "type": "registry:file",
+ "target": "app/providers/marketplace.tsx"
+ },
+ {
+ "path": "src/marketplace/react/components/examples/example.tsx",
+ "type": "registry:file",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "quickstart-with-xmc",
+ "type": "registry:block",
+ "title": "Examples for React SPA Sitecore marketplace apps with marketplace sdk",
+ "description": "Examples for next.js Sitecore marketplace apps with marketplace sdk",
+ "dependencies": [
+ "@sitecore-marketplace-sdk/xmc"
+ ],
+ "registryDependencies":[
+ "https://blok-shadcn.vercel.app/r/marketplace/react/quickstart.json"
+ ],
+ "files": [
+ {
+ "path": "src/marketplace/react/components/providers/marketplace-w-xmc.tsx",
+ "type": "registry:file",
+ "target": "components/providers/marketplace.tsx"
+ },
+ {
+ "path": "src/marketplace/react/components/examples/with-xmc/list-languages.tsx",
+ "type": "registry:file",
+ "target": "components/examples/with-xmc/list-languages.tsx"
+ },
+ {
+ "path": "src/marketplace/react/components/examples/with-xmc/example.tsx",
+ "type": "registry:file",
+ "target": "app/page.tsx"
+ }
+ ]
+ }
+ ]
+ }
\ No newline at end of file
diff --git a/registries/registry.json b/registries/registry.json
new file mode 100644
index 00000000..d2aef824
--- /dev/null
+++ b/registries/registry.json
@@ -0,0 +1,1265 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry.json",
+ "name": "blok",
+ "homepage": "https://blok-shadcn.vercel.app",
+ "items": [
+ {
+ "name": "theme",
+ "type": "registry:theme",
+ "title": "Blokcn Theme",
+ "description": "A custom Blokcn theme providing reusable UI components styled with Tailwind CSS and shadcn/ui variables, designed for consistency and efficiency across projects.",
+ "cssVars": {
+ "light": {
+ "background": "oklch(0.97 0.01 80.72)",
+ "foreground": "oklch(0.3 0.04 30.2)",
+ "card": "oklch(0.97 0.01 80.72)",
+ "card-foreground": "oklch(0.3 0.04 30.2)",
+ "popover": "oklch(0.97 0.01 80.72)",
+ "popover-foreground": "oklch(0.3 0.04 30.2)",
+ "primary": "oklch(0.52 0.13 144.17)",
+ "primary-foreground": "oklch(1.0 0 0)",
+ "secondary": "oklch(0.96 0.02 147.64)",
+ "secondary-foreground": "oklch(0.43 0.12 144.31)",
+ "muted": "oklch(0.94 0.01 74.42)",
+ "muted-foreground": "oklch(0.45 0.05 39.21)",
+ "accent": "oklch(0.9 0.05 146.04)",
+ "accent-foreground": "oklch(0.43 0.12 144.31)",
+ "destructive": "oklch(0.54 0.19 26.72)",
+ "destructive-foreground": "oklch(1.0 0 0)",
+ "border": "oklch(0.88 0.02 74.64)",
+ "input": "oklch(0.88 0.02 74.64)",
+ "ring": "oklch(0.52 0.13 144.17)",
+ "chart-1": "oklch(0.67 0.16 144.21)",
+ "chart-2": "oklch(0.58 0.14 144.18)",
+ "chart-3": "oklch(0.52 0.13 144.17)",
+ "chart-4": "oklch(0.43 0.12 144.31)",
+ "chart-5": "oklch(0.22 0.05 145.73)",
+ "sidebar": "oklch(0.94 0.01 74.42)",
+ "sidebar-foreground": "oklch(0.3 0.04 30.2)",
+ "sidebar-primary": "oklch(0.52 0.13 144.17)",
+ "sidebar-primary-foreground": "oklch(1.0 0 0)",
+ "sidebar-accent": "oklch(0.9 0.05 146.04)",
+ "sidebar-accent-foreground": "oklch(0.43 0.12 144.31)",
+ "sidebar-border": "oklch(0.88 0.02 74.64)",
+ "sidebar-ring": "oklch(0.52 0.13 144.17)",
+ "radius": "0.5rem"
+ },
+ "dark": {
+ "background": "oklch(0.15 0.01 74.42)",
+ "foreground": "oklch(0.95 0.02 80.72)",
+ "card": "oklch(0.12 0.01 80.72)",
+ "card-foreground": "oklch(0.95 0.02 80.72)",
+ "popover": "oklch(0.12 0.01 80.72)",
+ "popover-foreground": "oklch(0.95 0.02 80.72)",
+ "primary": "oklch(0.58 0.15 144.17)",
+ "primary-foreground": "oklch(0.09 0.01 80.72)",
+ "secondary": "oklch(0.15 0.02 147.64)",
+ "secondary-foreground": "oklch(0.65 0.12 144.31)",
+ "muted": "oklch(0.18 0.01 74.42)",
+ "muted-foreground": "oklch(0.65 0.03 74.42)",
+ "accent": "oklch(0.22 0.04 146.04)",
+ "accent-foreground": "oklch(0.65 0.12 144.31)",
+ "destructive": "oklch(0.62 0.22 26.72)",
+ "destructive-foreground": "oklch(0.95 0.02 80.72)",
+ "border": "oklch(0.22 0.02 74.64)",
+ "input": "oklch(0.22 0.02 74.64)",
+ "ring": "oklch(0.58 0.15 144.17)",
+ "chart-1": "oklch(0.72 0.16 144.21)",
+ "chart-2": "oklch(0.63 0.14 144.18)",
+ "chart-3": "oklch(0.58 0.15 144.17)",
+ "chart-4": "oklch(0.48 0.12 144.31)",
+ "chart-5": "oklch(0.35 0.08 145.73)",
+ "sidebar": "oklch(0.15 0.01 74.42)",
+ "sidebar-foreground": "oklch(0.95 0.02 80.72)",
+ "sidebar-primary": "oklch(0.58 0.15 144.17)",
+ "sidebar-primary-foreground": "oklch(0.09 0.01 80.72)",
+ "sidebar-accent": "oklch(0.22 0.04 146.04)",
+ "sidebar-accent-foreground": "oklch(0.65 0.12 144.31)",
+ "sidebar-border": "oklch(0.22 0.02 74.64)",
+ "sidebar-ring": "oklch(0.58 0.15 144.17)",
+ "radius": "0.5rem"
+ }
+ },
+ "files": [
+ {
+ "path": "src/app/globals.css",
+ "type": "registry:style",
+ "target": "app/globals.css"
+ },
+ {
+ "path": "src/app/colors.css",
+ "type": "registry:style",
+ "target": "app/colors.css"
+ },
+ {
+ "path": "src/app/shadows.css",
+ "type": "registry:style",
+ "target": "app/shadows.css"
+ },
+ {
+ "path": "src/app/borderRadius.css",
+ "type": "registry:style",
+ "target": "app/borderRadius.css"
+ },
+ {
+ "path": "src/app/typography.css",
+ "type": "registry:style",
+ "target": "app/typography.css"
+ },
+ {
+ "path": "src/app/breakpoints.css",
+ "type": "registry:style",
+ "target": "app/breakpoints.css"
+ },
+ {
+ "path": "postcss.config.mjs",
+ "type": "registry:file",
+ "target": "postcss.config.mjs"
+ }
+ ]
+ },
+ {
+ "name": "blok-components",
+ "type": "registry:component",
+ "title": "All Components",
+ "description": "This installs all components from the Blokcn registry",
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/accordion.json",
+ "https://blok-shadcn.vercel.app/r/alert-dialog.json",
+ "https://blok-shadcn.vercel.app/r/alert.json",
+ "https://blok-shadcn.vercel.app/r/aspect-ratio.json",
+ "https://blok-shadcn.vercel.app/r/avatar.json",
+ "https://blok-shadcn.vercel.app/r/badge.json",
+ "https://blok-shadcn.vercel.app/r/breadcrumb.json",
+ "https://blok-shadcn.vercel.app/r/button.json",
+ "https://blok-shadcn.vercel.app/r/calendar.json",
+ "https://blok-shadcn.vercel.app/r/card.json",
+ "https://blok-shadcn.vercel.app/r/carousel.json",
+ "https://blok-shadcn.vercel.app/r/chart.json",
+ "https://blok-shadcn.vercel.app/r/checkbox.json",
+ "https://blok-shadcn.vercel.app/r/collapsible.json",
+ "https://blok-shadcn.vercel.app/r/combobox.json",
+ "https://blok-shadcn.vercel.app/r/command.json",
+ "https://blok-shadcn.vercel.app/r/context-menu.json",
+ "https://blok-shadcn.vercel.app/r/date-picker.json",
+ "https://blok-shadcn.vercel.app/r/dialog.json",
+ "https://blok-shadcn.vercel.app/r/drawer.json",
+ "https://blok-shadcn.vercel.app/r/dropdown-menu.json",
+ "https://blok-shadcn.vercel.app/r/hover-card.json",
+ "https://blok-shadcn.vercel.app/r/input.json",
+ "https://blok-shadcn.vercel.app/r/inputOtp.json",
+ "https://blok-shadcn.vercel.app/r/label.json",
+ "https://blok-shadcn.vercel.app/r/navigation-menu.json",
+ "https://blok-shadcn.vercel.app/r/pagination.json",
+ "https://blok-shadcn.vercel.app/r/popover.json",
+ "https://blok-shadcn.vercel.app/r/progress.json",
+ "https://blok-shadcn.vercel.app/r/radio-group.json",
+ "https://blok-shadcn.vercel.app/r/resizable.json",
+ "https://blok-shadcn.vercel.app/r/scroll-area.json",
+ "https://blok-shadcn.vercel.app/r/select.json",
+ "https://blok-shadcn.vercel.app/r/separator.json",
+ "https://blok-shadcn.vercel.app/r/sheet.json",
+ "https://blok-shadcn.vercel.app/r/skeleton.json",
+ "https://blok-shadcn.vercel.app/r/switch.json",
+ "https://blok-shadcn.vercel.app/r/table.json",
+ "https://blok-shadcn.vercel.app/r/tabs.json",
+ "https://blok-shadcn.vercel.app/r/textarea.json",
+ "https://blok-shadcn.vercel.app/r/toggle.json",
+ "https://blok-shadcn.vercel.app/r/toggle-group.json",
+ "https://blok-shadcn.vercel.app/r/tooltip.json",
+ "https://blok-shadcn.vercel.app/r/input.json"
+ ]
+ },
+ {
+ "name": "blank",
+ "type": "registry:block",
+ "title": "Blank",
+ "description": "A blank application with all brand components and code",
+ "registryDependencies": [
+ "https://registry-starter.vercel.app/r/brand-header.json",
+ "https://registry-starter.vercel.app/r/brand-sidebar.json",
+ "https://registry-starter.vercel.app/r/product-grid.json",
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/layouts/minimal-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/blank-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dashboard",
+ "type": "registry:block",
+ "title": "Dashboard",
+ "description": "A dashboard application with your brand themed components",
+ "registryDependencies": [
+ "https://registry-starter.vercel.app/r/sonner.json",
+ "https://registry-starter.vercel.app/r/brand-header.json",
+ "https://registry-starter.vercel.app/r/brand-sidebar.json",
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/layouts/shell-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/dashboard-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "store",
+ "type": "registry:block",
+ "title": "Store",
+ "description": "A store application with your brand themed components",
+ "registryDependencies": [
+ "https://registry-starter.vercel.app/r/product-grid.json",
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/layouts/minimal-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/store-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "brand-header",
+ "type": "registry:component",
+ "title": "Brand Header",
+ "description": "A styled, simple, reusable header",
+ "registryDependencies": [
+ "button",
+ "input",
+ "avatar",
+ "sidebar",
+ "https://registry-starter.vercel.app/r/sonner.json",
+ "https://registry-starter.vercel.app/r/logo.json",
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/brand-header.tsx",
+ "type": "registry:component"
+ },
+ {
+ "path": "src/layouts/shell-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/blank-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "brand-sidebar",
+ "type": "registry:component",
+ "title": "Brand Sidebar",
+ "description": "A styled, simple, reusable sidebar",
+ "registryDependencies": [
+ "badge",
+ "button",
+ "sidebar",
+ "https://registry-starter.vercel.app/r/sonner.json",
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/brand-sidebar.tsx",
+ "type": "registry:component"
+ },
+ {
+ "path": "src/layouts/shell-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/blank-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "login",
+ "type": "registry:component",
+ "title": "Login",
+ "description": "Username & password login section with customer quote.",
+ "registryDependencies": [
+ "badge",
+ "button",
+ "https://registry-starter.vercel.app/r/theme.json",
+ "https://registry-starter.vercel.app/r/logo.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/login.tsx",
+ "type": "registry:component"
+ },
+ {
+ "path": "src/layouts/minimal-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/blank-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "logo",
+ "type": "registry:component",
+ "title": "Brand Logo",
+ "description": "A styled, simple, reusable logo",
+ "registryDependencies": [
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/logo.tsx",
+ "type": "registry:component"
+ },
+ {
+ "path": "src/layouts/minimal-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/blank-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "hero",
+ "type": "registry:component",
+ "title": "Hero",
+ "description": "Attention-grabbing section for the top of your landing pages.",
+ "registryDependencies": [
+ "badge",
+ "button",
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/hero.tsx",
+ "type": "registry:component"
+ },
+ {
+ "path": "src/layouts/minimal-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/blank-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "promo",
+ "type": "registry:component",
+ "title": "Promo",
+ "description": "Attention-grabbing section to display the current promotional deal.",
+ "registryDependencies": [
+ "button",
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/promo.tsx",
+ "type": "registry:component"
+ },
+ {
+ "path": "src/layouts/minimal-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ },
+ {
+ "path": "src/app/demo/[name]/blocks/blank-page.tsx",
+ "type": "registry:page",
+ "target": "app/page.tsx"
+ }
+ ]
+ },
+ {
+ "name": "product-grid",
+ "type": "registry:component",
+ "title": "Product Grid",
+ "description": "Product grid displaying all products with API to fetch data",
+ "registryDependencies": [
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/product-grid.tsx",
+ "type": "registry:component"
+ },
+ {
+ "path": "src/lib/products.ts",
+ "type": "registry:lib"
+ },
+ {
+ "path": "src/layouts/minimal-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ }
+ ]
+ },
+ {
+ "name": "accordion",
+ "type": "registry:ui",
+ "title": "Accordion",
+ "description": "A vertically stacked set of interactive headings that each reveal a section of content.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-accordion", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/accordion.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/accordion.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert-dialog",
+ "type": "registry:ui",
+ "title": "Alert Dialog",
+ "description": "A modal dialog that interrupts the user with important content and expects a response.",
+ "dependencies": [
+ "@radix-ui/react-alert-dialog",
+ "class-variance-authority"
+ ],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/alert-dialog.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/alert-dialog.tsx"
+ }
+ ]
+ },
+ {
+ "name": "alert",
+ "type": "registry:ui",
+ "title": "Alert",
+ "description": "Displays Alert Variants.",
+ "dependencies": ["@mdi/react", "@mdi/js", "class-variance-authority"],
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/alert.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/alert.tsx"
+ }
+ ]
+ },
+ {
+ "name": "aspect-ratio",
+ "type": "registry:ui",
+ "title": "Aspect Ratio",
+ "description": "Displays content within a desired ratio.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-aspect-ratio"],
+ "files": [
+ {
+ "path": "src/components/ui/aspect-ratio.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/aspect-ratio.tsx"
+ }
+ ]
+ },
+ {
+ "name": "avatar",
+ "type": "registry:ui",
+ "title": "Avatar",
+ "description": "An image element with a fallback for representing the user.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-avatar"],
+ "files": [
+ {
+ "path": "src/components/ui/avatar.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/avatar.tsx"
+ }
+ ]
+ },
+ {
+ "name": "badge",
+ "type": "registry:ui",
+ "title": "Badge",
+ "description": "Displays a small count or status indicator.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-slot", "class-variance-authority"],
+ "files": [
+ {
+ "path": "src/components/ui/badge.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/badge.tsx"
+ }
+ ]
+ },
+ {
+ "name": "breadcrumb",
+ "type": "registry:ui",
+ "title": "Breadcrumb",
+ "description": "Displays the path to the current resource using a hierarchy of links.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-slot", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/breadcrumb.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/breadcrumb.tsx"
+ }
+ ]
+ },
+ {
+ "name": "button",
+ "type": "registry:ui",
+ "title": "Button",
+ "description": "Allows users to take actions with a single click or tap.",
+ "dependencies": ["@radix-ui/react-slot", "class-variance-authority"],
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/button.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/button.tsx"
+ }
+ ]
+ },
+ {
+ "name": "calendar",
+ "type": "registry:ui",
+ "title": "Calendar",
+ "description": "A date field component that allows users to enter and edit date.",
+ "dependencies": ["react-day-picker", "@mdi/react", "@mdi/js"],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/calendar.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/calendar.tsx"
+ }
+ ]
+ },
+ {
+ "name": "card",
+ "type": "registry:ui",
+ "title": "Card",
+ "description": "Containers for displaying content and actions about a single subject.",
+ "dependencies": ["class-variance-authority"],
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/card.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/card.tsx"
+ }
+ ]
+ },
+ {
+ "name": "carousel",
+ "type": "registry:ui",
+ "title": "Carousel",
+ "description": "A carousel component for displaying a series of items in a sliding manner.",
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/button.json",
+ "https://blok-shadcn.vercel.app/r/theme.json"
+ ],
+ "dependencies": ["embla-carousel-react", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/carousel.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/carousel.tsx"
+ }
+ ]
+ },
+ {
+ "name": "chart",
+ "type": "registry:ui",
+ "title": "Chart",
+ "description": "Beautiful charts. Built using Recharts. Copy and paste into your apps.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["recharts@2.15.4"],
+ "files": [
+ {
+ "path": "src/components/ui/chart.tsx",
+ "type": "registry:file",
+ "target": "src/components/ui/chart.tsx"
+ }
+ ]
+ },
+ {
+ "name": "checkbox",
+ "type": "registry:ui",
+ "title": "Checkbox",
+ "description": "Allows users to select multiple items from a list of options.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-checkbox", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/checkbox.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/checkbox.tsx"
+ }
+ ]
+ },
+ {
+ "name": "collapsible",
+ "type": "registry:ui",
+ "title": "Collapsible",
+ "description": "An interactive component which expands/collapses a panel.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-collapsible"],
+ "files": [
+ {
+ "path": "src/components/ui/collapsible.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/collapsible.tsx"
+ }
+ ]
+ },
+ {
+ "name": "combobox",
+ "type": "registry:ui",
+ "title": "Combobox",
+ "description": "Autocomplete input and command palette with a list of suggestions.",
+ "dependencies": ["@mdi/js", "@mdi/react", "lucide-react"],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/avatar.json",
+ "https://blok-shadcn.vercel.app/r/button.json",
+ "https://blok-shadcn.vercel.app/r/command.json",
+ "https://blok-shadcn.vercel.app/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/combobox.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/combobox.tsx"
+ }
+ ]
+ },
+ {
+ "name": "command",
+ "type": "registry:ui",
+ "title": "Command",
+ "description": "Fast, composable, unstyled command menu for React.",
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/dialog.json"
+ ],
+ "dependencies": ["cmdk", "@mdi/js", "@mdi/react"],
+ "files": [
+ {
+ "path": "src/components/ui/command.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/command.tsx"
+ }
+ ]
+ },
+ {
+ "name": "context-menu",
+ "type": "registry:ui",
+ "title": "Context Menu",
+ "description": "Displays a menu to the user — such as a set of actions or functions — triggered by a button.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-context-menu", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/context-menu.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/context-menu.tsx"
+ }
+ ]
+ },
+ {
+ "name": "data-table",
+ "type": "registry:ui",
+ "title": "Data Table",
+ "description": "Powerful table and datagrids built using TanStack Table.",
+ "registryDependencies": [
+ "data-table",
+ "https://registry-starter.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/layouts/minimal-layout.tsx",
+ "type": "registry:file",
+ "target": "app/layout.tsx"
+ }
+ ]
+ },
+ {
+ "name": "date-picker",
+ "type": "registry:ui",
+ "title": "Date Picker",
+ "description": "Displays the path to the current resource using a hierarchy of links.",
+ "dependencies": ["date-fns", "@mdi/js", "@mdi/react", "react-day-picker"],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/calendar.json",
+ "https://blok-shadcn.vercel.app/r/button.json",
+ "https://blok-shadcn.vercel.app/r/popover.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/date-picker.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/date-picker.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dialog",
+ "type": "registry:ui",
+ "title": "Dialog",
+ "description": "A modal dialog that interrupts the user with important content.",
+ "dependencies": ["@mdi/js", "@mdi/react", "@radix-ui/react-dialog"],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/dialog.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/dialog.tsx"
+ }
+ ]
+ },
+ {
+ "name": "drawer",
+ "type": "registry:ui",
+ "title": "Drawer",
+ "description": "A modal dialog that interrupts the user with important content.",
+ "dependencies": ["vaul"],
+ "registryDependencies": [
+ "http://blok-shadcn.vercel.app/r/button.json",
+ "http://blok-shadcn.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/drawer.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/drawer.tsx"
+ }
+ ]
+ },
+ {
+ "name": "dropdown-menu",
+ "type": "registry:ui",
+ "title": "Dropdown",
+ "description": "Displays a menu to the user triggered by a button.",
+ "dependencies": [
+ "@mdi/react",
+ "@mdi/js",
+ "@radix-ui/react-dropdown-menu"
+ ],
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/dropdown-menu.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/dropdown-menu.tsx"
+ }
+ ]
+ },
+ {
+ "name": "form",
+ "type": "registry:ui",
+ "title": "Form",
+ "description": "A form component for user input.",
+ "registryDependencies": [
+ "http://blok-shadcn.vercel.app/r/input.json",
+ "http://blok-shadcn.vercel.app/r/button.json",
+ "http://blok-shadcn.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/tanstack-form.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/tanstack-form.tsx"
+ },
+ {
+ "path": "src/components/ui/form.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/form.tsx"
+ }
+ ]
+ },
+ {
+ "name": "input",
+ "type": "registry:ui",
+ "title": "Input",
+ "description": "Displays a form input field or a component that looks like an input field.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/input.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/input.tsx"
+ }
+ ]
+ },
+ {
+ "name": "inputOtp",
+ "type": "registry:ui",
+ "title": "Input OTP",
+ "description": "A one-time password input component for verification codes.",
+ "dependencies": ["@mdi/js", "@mdi/react", "input-otp"],
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/inputOtp.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/inputOtp.tsx"
+ }
+ ]
+ },
+ {
+ "name": "label",
+ "type": "registry:ui",
+ "title": "Label",
+ "description": "Renders an accessible label associated with controls.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-label"],
+ "files": [
+ {
+ "path": "src/components/ui/label.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/label.tsx"
+ }
+ ]
+ },
+ {
+ "name": "navigation-menu",
+ "type": "registry:ui",
+ "title": "Navigation Menu",
+ "description": "A collection of links for navigating websites.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": [
+ "@mdi/react",
+ "@mdi/js",
+ "@radix-ui/react-navigation-menu",
+ "class-variance-authority"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/navigation-menu.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/navigation-menu.tsx"
+ }
+ ]
+ },
+ {
+ "name": "pagination",
+ "type": "registry:ui",
+ "title": "Pagination",
+ "description": "Pagination with page navigation, next and previous links.",
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/button.json"
+ ],
+ "dependencies": ["@radix-ui/react-popover", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/pagination.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/pagination.tsx"
+ }
+ ]
+ },
+ {
+ "name": "progress",
+ "type": "registry:ui",
+ "title": "Progress",
+ "description": "Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-progress"],
+ "files": [
+ {
+ "path": "src/components/ui/progress.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/progress.tsx"
+ }
+ ]
+ },
+ {
+ "name": "radio-group",
+ "type": "registry:ui",
+ "title": "Radio Group",
+ "description": "A set of checkable buttons—known as radio buttons—where no more than one of the buttons can be checked at a time.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-radio-group", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/radio-group.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/radio-group.tsx"
+ }
+ ]
+ },
+ {
+ "name": "resizable",
+ "type": "registry:ui",
+ "title": "Resizable",
+ "description": "Accessible resizable panel groups and layouts with keyboard support.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["react-resizable-panels", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/resizable.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/resizable.tsx"
+ }
+ ]
+ },
+ {
+ "name": "scroll-area",
+ "type": "registry:ui",
+ "title": "Scroll Area",
+ "description": "Augments native scroll functionality for custom, cross-browser styling.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-scroll-area"],
+ "files": [
+ {
+ "path": "src/components/ui/scroll-area.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/scroll-area.tsx"
+ }
+ ]
+ },
+ {
+ "name": "select",
+ "type": "registry:ui",
+ "title": "Select",
+ "description": "Displays a list of options for the user to pick from—triggered by a button.",
+ "dependencies": ["@radix-ui/react-select", "@mdi/react", "@mdi/js"],
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/select.tsx",
+ "type": "registry:ui"
+ }
+ ]
+ },
+ {
+ "name": "separator",
+ "type": "registry:ui",
+ "title": "Separator",
+ "description": "Visually or semantically separates content.",
+ "dependencies": ["@radix-ui/react-separator"],
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/separator.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/separator.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sheet",
+ "type": "registry:ui",
+ "title": "Sheet",
+ "description": "Visually or semantically separates content.",
+ "dependencies": ["@radix-ui/react-dialog", "@mdi/react", "@mdi/js"],
+ "registryDependencies": [
+ "http://blok-shadcn.vercel.app/r/button.json",
+ "http://blok-shadcn.vercel.app/r/theme.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/sheet.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/sheet.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sidebar",
+ "type": "registry:ui",
+ "title": "Sidebar",
+ "description": "A styled, simple, reusable sidebar",
+ "dependencies": [
+ "@mdi/react",
+ "@mdi/js",
+ "class-variance-authority",
+ "@radix-ui/react-slot"
+ ],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/tooltip.json",
+ "https://blok-shadcn.vercel.app/r/skeleton.json",
+ "https://blok-shadcn.vercel.app/r/separator.json",
+ "https://blok-shadcn.vercel.app/r/input.json",
+ "https://blok-shadcn.vercel.app/r/button.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/sidebar.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/sidebar.tsx"
+ }
+ ]
+ },
+ {
+ "name": "skeleton",
+ "type": "registry:ui",
+ "title": "Skeleton",
+ "description": "Use to show a placeholder while content is loading.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/skeleton.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/skeleton.tsx"
+ }
+ ]
+ },
+ {
+ "name": "slider",
+ "type": "registry:ui",
+ "title": "Slider",
+ "description": "An input where the user selects a value from within a given range.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-slider"],
+ "files": [
+ {
+ "path": "src/components/ui/slider.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/slider.tsx"
+ }
+ ]
+ },
+ {
+ "name": "sonner",
+ "type": "registry:ui",
+ "title": "Sonner",
+ "description": "An opinionated toast component for React.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["sonner", "next-themes", "@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/sonner.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/sonner.tsx"
+ }
+ ]
+ },
+ {
+ "name": "spinner",
+ "type": "registry:ui",
+ "title": "Spinner",
+ "description": "An opinionated toast component for React.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/spinner.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/spinner.tsx"
+ }
+ ]
+ },
+ {
+ "name": "switch",
+ "type": "registry:ui",
+ "title": "Switch",
+ "description": "A control that allows the user to toggle between checked and not checked.",
+ "dependencies": ["@radix-ui/react-switch", "class-variance-authority"],
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/label.json"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/switch.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/switch.tsx"
+ }
+ ]
+ },
+ {
+ "name": "table",
+ "type": "registry:ui",
+ "title": "Table",
+ "description": "A responsive table component.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/table.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/table.tsx"
+ }
+ ]
+ },
+ {
+ "name": "tabs",
+ "type": "registry:ui",
+ "title": "Tabs",
+ "description": "A set of layered sections of content known as tab panels that are displayed one at a time.",
+ "dependencies": ["@radix-ui/react-tabs", "class-variance-authority"],
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/tabs.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/tabs.tsx"
+ }
+ ]
+ },
+ {
+ "name": "textarea",
+ "type": "registry:ui",
+ "title": "Textarea",
+ "description": "A textarea component for multi-line text input with various states and configurations.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "files": [
+ {
+ "path": "src/components/ui/textarea.tsx",
+ "type": "registry:ui"
+ }
+ ]
+ },
+ {
+ "name": "toggle-group",
+ "type": "registry:ui",
+ "title": "Toggle Group",
+ "description": "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.",
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/toggle.json"
+ ],
+ "dependencies": [
+ "@radix-ui/react-toggle-group",
+ "@mdi/react",
+ "@mdi/js",
+ "class-variance-authority"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/toggle-group.tsx",
+ "type": "registry:ui"
+ }
+ ]
+ },
+ {
+ "name": "tooltip",
+ "type": "registry:ui",
+ "title": "Tooltip",
+ "description": "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-tooltip"],
+ "files": [
+ {
+ "path": "src/components/ui/tooltip.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/tooltip.tsx"
+ }
+ ]
+ },
+ {
+ "name": "toggle",
+ "type": "registry:ui",
+ "title": "Toggle",
+ "description": "A two-state button that can be either on or off.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": [
+ "@radix-ui/react-toggle",
+ "@mdi/react",
+ "@mdi/js",
+ "class-variance-authority"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/toggle.tsx",
+ "type": "registry:ui"
+ }
+ ]
+ },
+ {
+ "name": "topbar",
+ "type": "registry:ui",
+ "title": "Topbar",
+ "description": "A topbar application with your brand themed components",
+ "registryDependencies": [
+ "https://blok-shadcn.vercel.app/r/theme.json",
+ "https://blok-shadcn.vercel.app/r/avatar.json",
+ "https://blok-shadcn.vercel.app/r/button.json",
+ "https://blok-shadcn.vercel.app/r/navigation-menu.json"
+ ],
+ "dependencies": ["@mdi/react", "@mdi/js"],
+ "files": [
+ {
+ "path": "src/components/ui/top-bar.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/top-bar.tsx"
+ }
+ ]
+ },
+ {
+ "name": "popover",
+ "type": "registry:ui",
+ "title": "Popover",
+ "description": "Displays rich content in a portal, triggered by a button.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-popover"],
+ "files": [
+ {
+ "path": "src/components/ui/popover.tsx",
+ "type": "registry:ui"
+ }
+ ]
+ },
+ {
+ "name": "hover-card",
+ "type": "registry:ui",
+ "title": "Hover Card",
+ "description": "For sighted users to preview content available behind a link.",
+ "registryDependencies": ["https://blok-shadcn.vercel.app/r/theme.json"],
+ "dependencies": ["@radix-ui/react-hover-card"],
+ "files": [
+ {
+ "path": "src/components/ui/hover-card.tsx",
+ "type": "registry:ui",
+ "target": "src/components/ui/hover-card.tsx"
+ }
+ ]
+ }
+ ]
+}
diff --git a/registry.json b/registry.json
deleted file mode 100644
index f7d9e553..00000000
--- a/registry.json
+++ /dev/null
@@ -1,804 +0,0 @@
-{
- "$schema": "https://ui.shadcn.com/schema/registry.json",
- "name": "Registry Starter",
- "homepage": "https://registry-starter.vercel.app",
- "items": [
- {
- "name": "theme",
- "type": "registry:theme",
- "title": "Nature Theme",
- "description": "A nature theme and styles with greens and browns using Tailwind and shadcn/ui variable names",
- "cssVars": {
- "light": {
- "background": "oklch(0.97 0.01 80.72)",
- "foreground": "oklch(0.3 0.04 30.2)",
- "card": "oklch(0.97 0.01 80.72)",
- "card-foreground": "oklch(0.3 0.04 30.2)",
- "popover": "oklch(0.97 0.01 80.72)",
- "popover-foreground": "oklch(0.3 0.04 30.2)",
- "primary": "oklch(0.52 0.13 144.17)",
- "primary-foreground": "oklch(1.0 0 0)",
- "secondary": "oklch(0.96 0.02 147.64)",
- "secondary-foreground": "oklch(0.43 0.12 144.31)",
- "muted": "oklch(0.94 0.01 74.42)",
- "muted-foreground": "oklch(0.45 0.05 39.21)",
- "accent": "oklch(0.9 0.05 146.04)",
- "accent-foreground": "oklch(0.43 0.12 144.31)",
- "destructive": "oklch(0.54 0.19 26.72)",
- "destructive-foreground": "oklch(1.0 0 0)",
- "border": "oklch(0.88 0.02 74.64)",
- "input": "oklch(0.88 0.02 74.64)",
- "ring": "oklch(0.52 0.13 144.17)",
- "chart-1": "oklch(0.67 0.16 144.21)",
- "chart-2": "oklch(0.58 0.14 144.18)",
- "chart-3": "oklch(0.52 0.13 144.17)",
- "chart-4": "oklch(0.43 0.12 144.31)",
- "chart-5": "oklch(0.22 0.05 145.73)",
- "sidebar": "oklch(0.94 0.01 74.42)",
- "sidebar-foreground": "oklch(0.3 0.04 30.2)",
- "sidebar-primary": "oklch(0.52 0.13 144.17)",
- "sidebar-primary-foreground": "oklch(1.0 0 0)",
- "sidebar-accent": "oklch(0.9 0.05 146.04)",
- "sidebar-accent-foreground": "oklch(0.43 0.12 144.31)",
- "sidebar-border": "oklch(0.88 0.02 74.64)",
- "sidebar-ring": "oklch(0.52 0.13 144.17)",
- "radius": "0.5rem"
- },
- "dark": {
- "background": "oklch(0.15 0.01 74.42)",
- "foreground": "oklch(0.95 0.02 80.72)",
- "card": "oklch(0.12 0.01 80.72)",
- "card-foreground": "oklch(0.95 0.02 80.72)",
- "popover": "oklch(0.12 0.01 80.72)",
- "popover-foreground": "oklch(0.95 0.02 80.72)",
- "primary": "oklch(0.58 0.15 144.17)",
- "primary-foreground": "oklch(0.09 0.01 80.72)",
- "secondary": "oklch(0.15 0.02 147.64)",
- "secondary-foreground": "oklch(0.65 0.12 144.31)",
- "muted": "oklch(0.18 0.01 74.42)",
- "muted-foreground": "oklch(0.65 0.03 74.42)",
- "accent": "oklch(0.22 0.04 146.04)",
- "accent-foreground": "oklch(0.65 0.12 144.31)",
- "destructive": "oklch(0.62 0.22 26.72)",
- "destructive-foreground": "oklch(0.95 0.02 80.72)",
- "border": "oklch(0.22 0.02 74.64)",
- "input": "oklch(0.22 0.02 74.64)",
- "ring": "oklch(0.58 0.15 144.17)",
- "chart-1": "oklch(0.72 0.16 144.21)",
- "chart-2": "oklch(0.63 0.14 144.18)",
- "chart-3": "oklch(0.58 0.15 144.17)",
- "chart-4": "oklch(0.48 0.12 144.31)",
- "chart-5": "oklch(0.35 0.08 145.73)",
- "sidebar": "oklch(0.15 0.01 74.42)",
- "sidebar-foreground": "oklch(0.95 0.02 80.72)",
- "sidebar-primary": "oklch(0.58 0.15 144.17)",
- "sidebar-primary-foreground": "oklch(0.09 0.01 80.72)",
- "sidebar-accent": "oklch(0.22 0.04 146.04)",
- "sidebar-accent-foreground": "oklch(0.65 0.12 144.31)",
- "sidebar-border": "oklch(0.22 0.02 74.64)",
- "sidebar-ring": "oklch(0.58 0.15 144.17)",
- "radius": "0.5rem"
- }
- },
- "files": [
- {
- "path": "src/app/globals.css",
- "type": "registry:style",
- "target": "app/globals.css"
- },
- {
- "path": "postcss.config.mjs",
- "type": "registry:file",
- "target": "postcss.config.mjs"
- }
- ]
- },
- {
- "name": "blank",
- "type": "registry:block",
- "title": "Blank",
- "description": "A blank application with all brand components and code",
- "registryDependencies": [
- "https://registry-starter.vercel.app/r/brand-header.json",
- "https://registry-starter.vercel.app/r/brand-sidebar.json",
- "https://registry-starter.vercel.app/r/product-grid.json",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/blank-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "dashboard",
- "type": "registry:block",
- "title": "Dashboard",
- "description": "A dashboard application with your brand themed components",
- "registryDependencies": [
- "https://registry-starter.vercel.app/r/sonner.json",
- "https://registry-starter.vercel.app/r/brand-header.json",
- "https://registry-starter.vercel.app/r/brand-sidebar.json",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/shell-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/dashboard-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "store",
- "type": "registry:block",
- "title": "Store",
- "description": "A store application with your brand themed components",
- "registryDependencies": [
- "https://registry-starter.vercel.app/r/product-grid.json",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/store-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "brand-header",
- "type": "registry:component",
- "title": "Brand Header",
- "description": "A styled, simple, reusable header",
- "registryDependencies": [
- "button",
- "input",
- "avatar",
- "sidebar",
- "https://registry-starter.vercel.app/r/sonner.json",
- "https://registry-starter.vercel.app/r/logo.json",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/components/brand-header.tsx",
- "type": "registry:component"
- },
- {
- "path": "src/layouts/shell-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/blank-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "brand-sidebar",
- "type": "registry:component",
- "title": "Brand Sidebar",
- "description": "A styled, simple, reusable sidebar",
- "registryDependencies": [
- "badge",
- "button",
- "sidebar",
- "https://registry-starter.vercel.app/r/sonner.json",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/components/brand-sidebar.tsx",
- "type": "registry:component"
- },
- {
- "path": "src/layouts/shell-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/blank-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "login",
- "type": "registry:component",
- "title": "Login",
- "description": "Username & password login section with customer quote.",
- "registryDependencies": [
- "badge",
- "button",
- "https://registry-starter.vercel.app/r/theme.json",
- "https://registry-starter.vercel.app/r/logo.json"
- ],
- "files": [
- {
- "path": "src/components/login.tsx",
- "type": "registry:component"
- },
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/blank-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "logo",
- "type": "registry:component",
- "title": "Brand Logo",
- "description": "A styled, simple, reusable logo",
- "registryDependencies": [
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/components/logo.tsx",
- "type": "registry:component"
- },
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/blank-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "hero",
- "type": "registry:component",
- "title": "Hero",
- "description": "Attention-grabbing section for the top of your landing pages.",
- "registryDependencies": [
- "badge",
- "button",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/components/hero.tsx",
- "type": "registry:component"
- },
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/blank-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "promo",
- "type": "registry:component",
- "title": "Promo",
- "description": "Attention-grabbing section to display the current promotional deal.",
- "registryDependencies": [
- "button",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/components/promo.tsx",
- "type": "registry:component"
- },
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/app/demo/[name]/blocks/blank-page.tsx",
- "type": "registry:page",
- "target": "app/page.tsx"
- }
- ]
- },
- {
- "name": "product-grid",
- "type": "registry:component",
- "title": "Product Grid",
- "description": "Product grid displaying all products with API to fetch data",
- "registryDependencies": [
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/components/product-grid.tsx",
- "type": "registry:component"
- },
- {
- "path": "src/lib/products.ts",
- "type": "registry:lib"
- },
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "accordion",
- "type": "registry:ui",
- "title": "Accordion",
- "description": "A vertically stacked set of interactive headings that each reveal a section of content.",
- "registryDependencies": [
- "accordion",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "alert",
- "type": "registry:ui",
- "title": "Alert",
- "description": "Displays a callout for user attention.",
- "registryDependencies": [
- "alert",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "avatar",
- "type": "registry:ui",
- "title": "Avatar",
- "description": "An image element with a fallback for representing the user.",
- "registryDependencies": [
- "avatar",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "badge",
- "type": "registry:ui",
- "title": "Badge",
- "description": "Displays a small count or status indicator.",
- "registryDependencies": [
- "badge",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "breadcrumb",
- "type": "registry:ui",
- "title": "Breadcrumb",
- "description": "Displays the path to the current resource using a hierarchy of links.",
- "registryDependencies": [
- "breadcrumb",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "button",
- "type": "registry:ui",
- "title": "Button",
- "description": "Allows users to take actions with a single click or tap.",
- "registryDependencies": [
- "button",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "calendar",
- "type": "registry:ui",
- "title": "Calendar",
- "description": "A date field component that allows users to enter and edit date.",
- "registryDependencies": [
- "calendar",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "card",
- "type": "registry:ui",
- "title": "Card",
- "description": "Containers for displaying content and actions about a single subject.",
- "registryDependencies": [
- "card",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "chart",
- "type": "registry:ui",
- "title": "Chart",
- "description": "Beautiful charts. Built using Recharts. Copy and paste into your apps.",
- "registryDependencies": [
- "chart",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "checkbox",
- "type": "registry:ui",
- "title": "Checkbox",
- "description": "Allows users to select multiple items from a list of options.",
- "registryDependencies": [
- "checkbox",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "data-table",
- "type": "registry:ui",
- "title": "Data Table",
- "description": "Powerful table and datagrids built using TanStack Table.",
- "registryDependencies": [
- "data-table",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "date-picker",
- "type": "registry:ui",
- "title": "Date Picker",
- "description": "Displays the path to the current resource using a hierarchy of links.",
- "registryDependencies": [
- "date-picker",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "dialog",
- "type": "registry:ui",
- "title": "Dialog",
- "description": "A modal dialog that interrupts the user with important content.",
- "registryDependencies": [
- "dialog",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "dropdown-menu",
- "type": "registry:ui",
- "title": "Dropdown",
- "description": "Displays a menu to the user triggered by a button.",
- "registryDependencies": [
- "dropdown-menu",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "input",
- "type": "registry:ui",
- "title": "Input",
- "description": "Displays a form input field or a component that looks like an input field.",
- "registryDependencies": [
- "input",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "menu-bar",
- "type": "registry:ui",
- "title": "Menu Bar",
- "description": "A visually persistent menu common in desktop applications that provides quick access to a consistent set of commands.",
- "registryDependencies": [
- "menu-bar",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "select",
- "type": "registry:ui",
- "title": "Select",
- "description": "Displays a list of options for the user to pick from—triggered by a button.",
- "registryDependencies": [
- "select",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "separator",
- "type": "registry:ui",
- "title": "Separator",
- "description": "Visually or semantically separates content.",
- "registryDependencies": [
- "separator",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "skeleton",
- "type": "registry:ui",
- "title": "Skeleton",
- "description": "Use to show a placeholder while content is loading.",
- "registryDependencies": [
- "skeleton",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "slider",
- "type": "registry:ui",
- "title": "Slider",
- "description": "An input where the user selects a value from within a given range.",
- "registryDependencies": [
- "slider",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "sonner",
- "type": "registry:ui",
- "title": "Sonner",
- "description": "An opinionated toast component for React.",
- "registryDependencies": [
- "sonner",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- },
- {
- "path": "src/components/ui/sonner.tsx",
- "type": "registry:file",
- "target": "components/ui/sonner.tsx"
- }
- ]
- },
- {
- "name": "switch",
- "type": "registry:ui",
- "title": "Switch",
- "description": "A control that allows the user to toggle between checked and not checked.",
- "registryDependencies": [
- "switch",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "table",
- "type": "registry:ui",
- "title": "Table",
- "description": "A responsive table component.",
- "registryDependencies": [
- "table",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "tabs",
- "type": "registry:ui",
- "title": "Tabs",
- "description": "A set of layered sections of content—known as tab panels—that are displayed one at a time.",
- "registryDependencies": [
- "tabs",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "toggle-group",
- "type": "registry:ui",
- "title": "Toggle Group",
- "description": "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.",
- "registryDependencies": [
- "toggle-group",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- },
- {
- "name": "tooltip",
- "type": "registry:ui",
- "title": "Tooltip",
- "description": "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.",
- "registryDependencies": [
- "tooltip",
- "https://registry-starter.vercel.app/r/theme.json"
- ],
- "files": [
- {
- "path": "src/layouts/minimal-layout.tsx",
- "type": "registry:file",
- "target": "app/layout.tsx"
- }
- ]
- }
- ]
-}
diff --git a/src/app/(registry)/layout.tsx b/src/app/(registry)/layout.tsx
index a7479d56..5446f24d 100644
--- a/src/app/(registry)/layout.tsx
+++ b/src/app/(registry)/layout.tsx
@@ -1,4 +1,4 @@
-import { SidebarProvider } from "@/components/ui/sidebar";
+import { SidebarProvider } from "@/components/registry/docsite-sidebar";
import type { ReactNode } from "react";
import {
@@ -16,7 +16,7 @@ export default function RegistryLayout({
- Distribute your design system tokens, custom components, hooks, - pages, and other files to any React project. +
+ Blok is Sitecore's product design system: the UI framework and style + guide we use to build great apps. It's publicly available, so that + anyone can easily build software in the Sitecore product design + language.
-
- Integrate this registry with AI IDEs using Model Context Protocol
- (MCP) using the following configuration. This utilizes this
- Registry's theme tokens and CSS variables with the Shadcn CLI. To
- ensure this works, double check that the{" "}
-
-
- style:theme
-
- {" "}
- contains the same colors as your{" "}
- tokens.css
+
+ Start by adding all Blok components from the registry to your + codebase.
-- This registry serves as a central repository for all UI components - and blocks used in your applications. It helps maintain consistency - across your products and speeds up development by providing - ready-to-use components. Each component and block is documented with - examples. You can browse components by category, search for specific - components, and view examples of how they are used in different - contexts. -
-- To get begin, select a{" "} - - starter - {" "} - and click the Open in v0 button. - You can also open individual components or blocks in v0 if you want - a smaller or more specific starting point. +
+ The command above will add the components to your project. You can + then import component onto pages like this.
+(example used: button):
+
+ Integrate this registry with AI IDEs using Model Context Protocol
+ (MCP) using the following configuration. This utilizes this
+ Registry's theme tokens and CSS variables with the Shadcn CLI. To
+ ensure this works, double check that the{" "}
+
+
+ style:theme
+
+ {" "}
+ contains the same colors as your{" "}
+ tokens.css
+
- --{className.slice(3)}
-
- | Example | +Token | ++ Value (rem) + | ++ Value (px) + | +Notes | +
|---|---|---|---|---|
| + + | +{key} | ++ + {value} + + | ++ + {pxValue}px + + | ++ + {NOTES[key] ?? ""} + + | +
Window width: {windowWidth}px
+ +Active breakpoint:
+ {Object.entries(filteredBreakpoints).map(([key]) => { + const isActive = currentBreakpointName === key; + + return ( +| Token | +Device | ++ Value (rem) + | ++ Value (px) + | +
|---|---|---|---|
| + {key} + | ++ {deviceMap[key] || "N/A"} + {/* Display device name, or 'N/A' if not mapped */} + | ++ + {value} + + | ++ + {pxValue}px + + | +
| Name | +Color | +Value | +
|---|---|---|
| {key} | ++ + | ++ + {value} + + | +
| Example | +Token | +Value | +Notes | +
|---|---|---|---|
| + + | +{key} | ++ + {value} + + | + ++ + {NOTES[key] ?? ""} + + | +
| Token | +Value | +PX | +Example | +
|---|---|---|---|
| {key} | ++ + {value} + + | ++ + {parseFloat(value) * 16}px + + | +
+ text-{key} + |
+
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. -
-
- --{className}
-
- - A comprehensive overview of all color tokens used in the design system -
-- The core font families that define the primary typography. -
-- The core colors that define the primary theme and overall look of the - interface. -
-- Colors used for secondary elements and accents throughout the - interface. -
-- Colors used for specific UI components like cards, popovers, and muted - elements. -
-- Colors used for borders, inputs, and other utility elements. -
-- Colors used to indicate different states and provide feedback to - users. -
-- Colors used for data visualization and charts. -
-+ A comprehensive overview of all color tokens used in the design + system +
- Colors specific to the sidebar and navigation components. -
-16:9
+This is a default card with flat style and no elevation.
+This card demonstrates the none elevation variant with outline style.
+This card demonstrates the xs elevation variant with outline style.
+This card demonstrates the sm elevation variant with outline style.
+This card demonstrates the base elevation variant with outline style.
+This card demonstrates the md elevation variant with outline style.
+This card demonstrates the lg elevation variant with outline style.
+This card demonstrates the flat style variant with base elevation.
+This card demonstrates the outline style variant with base elevation.
+This card demonstrates the filled style variant with base elevation.
+This is the content of a card!
+This card demonstrates the sm padding variant with outline style and md elevation.
This card demonstrates the md padding variant with outline style and md elevation.
+This card demonstrates the lg padding variant with outline style and md elevation.
++ By clicking this checkbox, you agree to the terms and conditions. +
++ Press{" "} + + ⌘J + +
+