mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-06-22 20:25:44 +00:00
Compare commits
74 Commits
shadcn@4.3
...
shadcn@4.7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1137b24a97 | ||
|
|
bb251e2ab6 | ||
|
|
28b3e5f360 | ||
|
|
309d95017f | ||
|
|
eb42ae25fd | ||
|
|
3977fb9ace | ||
|
|
7865621397 | ||
|
|
b07070cd07 | ||
|
|
ad68a44717 | ||
|
|
56161142f1 | ||
|
|
c2e1a5793f | ||
|
|
ea6086cbcc | ||
|
|
68a69d81f7 | ||
|
|
55fd4dc71b | ||
|
|
6dea65ebcb | ||
|
|
ba10089b8d | ||
|
|
8a814f926b | ||
|
|
c236d0c009 | ||
|
|
fd0e0c369b | ||
|
|
07d14abde1 | ||
|
|
8dd51c49f8 | ||
|
|
c20e0cc596 | ||
|
|
0126502236 | ||
|
|
94074e4bb2 | ||
|
|
eb6e783fb3 | ||
|
|
f785bfab44 | ||
|
|
cc20c8a794 | ||
|
|
05948dce8e | ||
|
|
5d23df4e35 | ||
|
|
abbdd32953 | ||
|
|
3f14ffa632 | ||
|
|
5927f6de80 | ||
|
|
39eb34104b | ||
|
|
7cbc7e8d53 | ||
|
|
d0ac558ce2 | ||
|
|
bc0c46a93c | ||
|
|
a64575d8a4 | ||
|
|
5d0cd7819b | ||
|
|
13478b26b6 | ||
|
|
aee8a71679 | ||
|
|
4507f1c794 | ||
|
|
81cd2266aa | ||
|
|
cf756b1b55 | ||
|
|
5e61f9c4a4 | ||
|
|
c4def9305f | ||
|
|
e456fed9d3 | ||
|
|
b95cd29508 | ||
|
|
11cbc32840 | ||
|
|
01539fb4d7 | ||
|
|
e47ee89dcf | ||
|
|
2f5c32c0b1 | ||
|
|
fbfe9f34bb | ||
|
|
d55e059fda | ||
|
|
9c572ab778 | ||
|
|
91403eeb63 | ||
|
|
3411d53856 | ||
|
|
efa2b38d07 | ||
|
|
d00605c5fb | ||
|
|
4bdeea4c63 | ||
|
|
f632f5d798 | ||
|
|
7d6d489f83 | ||
|
|
e8b1be1f22 | ||
|
|
d987955893 | ||
|
|
7b5435ac0b | ||
|
|
f289497e35 | ||
|
|
0d266984e6 | ||
|
|
cf92d4f8f2 | ||
|
|
b7cfc364ac | ||
|
|
de385d04fc | ||
|
|
eeb5d22fe5 | ||
|
|
a757e80242 | ||
|
|
945298ed2d | ||
|
|
f9b216af77 | ||
|
|
6525227036 |
41
.cursor-plugin/plugin.json
Normal file
41
.cursor-plugin/plugin.json
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"name": "shadcn",
|
||||||
|
"displayName": "shadcn/ui",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "UI component and design system framework. Search registries, install components as source code, and audit your project.",
|
||||||
|
"author": {
|
||||||
|
"name": "shadcn"
|
||||||
|
},
|
||||||
|
"homepage": "https://ui.shadcn.com",
|
||||||
|
"repository": "https://github.com/shadcn-ui/ui",
|
||||||
|
"license": "MIT",
|
||||||
|
"logo": "skills/shadcn/assets/shadcn.png",
|
||||||
|
"keywords": [
|
||||||
|
"shadcn",
|
||||||
|
"shadcn-ui",
|
||||||
|
"ui",
|
||||||
|
"components",
|
||||||
|
"tailwind",
|
||||||
|
"tailwindcss",
|
||||||
|
"radix",
|
||||||
|
"react",
|
||||||
|
"design-system",
|
||||||
|
"registry",
|
||||||
|
"mcp"
|
||||||
|
],
|
||||||
|
"category": "developer-tools",
|
||||||
|
"tags": [
|
||||||
|
"ui",
|
||||||
|
"components",
|
||||||
|
"design-system",
|
||||||
|
"react",
|
||||||
|
"tailwind"
|
||||||
|
],
|
||||||
|
"skills": "./skills/",
|
||||||
|
"mcpServers": {
|
||||||
|
"shadcn": {
|
||||||
|
"command": "npx",
|
||||||
|
"args": ["shadcn@latest", "mcp"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
9
.github/workflows/prerelease-comment.yml
vendored
9
.github/workflows/prerelease-comment.yml
vendored
@@ -3,7 +3,7 @@ name: Write Beta Release comment
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_run:
|
workflow_run:
|
||||||
workflows: ["Release - Beta"]
|
workflows: ["Release"]
|
||||||
types:
|
types:
|
||||||
- completed
|
- completed
|
||||||
|
|
||||||
@@ -11,12 +11,13 @@ jobs:
|
|||||||
comment:
|
comment:
|
||||||
if: |
|
if: |
|
||||||
github.repository_owner == 'shadcn-ui' &&
|
github.repository_owner == 'shadcn-ui' &&
|
||||||
${{ github.event.workflow_run.conclusion == 'success' }}
|
github.event.workflow_run.event == 'pull_request' &&
|
||||||
|
github.event.workflow_run.conclusion == 'success'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Write comment to the PR
|
name: Write comment to the PR
|
||||||
steps:
|
steps:
|
||||||
- name: "Comment on PR"
|
- name: "Comment on PR"
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
@@ -53,7 +54,7 @@ jobs:
|
|||||||
```
|
```
|
||||||
|
|
||||||
- name: "Remove the autorelease label once published"
|
- name: "Remove the autorelease label once published"
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
|
|||||||
64
.github/workflows/prerelease.yml
vendored
64
.github/workflows/prerelease.yml
vendored
@@ -1,64 +0,0 @@
|
|||||||
# Adapted from create-t3-app.
|
|
||||||
|
|
||||||
name: Release - Beta
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [labeled]
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prerelease:
|
|
||||||
if: |
|
|
||||||
github.repository_owner == 'shadcn-ui' &&
|
|
||||||
contains(github.event.pull_request.labels.*.name, '🚀 autorelease')
|
|
||||||
name: Build & Publish a beta release to NPM
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
environment: Preview
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repo
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Use PNPM
|
|
||||||
uses: pnpm/action-setup@v4
|
|
||||||
with:
|
|
||||||
version: 9.0.6
|
|
||||||
|
|
||||||
- name: Use Node.js 20
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
registry-url: "https://registry.npmjs.org"
|
|
||||||
cache: "pnpm"
|
|
||||||
|
|
||||||
- name: Update npm for OIDC support
|
|
||||||
run: npm install -g npm@latest
|
|
||||||
|
|
||||||
- name: Install NPM Dependencies
|
|
||||||
run: pnpm install
|
|
||||||
|
|
||||||
- name: Modify package.json version
|
|
||||||
run: node .github/version-script-beta.js
|
|
||||||
|
|
||||||
- name: Publish Beta to NPM
|
|
||||||
run: pnpm pub:beta
|
|
||||||
|
|
||||||
- name: get-npm-version
|
|
||||||
id: package-version
|
|
||||||
uses: martinbeentjes/npm-get-version-action@main
|
|
||||||
with:
|
|
||||||
path: packages/shadcn
|
|
||||||
|
|
||||||
- name: Upload packaged artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: npm-package-shadcn@${{ steps.package-version.outputs.current-version }}-pr-${{ github.event.number }} # encode the PR number into the artifact name
|
|
||||||
path: packages/shadcn/dist/index.js
|
|
||||||
84
.github/workflows/release.yml
vendored
84
.github/workflows/release.yml
vendored
@@ -2,24 +2,81 @@
|
|||||||
|
|
||||||
name: Release
|
name: Release
|
||||||
|
|
||||||
|
run-name: ${{ github.event_name == 'pull_request' && format('Release Beta - PR {0}', github.event.number) || 'Release Stable' }}
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [labeled]
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
prerelease:
|
||||||
if: ${{ github.repository_owner == 'shadcn-ui' }}
|
if: ${{ github.event_name == 'pull_request' && github.repository_owner == 'shadcn-ui' && contains(github.event.pull_request.labels.*.name, '🚀 autorelease') }}
|
||||||
name: Create a PR for release workflow
|
name: Publish Beta to NPM
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
environment: Preview
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Use PNPM
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: 9.0.6
|
||||||
|
|
||||||
|
- name: Use Node.js 20
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
registry-url: "https://registry.npmjs.org"
|
||||||
|
cache: "pnpm"
|
||||||
|
|
||||||
|
- name: Update npm for OIDC support
|
||||||
|
run: npm install -g npm@latest
|
||||||
|
|
||||||
|
- name: Install NPM Dependencies
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: Modify package.json version
|
||||||
|
run: node .github/version-script-beta.js
|
||||||
|
|
||||||
|
- name: Publish Beta to NPM
|
||||||
|
run: pnpm pub:beta
|
||||||
|
|
||||||
|
- name: get-npm-version
|
||||||
|
id: package-version
|
||||||
|
uses: martinbeentjes/npm-get-version-action@main
|
||||||
|
with:
|
||||||
|
path: packages/shadcn
|
||||||
|
|
||||||
|
- name: Upload packaged artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: npm-package-shadcn@${{ steps.package-version.outputs.current-version }}-pr-${{ github.event.number }} # encode the PR number into the artifact name
|
||||||
|
path: packages/shadcn/dist/index.js
|
||||||
|
|
||||||
|
release:
|
||||||
|
if: ${{ github.event_name == 'push' && github.repository_owner == 'shadcn-ui' }}
|
||||||
|
name: Create Version PR or Publish Stable Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -47,10 +104,19 @@ jobs:
|
|||||||
- name: Build the package
|
- name: Build the package
|
||||||
run: pnpm shadcn:build
|
run: pnpm shadcn:build
|
||||||
|
|
||||||
|
- name: Import GPG key
|
||||||
|
uses: crazy-max/ghaction-import-gpg@v6
|
||||||
|
with:
|
||||||
|
gpg_private_key: ${{ secrets.RELEASE_GPG_PRIVATE_KEY }}
|
||||||
|
git_user_signingkey: true
|
||||||
|
git_commit_gpgsign: true
|
||||||
|
git_tag_gpgsign: true
|
||||||
|
|
||||||
- name: Create Version PR or Publish to NPM
|
- name: Create Version PR or Publish to NPM
|
||||||
id: changesets
|
id: changesets
|
||||||
uses: changesets/action@v1
|
uses: changesets/action@v1
|
||||||
with:
|
with:
|
||||||
|
setupGitUser: false
|
||||||
commit: "chore(release): version packages"
|
commit: "chore(release): version packages"
|
||||||
title: "chore(release): version packages"
|
title: "chore(release): version packages"
|
||||||
version: node .github/changeset-version.js
|
version: node .github/changeset-version.js
|
||||||
|
|||||||
75
.github/workflows/signed-commits.yml
vendored
Normal file
75
.github/workflows/signed-commits.yml
vendored
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
name: Signed commits
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- reopened
|
||||||
|
- synchronize
|
||||||
|
- ready_for_review
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
signed-commits:
|
||||||
|
if: github.repository_owner == 'shadcn-ui'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Signed commits
|
||||||
|
steps:
|
||||||
|
- name: Check PR commits
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const body = "Can you sign the commits please? See https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits. Thank you."
|
||||||
|
|
||||||
|
const { owner, repo } = context.repo
|
||||||
|
const pullNumber = context.payload.pull_request.number
|
||||||
|
|
||||||
|
const commits = await github.paginate(github.rest.pulls.listCommits, {
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
pull_number: pullNumber,
|
||||||
|
per_page: 100,
|
||||||
|
})
|
||||||
|
|
||||||
|
const unsignedCommits = commits.filter((commit) => {
|
||||||
|
return commit.commit.verification?.reason === "unsigned"
|
||||||
|
})
|
||||||
|
|
||||||
|
const comments = await github.paginate(github.rest.issues.listComments, {
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: pullNumber,
|
||||||
|
per_page: 100,
|
||||||
|
})
|
||||||
|
|
||||||
|
const existingComments = comments.filter((comment) => {
|
||||||
|
return comment.user.type === "Bot" && comment.body.trim() === body
|
||||||
|
})
|
||||||
|
|
||||||
|
if (unsignedCommits.length > 0) {
|
||||||
|
core.info(`Found ${unsignedCommits.length} unsigned commits.`)
|
||||||
|
|
||||||
|
if (existingComments.length === 0) {
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: pullNumber,
|
||||||
|
body,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
core.info("All commits are signed.")
|
||||||
|
|
||||||
|
for (const comment of existingComments) {
|
||||||
|
await github.rest.issues.deleteComment({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
comment_id: comment.id,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import * as React from "react"
|
|||||||
import {
|
import {
|
||||||
buildRegistryTheme,
|
buildRegistryTheme,
|
||||||
DEFAULT_CONFIG,
|
DEFAULT_CONFIG,
|
||||||
|
POINTER_CURSOR_SELECTOR,
|
||||||
type DesignSystemConfig,
|
type DesignSystemConfig,
|
||||||
} from "@/registry/config"
|
} from "@/registry/config"
|
||||||
import { useIframeMessageListener } from "@/app/(app)/create/hooks/use-iframe-sync"
|
import { useIframeMessageListener } from "@/app/(app)/create/hooks/use-iframe-sync"
|
||||||
@@ -16,6 +17,12 @@ import {
|
|||||||
|
|
||||||
const THEME_STYLE_ELEMENT_ID = "design-system-theme-vars"
|
const THEME_STYLE_ELEMENT_ID = "design-system-theme-vars"
|
||||||
const MANAGED_BODY_CLASS_PREFIXES = ["style-", "base-color-"] as const
|
const MANAGED_BODY_CLASS_PREFIXES = ["style-", "base-color-"] as const
|
||||||
|
const POINTER_CURSOR_CSS = `@layer base {
|
||||||
|
${POINTER_CURSOR_SELECTOR} {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
type RegistryThemeCssVars = NonNullable<
|
type RegistryThemeCssVars = NonNullable<
|
||||||
ReturnType<typeof buildRegistryTheme>["cssVars"]
|
ReturnType<typeof buildRegistryTheme>["cssVars"]
|
||||||
@@ -44,14 +51,17 @@ function buildCssRule(selector: string, cssVars?: Record<string, string>) {
|
|||||||
return `${selector} {\n${declarations}\n}\n`
|
return `${selector} {\n${declarations}\n}\n`
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildThemeCssText(cssVars: RegistryThemeCssVars) {
|
function buildThemeCssText(cssVars: RegistryThemeCssVars, pointer: boolean) {
|
||||||
return [
|
return [
|
||||||
buildCssRule(":root", {
|
buildCssRule(":root", {
|
||||||
...(cssVars.theme ?? {}),
|
...(cssVars.theme ?? {}),
|
||||||
...(cssVars.light ?? {}),
|
...(cssVars.light ?? {}),
|
||||||
}),
|
}),
|
||||||
buildCssRule(".dark", cssVars.dark),
|
buildCssRule(".dark", cssVars.dark),
|
||||||
].join("\n")
|
pointer ? POINTER_CURSOR_CSS : "",
|
||||||
|
]
|
||||||
|
.filter(Boolean)
|
||||||
|
.join("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
export function DesignSystemProvider({
|
export function DesignSystemProvider({
|
||||||
@@ -73,6 +83,7 @@ export function DesignSystemProvider({
|
|||||||
chartColor,
|
chartColor,
|
||||||
menuAccent,
|
menuAccent,
|
||||||
menuColor,
|
menuColor,
|
||||||
|
pointer,
|
||||||
radius,
|
radius,
|
||||||
} = searchParams
|
} = searchParams
|
||||||
const effectiveRadius = style === "lyra" ? "none" : radius
|
const effectiveRadius = style === "lyra" ? "none" : radius
|
||||||
@@ -208,8 +219,8 @@ export function DesignSystemProvider({
|
|||||||
document.head.appendChild(styleElement)
|
document.head.appendChild(styleElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
styleElement.textContent = buildThemeCssText(registryTheme.cssVars)
|
styleElement.textContent = buildThemeCssText(registryTheme.cssVars, pointer)
|
||||||
}, [registryTheme])
|
}, [registryTheme, pointer])
|
||||||
|
|
||||||
// Handle menu color inversion by adding/removing dark class to elements with cn-menu-target.
|
// Handle menu color inversion by adding/removing dark class to elements with cn-menu-target.
|
||||||
// useLayoutEffect to apply classes synchronously before paint, avoiding flash.
|
// useLayoutEffect to apply classes synchronously before paint, avoiding flash.
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import * as React from "react"
|
import * as React from "react"
|
||||||
import { Copy01Icon, Globe02Icon, Tick02Icon } from "@hugeicons/core-free-icons"
|
import {
|
||||||
|
Copy01Icon,
|
||||||
|
Globe02Icon,
|
||||||
|
HandPointingRight04Icon,
|
||||||
|
Tick02Icon,
|
||||||
|
} from "@hugeicons/core-free-icons"
|
||||||
import { HugeiconsIcon } from "@hugeicons/react"
|
import { HugeiconsIcon } from "@hugeicons/react"
|
||||||
|
|
||||||
import { cn } from "@/lib/utils"
|
import { cn } from "@/lib/utils"
|
||||||
@@ -85,7 +90,8 @@ export function ProjectForm({
|
|||||||
const templateFlag = ` --template ${framework}`
|
const templateFlag = ` --template ${framework}`
|
||||||
const monorepoFlag = isMonorepo ? " --monorepo" : ""
|
const monorepoFlag = isMonorepo ? " --monorepo" : ""
|
||||||
const rtlFlag = params.rtl ? " --rtl" : ""
|
const rtlFlag = params.rtl ? " --rtl" : ""
|
||||||
const flags = `${presetFlag}${baseFlag}${templateFlag}${monorepoFlag}${rtlFlag}`
|
const pointerFlag = params.pointer ? " --pointer" : ""
|
||||||
|
const flags = `${presetFlag}${baseFlag}${templateFlag}${monorepoFlag}${rtlFlag}${pointerFlag}`
|
||||||
|
|
||||||
return IS_LOCAL_DEV
|
return IS_LOCAL_DEV
|
||||||
? {
|
? {
|
||||||
@@ -100,7 +106,14 @@ export function ProjectForm({
|
|||||||
yarn: `yarn dlx shadcn${SHADCN_VERSION} init${flags}`,
|
yarn: `yarn dlx shadcn${SHADCN_VERSION} init${flags}`,
|
||||||
bun: `bunx --bun shadcn${SHADCN_VERSION} init${flags}`,
|
bun: `bunx --bun shadcn${SHADCN_VERSION} init${flags}`,
|
||||||
}
|
}
|
||||||
}, [framework, isMonorepo, params.base, params.rtl, presetCode])
|
}, [
|
||||||
|
framework,
|
||||||
|
isMonorepo,
|
||||||
|
params.base,
|
||||||
|
params.pointer,
|
||||||
|
params.rtl,
|
||||||
|
presetCode,
|
||||||
|
])
|
||||||
|
|
||||||
const command = commands[packageManager]
|
const command = commands[packageManager]
|
||||||
|
|
||||||
@@ -154,6 +167,23 @@ export function ProjectForm({
|
|||||||
<FieldLegend variant="label" className="sr-only">
|
<FieldLegend variant="label" className="sr-only">
|
||||||
Options
|
Options
|
||||||
</FieldLegend>
|
</FieldLegend>
|
||||||
|
<Field orientation="horizontal">
|
||||||
|
<FieldLabel htmlFor="pointer">
|
||||||
|
<HugeiconsIcon
|
||||||
|
icon={HandPointingRight04Icon}
|
||||||
|
className="size-4 -rotate-90"
|
||||||
|
/>
|
||||||
|
Use pointer on buttons
|
||||||
|
</FieldLabel>
|
||||||
|
<Switch
|
||||||
|
id="pointer"
|
||||||
|
checked={params.pointer}
|
||||||
|
onCheckedChange={(checked) =>
|
||||||
|
setParams({ pointer: checked === true })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
<FieldSeparator className="-mx-6" />
|
||||||
<Field
|
<Field
|
||||||
orientation="horizontal"
|
orientation="horizontal"
|
||||||
data-disabled={hasMonorepo ? undefined : "true"}
|
data-disabled={hasMonorepo ? undefined : "true"}
|
||||||
|
|||||||
@@ -16,8 +16,17 @@ export function ShareButton() {
|
|||||||
|
|
||||||
const shareUrl = React.useMemo(() => {
|
const shareUrl = React.useMemo(() => {
|
||||||
const origin = process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000"
|
const origin = process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000"
|
||||||
return `${origin}/create?preset=${presetCode}&item=${params.item}`
|
const searchParams = new URLSearchParams({
|
||||||
}, [presetCode, params.item])
|
preset: presetCode,
|
||||||
|
item: params.item,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (params.pointer) {
|
||||||
|
searchParams.set("pointer", "true")
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${origin}/create?${searchParams.toString()}`
|
||||||
|
}, [params.item, params.pointer, presetCode])
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
if (hasCopied) {
|
if (hasCopied) {
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ const designSystemSearchParams = {
|
|||||||
"laravel",
|
"laravel",
|
||||||
] as const).withDefault("next"),
|
] as const).withDefault("next"),
|
||||||
rtl: parseAsBoolean.withDefault(false),
|
rtl: parseAsBoolean.withDefault(false),
|
||||||
|
pointer: parseAsBoolean.withDefault(false),
|
||||||
size: parseAsInteger.withDefault(100),
|
size: parseAsInteger.withDefault(100),
|
||||||
custom: parseAsBoolean.withDefault(false),
|
custom: parseAsBoolean.withDefault(false),
|
||||||
}
|
}
|
||||||
@@ -126,6 +127,7 @@ const NON_DESIGN_SYSTEM_KEYS = [
|
|||||||
"preset",
|
"preset",
|
||||||
"template",
|
"template",
|
||||||
"rtl",
|
"rtl",
|
||||||
|
"pointer",
|
||||||
"size",
|
"size",
|
||||||
"custom",
|
"custom",
|
||||||
] as const
|
] as const
|
||||||
@@ -224,6 +226,7 @@ function resolvePresetParams(
|
|||||||
preset: rawParams.preset,
|
preset: rawParams.preset,
|
||||||
template: rawParams.template,
|
template: rawParams.template,
|
||||||
rtl: rawParams.rtl,
|
rtl: rawParams.rtl,
|
||||||
|
pointer: rawParams.pointer,
|
||||||
size: rawParams.size,
|
size: rawParams.size,
|
||||||
custom: rawParams.custom,
|
custom: rawParams.custom,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { Button } from "@/styles/radix-nova/ui/button"
|
|||||||
export const revalidate = false
|
export const revalidate = false
|
||||||
export const dynamic = "force-static"
|
export const dynamic = "force-static"
|
||||||
|
|
||||||
const NUMBER_OF_LATEST_PAGES = 2
|
const NUMBER_OF_LATEST_PAGES = 5
|
||||||
|
|
||||||
export function generateMetadata() {
|
export function generateMetadata() {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -3,6 +3,51 @@ import { describe, expect, it } from "vitest"
|
|||||||
import { parseDesignSystemConfig } from "./parse-config"
|
import { parseDesignSystemConfig } from "./parse-config"
|
||||||
|
|
||||||
describe("parseDesignSystemConfig", () => {
|
describe("parseDesignSystemConfig", () => {
|
||||||
|
it("defaults pointer to false when omitted", () => {
|
||||||
|
const result = parseDesignSystemConfig(
|
||||||
|
new URLSearchParams(
|
||||||
|
"base=base&style=sera&baseColor=taupe&theme=taupe&iconLibrary=lucide&font=noto-sans&rtl=false&menuAccent=subtle&menuColor=default&radius=default&fontHeading=playfair-display&template=vite&track=1"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(result.success).toBe(true)
|
||||||
|
if (!result.success) {
|
||||||
|
throw new Error(result.error)
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(result.data.pointer).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("parses pointer=true", () => {
|
||||||
|
const result = parseDesignSystemConfig(
|
||||||
|
new URLSearchParams(
|
||||||
|
"base=base&style=sera&baseColor=taupe&theme=taupe&iconLibrary=lucide&font=noto-sans&rtl=false&pointer=true&menuAccent=subtle&menuColor=default&radius=default&fontHeading=playfair-display&template=vite&track=1"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(result.success).toBe(true)
|
||||||
|
if (!result.success) {
|
||||||
|
throw new Error(result.error)
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(result.data.pointer).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("defaults missing chartColor from the selected theme", () => {
|
||||||
|
const result = parseDesignSystemConfig(
|
||||||
|
new URLSearchParams(
|
||||||
|
"base=base&style=sera&baseColor=taupe&theme=taupe&iconLibrary=lucide&font=noto-sans&rtl=false&menuAccent=subtle&menuColor=default&radius=default&fontHeading=playfair-display&template=vite&track=1"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(result.success).toBe(true)
|
||||||
|
if (!result.success) {
|
||||||
|
throw new Error(result.error)
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(result.data.chartColor).toBe("taupe")
|
||||||
|
})
|
||||||
|
|
||||||
it("honors explicit fontHeading and chartColor overrides when a preset is present", () => {
|
it("honors explicit fontHeading and chartColor overrides when a preset is present", () => {
|
||||||
const result = parseDesignSystemConfig(
|
const result = parseDesignSystemConfig(
|
||||||
new URLSearchParams(
|
new URLSearchParams(
|
||||||
@@ -18,4 +63,17 @@ describe("parseDesignSystemConfig", () => {
|
|||||||
expect(result.data.fontHeading).toBe("playfair-display")
|
expect(result.data.fontHeading).toBe("playfair-display")
|
||||||
expect(result.data.chartColor).toBe("emerald")
|
expect(result.data.chartColor).toBe("emerald")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("keeps pointer outside preset decoding", () => {
|
||||||
|
const result = parseDesignSystemConfig(
|
||||||
|
new URLSearchParams("preset=a0&pointer=true")
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(result.success).toBe(true)
|
||||||
|
if (!result.success) {
|
||||||
|
throw new Error(result.error)
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(result.data.pointer).toBe(true)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ export function parseDesignSystemConfig(searchParams: URLSearchParams) {
|
|||||||
base: searchParams.get("base") ?? "radix",
|
base: searchParams.get("base") ?? "radix",
|
||||||
template: searchParams.get("template") ?? undefined,
|
template: searchParams.get("template") ?? undefined,
|
||||||
rtl: searchParams.get("rtl") === "true",
|
rtl: searchParams.get("rtl") === "true",
|
||||||
|
pointer: searchParams.get("pointer") === "true",
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
configInput = {
|
configInput = {
|
||||||
@@ -39,6 +40,7 @@ export function parseDesignSystemConfig(searchParams: URLSearchParams) {
|
|||||||
radius: searchParams.get("radius"),
|
radius: searchParams.get("radius"),
|
||||||
template: searchParams.get("template") ?? undefined,
|
template: searchParams.get("template") ?? undefined,
|
||||||
rtl: searchParams.get("rtl") === "true",
|
rtl: searchParams.get("rtl") === "true",
|
||||||
|
pointer: searchParams.get("pointer") === "true",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
74
apps/v4/app/(create)/init/route.test.ts
Normal file
74
apps/v4/app/(create)/init/route.test.ts
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
import { describe, expect, it } from "vitest"
|
||||||
|
|
||||||
|
import {
|
||||||
|
buildRegistryBase,
|
||||||
|
DEFAULT_CONFIG,
|
||||||
|
POINTER_CURSOR_SELECTOR,
|
||||||
|
} from "@/registry/config"
|
||||||
|
|
||||||
|
import { GET } from "./route"
|
||||||
|
|
||||||
|
function createRequest(search = "") {
|
||||||
|
const searchParams = new URLSearchParams(
|
||||||
|
Object.entries(DEFAULT_CONFIG).map(([key, value]) => [key, String(value)])
|
||||||
|
)
|
||||||
|
const url = new URL(`http://localhost:4000/init${search}`)
|
||||||
|
|
||||||
|
for (const [key, value] of url.searchParams) {
|
||||||
|
searchParams.set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
nextUrl: new URL(`http://localhost:4000/init?${searchParams}`),
|
||||||
|
} as Parameters<typeof GET>[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("GET /init", () => {
|
||||||
|
it("returns the full registry base when only is omitted", async () => {
|
||||||
|
const response = await GET(createRequest())
|
||||||
|
const json = await response.json()
|
||||||
|
|
||||||
|
expect(response.status).toBe(200)
|
||||||
|
expect(json).toEqual(buildRegistryBase(DEFAULT_CONFIG))
|
||||||
|
expect(json.css["@layer base"][POINTER_CURSOR_SELECTOR]).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns pointer cursor css when pointer is enabled", async () => {
|
||||||
|
const response = await GET(createRequest("?pointer=true"))
|
||||||
|
const json = await response.json()
|
||||||
|
|
||||||
|
expect(response.status).toBe(200)
|
||||||
|
expect(json.css["@layer base"][POINTER_CURSOR_SELECTOR]).toEqual({
|
||||||
|
cursor: "pointer",
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns a sparse registry base when only is provided", async () => {
|
||||||
|
const response = await GET(createRequest("?only=theme"))
|
||||||
|
const json = await response.json()
|
||||||
|
|
||||||
|
expect(response.status).toBe(200)
|
||||||
|
expect(json.type).toBe("registry:base")
|
||||||
|
expect(json.config).toEqual({
|
||||||
|
menuColor: "default",
|
||||||
|
menuAccent: "subtle",
|
||||||
|
tailwind: {
|
||||||
|
baseColor: "neutral",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(json.cssVars.light).toBeDefined()
|
||||||
|
expect(json.cssVars.light.radius).toBe("0.625rem")
|
||||||
|
expect(json.dependencies).toBeUndefined()
|
||||||
|
expect(json.registryDependencies).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("rejects unsupported only values", async () => {
|
||||||
|
const response = await GET(createRequest("?only=icon"))
|
||||||
|
const json = await response.json()
|
||||||
|
|
||||||
|
expect(response.status).toBe(400)
|
||||||
|
expect(json.error).toBe(
|
||||||
|
"Invalid only value. Use one or more of: theme, font"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -3,7 +3,11 @@ import { track } from "@vercel/analytics/server"
|
|||||||
import { isPresetCode } from "shadcn/preset"
|
import { isPresetCode } from "shadcn/preset"
|
||||||
import { registryItemSchema } from "shadcn/schema"
|
import { registryItemSchema } from "shadcn/schema"
|
||||||
|
|
||||||
import { buildRegistryBase } from "@/registry/config"
|
import {
|
||||||
|
buildPartialRegistryBase,
|
||||||
|
buildRegistryBase,
|
||||||
|
parseRegistryBaseParts,
|
||||||
|
} from "@/registry/config"
|
||||||
import { getPresetCode } from "@/app/(app)/create/lib/preset-code"
|
import { getPresetCode } from "@/app/(app)/create/lib/preset-code"
|
||||||
import { parseDesignSystemConfig } from "@/app/(create)/init/parse-config"
|
import { parseDesignSystemConfig } from "@/app/(create)/init/parse-config"
|
||||||
|
|
||||||
@@ -16,13 +20,20 @@ export async function GET(request: NextRequest) {
|
|||||||
return NextResponse.json({ error: result.error }, { status: 400 })
|
return NextResponse.json({ error: result.error }, { status: 400 })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const onlyResult = parseRegistryBaseParts(searchParams.get("only"))
|
||||||
|
if (!onlyResult.success) {
|
||||||
|
return NextResponse.json({ error: onlyResult.error }, { status: 400 })
|
||||||
|
}
|
||||||
|
|
||||||
const rawPreset = searchParams.get("preset")
|
const rawPreset = searchParams.get("preset")
|
||||||
const presetCode =
|
const presetCode =
|
||||||
rawPreset && isPresetCode(rawPreset)
|
rawPreset && isPresetCode(rawPreset)
|
||||||
? rawPreset
|
? rawPreset
|
||||||
: getPresetCode(result.data)
|
: getPresetCode(result.data)
|
||||||
|
|
||||||
const registryBase = buildRegistryBase(result.data)
|
const registryBase = onlyResult.parts
|
||||||
|
? buildPartialRegistryBase(result.data, onlyResult.parts)
|
||||||
|
: buildRegistryBase(result.data)
|
||||||
const parseResult = registryItemSchema.safeParse(registryBase)
|
const parseResult = registryItemSchema.safeParse(registryBase)
|
||||||
|
|
||||||
if (!parseResult.success) {
|
if (!parseResult.success) {
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import { Badge } from "@/registry/new-york-v4/ui/badge"
|
|||||||
export function Announcement() {
|
export function Announcement() {
|
||||||
return (
|
return (
|
||||||
<Badge asChild variant="secondary" className="bg-muted">
|
<Badge asChild variant="secondary" className="bg-muted">
|
||||||
<Link href="/sera">
|
<Link href="/docs/changelog">
|
||||||
Introducing Sera <ArrowRightIcon />
|
New preset commands <ArrowRightIcon />
|
||||||
</Link>
|
</Link>
|
||||||
</Badge>
|
</Badge>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ Options:
|
|||||||
--no-monorepo skip the monorepo prompt.
|
--no-monorepo skip the monorepo prompt.
|
||||||
--rtl enable RTL support.
|
--rtl enable RTL support.
|
||||||
--no-rtl disable RTL support.
|
--no-rtl disable RTL support.
|
||||||
|
--pointer enable pointer cursor for buttons.
|
||||||
|
--no-pointer disable pointer cursor for buttons.
|
||||||
--reinstall re-install existing UI components.
|
--reinstall re-install existing UI components.
|
||||||
--no-reinstall do not re-install existing UI components.
|
--no-reinstall do not re-install existing UI components.
|
||||||
-h, --help display help for command
|
-h, --help display help for command
|
||||||
@@ -90,9 +92,17 @@ Options:
|
|||||||
Use the `apply` command to apply a preset to an existing project.
|
Use the `apply` command to apply a preset to an existing project.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx shadcn@latest apply --preset a2r6bw
|
npx shadcn@latest apply a2r6bw
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can apply only the theme or fonts from a preset without reinstalling UI components:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest apply a2r6bw --only theme
|
||||||
|
```
|
||||||
|
|
||||||
|
Supported values for `--only` are `theme` and `font`.
|
||||||
|
|
||||||
**Options**
|
**Options**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -105,6 +115,7 @@ Arguments:
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
--preset <preset> preset configuration to apply
|
--preset <preset> preset configuration to apply
|
||||||
|
--only [parts] apply only parts of a preset: theme, font
|
||||||
-y, --yes skip confirmation prompt. (default: false)
|
-y, --yes skip confirmation prompt. (default: false)
|
||||||
-c, --cwd <cwd> the working directory. defaults to the current directory.
|
-c, --cwd <cwd> the working directory. defaults to the current directory.
|
||||||
-s, --silent mute output. (default: false)
|
-s, --silent mute output. (default: false)
|
||||||
@@ -113,6 +124,110 @@ Options:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## preset
|
||||||
|
|
||||||
|
Use the `preset` command to inspect preset codes and resolve the preset for an existing project.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset decode a2r6bw
|
||||||
|
```
|
||||||
|
|
||||||
|
### preset decode
|
||||||
|
|
||||||
|
Use `preset decode` to decode a preset code.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset decode a2r6bw
|
||||||
|
```
|
||||||
|
|
||||||
|
**Options**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Usage: shadcn preset decode [options] <code>
|
||||||
|
|
||||||
|
decode a preset code
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
code the preset code to decode
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--json output as JSON. (default: false)
|
||||||
|
-h, --help display help for command
|
||||||
|
```
|
||||||
|
|
||||||
|
### preset resolve
|
||||||
|
|
||||||
|
Use `preset resolve` to resolve the preset from the current project.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset resolve
|
||||||
|
```
|
||||||
|
|
||||||
|
The `preset info` command is an alias for `preset resolve`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset info
|
||||||
|
```
|
||||||
|
|
||||||
|
**Options**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Usage: shadcn preset resolve|info [options]
|
||||||
|
|
||||||
|
resolve a preset from your project
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-c, --cwd <cwd> the working directory. defaults to the current directory.
|
||||||
|
--json output as JSON. (default: false)
|
||||||
|
-h, --help display help for command
|
||||||
|
```
|
||||||
|
|
||||||
|
### preset url
|
||||||
|
|
||||||
|
Use `preset url` to print the create URL for a preset code.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset url a2r6bw
|
||||||
|
```
|
||||||
|
|
||||||
|
**Options**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Usage: shadcn preset url [options] <code>
|
||||||
|
|
||||||
|
get the create URL for a preset code
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
code the preset code
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help display help for command
|
||||||
|
```
|
||||||
|
|
||||||
|
### preset open
|
||||||
|
|
||||||
|
Use `preset open` to open a preset code in the browser.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset open a2r6bw
|
||||||
|
```
|
||||||
|
|
||||||
|
**Options**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Usage: shadcn preset open [options] <code>
|
||||||
|
|
||||||
|
open a preset code in the browser
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
code the preset code
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help display help for command
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## view
|
## view
|
||||||
|
|
||||||
Use the `view` command to view items from the registry before installing them.
|
Use the `view` command to view items from the registry before installing them.
|
||||||
|
|||||||
@@ -140,15 +140,91 @@ Setting this option to `false` allows components to be added as JavaScript with
|
|||||||
|
|
||||||
## aliases
|
## aliases
|
||||||
|
|
||||||
The CLI uses these values and the `paths` config from your `tsconfig.json` or `jsconfig.json` file to place generated components in the correct location.
|
The CLI uses these values to place generated components in the correct location and rewrite imports.
|
||||||
|
|
||||||
Path aliases have to be set up in your `tsconfig.json` or `jsconfig.json` file.
|
You can back these aliases with either:
|
||||||
|
|
||||||
|
1. `compilerOptions.paths` in your `tsconfig.json` or `jsconfig.json`
|
||||||
|
2. `package.json#imports` with TypeScript package import resolution enabled
|
||||||
|
|
||||||
|
The aliases in `components.json` are still required when using the CLI. They tell the CLI which import roots map to `components`, `ui`, `lib`, `hooks`, and `utils`.
|
||||||
|
|
||||||
<Callout className="mt-6">
|
<Callout className="mt-6">
|
||||||
**Important:** If you're using the `src` directory, make sure it is included
|
**Important:** If you're using package imports, enable
|
||||||
under `paths` in your `tsconfig.json` or `jsconfig.json` file.
|
`resolvePackageJsonImports` and use `moduleResolution: "bundler"` in your
|
||||||
|
`tsconfig.json`. If you're using `paths`, make sure your aliases include the
|
||||||
|
`src` directory when applicable.
|
||||||
</Callout>
|
</Callout>
|
||||||
|
|
||||||
|
### Using `tsconfig` or `jsconfig` paths
|
||||||
|
|
||||||
|
```json title="tsconfig.json"
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using `package.json#imports`
|
||||||
|
|
||||||
|
Recommended setup for a single-package app:
|
||||||
|
|
||||||
|
```json title="package.json"
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json title="tsconfig.json"
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"resolvePackageJsonImports": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json title="components.json"
|
||||||
|
{
|
||||||
|
"aliases": {
|
||||||
|
"components": "#components",
|
||||||
|
"ui": "#components/ui",
|
||||||
|
"lib": "#lib",
|
||||||
|
"hooks": "#hooks",
|
||||||
|
"utils": "#lib/utils"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The aliases in `components.json` still tell the CLI where to place
|
||||||
|
`components`, `ui`, `lib`, `hooks`, and `utils`. `package.json#imports`
|
||||||
|
provides the runtime and TypeScript resolution for those `#...` specifiers.
|
||||||
|
|
||||||
|
The matched `imports` target also controls whether generated `#...` imports keep
|
||||||
|
file extensions:
|
||||||
|
|
||||||
|
- `"#components/*": "./src/components/*"` preserves source extensions and can
|
||||||
|
generate imports like
|
||||||
|
`#components/button.tsx`
|
||||||
|
- `"#components/*": "./src/components/*.tsx"` strips source extensions and
|
||||||
|
generates imports like
|
||||||
|
`#components/button`
|
||||||
|
|
||||||
|
For monorepos, see the <Link href="/docs/monorepo">monorepo docs</Link>. Local
|
||||||
|
workspace aliases can use `package.json#imports`, while shared workspace
|
||||||
|
imports such as `@workspace/ui/components` are resolved from the target
|
||||||
|
package's `exports`.
|
||||||
|
|
||||||
|
For framework-specific setup, see the [package imports guide](/docs/package-imports).
|
||||||
|
|
||||||
### aliases.utils
|
### aliases.utils
|
||||||
|
|
||||||
Import alias for your utility functions.
|
Import alias for your utility functions.
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ description: Every component recreated in Figma. With customizable props, typogr
|
|||||||
|
|
||||||
## Free
|
## Free
|
||||||
|
|
||||||
- [Obra shadcn/ui](https://www.figma.com/community/file/1514746685758799870/obra-shadcn-ui) by [Obra Studio](https://obra.studio/) - Carefully crafted shadcn/ui kit, MIT licensed, maintained by team of designers, with free design to code plugin
|
|
||||||
- [shadcn/ui components](https://www.figma.com/community/file/1342715840824755935) by [Sitsiilia Bergmann](https://x.com/sitsiilia) - A well-structured component library aligned with the shadcn component system, regularly maintained.
|
- [shadcn/ui components](https://www.figma.com/community/file/1342715840824755935) by [Sitsiilia Bergmann](https://x.com/sitsiilia) - A well-structured component library aligned with the shadcn component system, regularly maintained.
|
||||||
- [shadcn/ui design system](https://www.figma.com/community/file/1203061493325953101) by [Pietro Schirano](https://twitter.com/skirano) - A design companion for shadcn/ui. Each component was painstakingly crafted to perfectly match the code implementation.
|
- [shadcn/ui design system](https://www.figma.com/community/file/1203061493325953101) by [Pietro Schirano](https://twitter.com/skirano) - A design companion for shadcn/ui. Each component was painstakingly crafted to perfectly match the code implementation.
|
||||||
|
|
||||||
@@ -20,3 +19,4 @@ description: Every component recreated in Figma. With customizable props, typogr
|
|||||||
- [shadcncraft Design System](https://shadcncraft.com) - Production-ready shadcn/ui kit with Pro React blocks and 1:1 Figma alignment. Design and ship faster with tweakcn theming, AI-assisted workflows, and Figma to React export, built for real product UIs.
|
- [shadcncraft Design System](https://shadcncraft.com) - Production-ready shadcn/ui kit with Pro React blocks and 1:1 Figma alignment. Design and ship faster with tweakcn theming, AI-assisted workflows, and Figma to React export, built for real product UIs.
|
||||||
- [shadcn/studio UI Kit](https://shadcnstudio.com/figma) - Accelerate design & development with a shadcn/ui compatible Figma kit with updated components, 550+ blocks, 10+ templates, 20+ themes, and an AI tool that converts designs into shadcn/ui code.
|
- [shadcn/studio UI Kit](https://shadcnstudio.com/figma) - Accelerate design & development with a shadcn/ui compatible Figma kit with updated components, 550+ blocks, 10+ templates, 20+ themes, and an AI tool that converts designs into shadcn/ui code.
|
||||||
- [Shadcnblocks.com](https://www.shadcnblocks.com) - A Premium Shadcn Figma UI Kit with components, 500+ pro blocks, shadcn theme variables, light/dark mode and Figma MCP ready.
|
- [Shadcnblocks.com](https://www.shadcnblocks.com) - A Premium Shadcn Figma UI Kit with components, 500+ pro blocks, shadcn theme variables, light/dark mode and Figma MCP ready.
|
||||||
|
- [Obra shadcn/ui Pro](https://shadcn.obra.studio/products/obra-shadcn-ui-pro) by [Obra Studio](https://obra.studio/) - Focused on designers who need to get work done — the best designer experience for shadcn/ui within Figma. variable consistency with shadcn, plus custom components, Pro blocks, and a design-to-code plugin.
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"index",
|
"index",
|
||||||
"[Installation](/docs/installation)",
|
"[Installation](/docs/installation)",
|
||||||
"components-json",
|
"components-json",
|
||||||
|
"package-imports",
|
||||||
"theming",
|
"theming",
|
||||||
"[Dark Mode](/docs/dark-mode)",
|
"[Dark Mode](/docs/dark-mode)",
|
||||||
"[RTL](/docs/rtl)",
|
"[RTL](/docs/rtl)",
|
||||||
|
|||||||
@@ -164,3 +164,91 @@ turbo.json
|
|||||||
4. **For Tailwind CSS v4, leave the `tailwind` config empty in the `components.json` file.**
|
4. **For Tailwind CSS v4, leave the `tailwind` config empty in the `components.json` file.**
|
||||||
|
|
||||||
By following these requirements, the CLI will be able to install ui components, blocks, libs and hooks to the correct paths and handle imports for you.
|
By following these requirements, the CLI will be able to install ui components, blocks, libs and hooks to the correct paths and handle imports for you.
|
||||||
|
|
||||||
|
<Callout className="mt-6">
|
||||||
|
`package.json#imports` works well for package-local aliases inside a
|
||||||
|
workspace, for example inside `packages/ui`. For shared workspace imports such
|
||||||
|
as `@workspace/ui/components`, keep explicit aliases in `components.json`. The
|
||||||
|
CLI uses those aliases to route files across workspace boundaries.
|
||||||
|
</Callout>
|
||||||
|
|
||||||
|
## Using `package.json#imports`
|
||||||
|
|
||||||
|
For a monorepo that uses package imports and does not rely on
|
||||||
|
`tsconfig.json` `paths`, use:
|
||||||
|
|
||||||
|
- local `#...` aliases for files inside each workspace
|
||||||
|
- workspace package `exports` for shared imports such as
|
||||||
|
`@workspace/ui/components`
|
||||||
|
|
||||||
|
For example, an app workspace can use local package imports:
|
||||||
|
|
||||||
|
```json showLineNumbers title="apps/web/package.json"
|
||||||
|
{
|
||||||
|
"name": "web",
|
||||||
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@workspace/ui": "workspace:*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json showLineNumbers title="apps/web/components.json"
|
||||||
|
{
|
||||||
|
"aliases": {
|
||||||
|
"components": "#components",
|
||||||
|
"ui": "@workspace/ui/components",
|
||||||
|
"lib": "#lib",
|
||||||
|
"hooks": "#hooks",
|
||||||
|
"utils": "@workspace/ui/lib/utils"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
And the shared UI package can expose its install targets with `exports`:
|
||||||
|
|
||||||
|
```json showLineNumbers title="packages/ui/package.json"
|
||||||
|
{
|
||||||
|
"name": "@workspace/ui",
|
||||||
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
},
|
||||||
|
"exports": {
|
||||||
|
"./globals.css": "./src/styles/globals.css",
|
||||||
|
"./components/*": "./src/components/*.tsx",
|
||||||
|
"./lib/*": "./src/lib/*.ts",
|
||||||
|
"./hooks/*": "./src/hooks/*.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json showLineNumbers title="packages/ui/components.json"
|
||||||
|
{
|
||||||
|
"aliases": {
|
||||||
|
"components": "#components",
|
||||||
|
"ui": "#components",
|
||||||
|
"lib": "#lib",
|
||||||
|
"hooks": "#hooks",
|
||||||
|
"utils": "#lib/utils"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In this setup:
|
||||||
|
|
||||||
|
- files added from the app to the shared UI package are routed through
|
||||||
|
`@workspace/ui/...`
|
||||||
|
- files added inside `packages/ui` use the package-local `#...` aliases
|
||||||
|
- the shared package must export any path referenced by another workspace
|
||||||
|
|
||||||
|
For framework-specific package import setup, see the [package imports guide](/docs/package-imports).
|
||||||
|
|||||||
234
apps/v4/content/docs/(root)/package-imports.mdx
Normal file
234
apps/v4/content/docs/(root)/package-imports.mdx
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
---
|
||||||
|
title: Package Imports
|
||||||
|
description: Configure shadcn/ui with package.json imports.
|
||||||
|
---
|
||||||
|
|
||||||
|
The `shadcn` CLI supports [package imports](https://nodejs.org/api/packages.html#imports)
|
||||||
|
for installing components, rewriting imports, and resolving third-party
|
||||||
|
registries.
|
||||||
|
|
||||||
|
Package imports let you use private `#...` import aliases from your
|
||||||
|
`package.json` instead of `compilerOptions.paths` in `tsconfig.json`.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
You configure `imports` in your `package.json`:
|
||||||
|
|
||||||
|
```json title="package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then import generated components using `#...` specifiers:
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { Button } from "#components/ui/button"
|
||||||
|
import { cn } from "#lib/utils"
|
||||||
|
```
|
||||||
|
|
||||||
|
<Callout className="mt-6">
|
||||||
|
Package import specifiers must start with `#`. Use TypeScript 5 or later with
|
||||||
|
`moduleResolution: "bundler"` and `resolvePackageJsonImports: true`.
|
||||||
|
</Callout>
|
||||||
|
|
||||||
|
## App
|
||||||
|
|
||||||
|
For Next.js, Vite, and TanStack Start apps that install
|
||||||
|
components into the same workspace.
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
### Configure `package.json`
|
||||||
|
|
||||||
|
Add imports for the shadcn/ui install targets.
|
||||||
|
|
||||||
|
```json title="package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If your app does not use a `src` directory, remove `src/` from the targets. For
|
||||||
|
example:
|
||||||
|
|
||||||
|
```json title="package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./components/*.tsx",
|
||||||
|
"#lib/*": "./lib/*.ts",
|
||||||
|
"#hooks/*": "./hooks/*.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configure TypeScript
|
||||||
|
|
||||||
|
Enable package import resolution.
|
||||||
|
|
||||||
|
```json title="tsconfig.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"resolvePackageJsonImports": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You do not need `compilerOptions.paths` for these aliases.
|
||||||
|
|
||||||
|
### Configure `components.json`
|
||||||
|
|
||||||
|
Use the same `#...` roots in `components.json`.
|
||||||
|
|
||||||
|
```json title="components.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"aliases": {
|
||||||
|
"components": "#components",
|
||||||
|
"ui": "#components/ui",
|
||||||
|
"lib": "#lib",
|
||||||
|
"hooks": "#hooks",
|
||||||
|
"utils": "#lib/utils"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `ui` alias uses `#components/ui`. It is still covered by the
|
||||||
|
`#components/*` import in `package.json`.
|
||||||
|
|
||||||
|
The `utils` alias uses `#lib/utils`. It is covered by `#lib/*`, so you do not
|
||||||
|
need a separate `#utils` import.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
## Monorepo
|
||||||
|
|
||||||
|
In a monorepo, use package imports for files inside each package and package
|
||||||
|
exports for files shared across workspaces.
|
||||||
|
|
||||||
|
For an app workspace:
|
||||||
|
|
||||||
|
```json title="apps/web/package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"name": "web",
|
||||||
|
"private": true,
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@workspace/ui": "workspace:*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json title="apps/web/components.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"aliases": {
|
||||||
|
"components": "#components",
|
||||||
|
"ui": "@workspace/ui/components",
|
||||||
|
"lib": "#lib",
|
||||||
|
"hooks": "#hooks",
|
||||||
|
"utils": "@workspace/ui/lib/utils"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For the shared UI package:
|
||||||
|
|
||||||
|
```json title="packages/ui/package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"name": "@workspace/ui",
|
||||||
|
"private": true,
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
},
|
||||||
|
"exports": {
|
||||||
|
"./globals.css": "./src/styles/globals.css",
|
||||||
|
"./components/*": "./src/components/*.tsx",
|
||||||
|
"./lib/*": "./src/lib/*.ts",
|
||||||
|
"./hooks/*": "./src/hooks/*.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json title="packages/ui/components.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"aliases": {
|
||||||
|
"components": "#components",
|
||||||
|
"ui": "#components",
|
||||||
|
"lib": "#lib",
|
||||||
|
"hooks": "#hooks",
|
||||||
|
"utils": "#lib/utils"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When you run `add` from `apps/web`, app-local files use `#...` imports and
|
||||||
|
shared UI files are imported from `@workspace/ui`.
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { Button } from "@workspace/ui/components/button"
|
||||||
|
import { LoginForm } from "#components/login-form"
|
||||||
|
```
|
||||||
|
|
||||||
|
## File extensions
|
||||||
|
|
||||||
|
The target pattern in `package.json#imports` controls whether generated imports
|
||||||
|
include file extensions.
|
||||||
|
|
||||||
|
```json title="package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This generates imports without extensions:
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { Button } from "#components/ui/button"
|
||||||
|
```
|
||||||
|
|
||||||
|
If you use a target without the extension:
|
||||||
|
|
||||||
|
```json title="package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The generated import keeps the source extension:
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { Button } from "#components/ui/button.tsx"
|
||||||
|
```
|
||||||
|
|
||||||
|
For most apps, use the extension in the target pattern.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
If TypeScript cannot resolve a `#...` import, check that:
|
||||||
|
|
||||||
|
- the specifier starts with `#`
|
||||||
|
- the `imports` entry is in the nearest `package.json`
|
||||||
|
- `moduleResolution` is set to `bundler`
|
||||||
|
- `resolvePackageJsonImports` is enabled
|
||||||
|
- the matching target exists after components are added
|
||||||
|
|
||||||
|
If a component is installed but imports still point to `@/...`, check that
|
||||||
|
`components.json` uses the same `#...` aliases as your package imports.
|
||||||
@@ -116,7 +116,7 @@ npx shadcn@latest docs combobox
|
|||||||
|
|
||||||
combobox
|
combobox
|
||||||
- docs https://ui.shadcn.com/docs/components/radix/combobox
|
- docs https://ui.shadcn.com/docs/components/radix/combobox
|
||||||
- examples https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/combobox-example.tsx
|
- examples https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/combobox-example.tsx
|
||||||
- api https://base-ui.com/react/components/combobox
|
- api https://base-ui.com/react/components/combobox
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
title: April 2026 - Partial Preset Apply
|
||||||
|
description: Apply only the theme or fonts from a preset while keeping your existing components.
|
||||||
|
date: 2026-04-22
|
||||||
|
---
|
||||||
|
|
||||||
|
You can now selectively apply a preset.
|
||||||
|
|
||||||
|
Say someone shares a preset with you and you already have your own components, but you like the theme or the fonts. Now you can apply just that.
|
||||||
|
|
||||||
|
Keep your components. Apply only what you want.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Apply the full preset.
|
||||||
|
npx shadcn@latest apply --preset b2D0vQ7G4
|
||||||
|
|
||||||
|
# Apply only the theme.
|
||||||
|
npx shadcn@latest apply --preset b2D0vQ7G4 --only theme
|
||||||
|
|
||||||
|
# Apply only the fonts.
|
||||||
|
npx shadcn@latest apply --preset b2D0vQ7G4 --only font
|
||||||
|
|
||||||
|
# Apply theme and fonts.
|
||||||
|
npx shadcn@latest apply --preset b2D0vQ7G4 --only theme,font
|
||||||
|
```
|
||||||
|
|
||||||
|
The default behavior is unchanged. Running `shadcn apply --preset <preset>` still applies the full preset.
|
||||||
|
|
||||||
|
Partial preset apply currently supports `theme` and `font`.
|
||||||
|
|
||||||
|
<Button asChild size="sm">
|
||||||
|
<Link href="/create" className="mt-6 no-underline!">
|
||||||
|
Try a Preset
|
||||||
|
</Link>
|
||||||
|
</Button>
|
||||||
24
apps/v4/content/docs/changelog/2026-04-pointer-cursor.mdx
Normal file
24
apps/v4/content/docs/changelog/2026-04-pointer-cursor.mdx
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
title: April 2026 - Pointer Cursor
|
||||||
|
description: Add cursor pointer behavior for buttons during project setup.
|
||||||
|
date: 2026-04-25
|
||||||
|
---
|
||||||
|
|
||||||
|
You can now enable `cursor: pointer` for buttons when initializing a project.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest init --pointer
|
||||||
|
```
|
||||||
|
|
||||||
|
This adds the following CSS to your global CSS file:
|
||||||
|
|
||||||
|
```css title="globals.css"
|
||||||
|
@layer base {
|
||||||
|
button:not(:disabled),
|
||||||
|
[role="button"]:not(:disabled) {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `--pointer` option is not part of preset codes. It is applied as a project setup option, similar to `--rtl`.
|
||||||
93
apps/v4/content/docs/changelog/2026-04-preset-commands.mdx
Normal file
93
apps/v4/content/docs/changelog/2026-04-preset-commands.mdx
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
---
|
||||||
|
title: April 2026 - shadcn preset
|
||||||
|
description: Decode, share, open, and resolve preset codes from the shadcn CLI.
|
||||||
|
date: 2026-04-28
|
||||||
|
---
|
||||||
|
|
||||||
|
We added `shadcn preset` commands for working with preset codes.
|
||||||
|
|
||||||
|
## Decode a preset
|
||||||
|
|
||||||
|
You can decode a preset code to see exactly what it contains:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset decode b5owWMfJ8l
|
||||||
|
```
|
||||||
|
|
||||||
|
```txt
|
||||||
|
Preset
|
||||||
|
code b5owWMfJ8l
|
||||||
|
version b
|
||||||
|
style mira
|
||||||
|
baseColor mauve
|
||||||
|
theme mauve
|
||||||
|
chartColor amber
|
||||||
|
iconLibrary hugeicons
|
||||||
|
font inter
|
||||||
|
fontHeading oxanium
|
||||||
|
radius large
|
||||||
|
menuAccent subtle
|
||||||
|
menuColor inverted-translucent
|
||||||
|
url https://ui.shadcn.com/create?preset=b5owWMfJ8l
|
||||||
|
```
|
||||||
|
|
||||||
|
## Resolve from a project
|
||||||
|
|
||||||
|
Use `preset resolve` in an existing project to see the preset that matches your current configuration.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset resolve
|
||||||
|
```
|
||||||
|
|
||||||
|
```txt
|
||||||
|
Preset
|
||||||
|
code b5Kc6P0Vc
|
||||||
|
version b
|
||||||
|
style luma
|
||||||
|
baseColor olive
|
||||||
|
theme lime
|
||||||
|
chartColor sky
|
||||||
|
iconLibrary hugeicons
|
||||||
|
font geist
|
||||||
|
fontHeading inherit
|
||||||
|
radius default
|
||||||
|
menuAccent subtle
|
||||||
|
menuColor default
|
||||||
|
url https://ui.shadcn.com/create?preset=b5Kc6P0Vc
|
||||||
|
```
|
||||||
|
|
||||||
|
It works with monorepos too:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset resolve -c apps/web
|
||||||
|
```
|
||||||
|
|
||||||
|
## Share or open
|
||||||
|
|
||||||
|
Use `preset url` when you need a shareable link:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset url b5owWMfJ8l
|
||||||
|
```
|
||||||
|
|
||||||
|
```txt
|
||||||
|
https://ui.shadcn.com/create?preset=b5owWMfJ8l
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `preset open` to open the preset on shadcn/create for customization:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx shadcn@latest preset open b5owWMfJ8l
|
||||||
|
```
|
||||||
|
|
||||||
|
```txt
|
||||||
|
Opening https://ui.shadcn.com/create?preset=b5owWMfJ8l in your browser.
|
||||||
|
```
|
||||||
|
|
||||||
|
This makes presets easier to inspect, share, and hand off to coding agents without manually decoding codes or building URLs.
|
||||||
|
|
||||||
|
<Button asChild size="sm">
|
||||||
|
<Link href="/create" className="mt-6 no-underline!">
|
||||||
|
Try a Preset
|
||||||
|
</Link>
|
||||||
|
</Button>
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
title: May 2026 - Package Imports and Target Aliases
|
||||||
|
description: Configure shadcn/ui with package.json imports and portable registry target aliases.
|
||||||
|
date: 2026-05-05
|
||||||
|
---
|
||||||
|
|
||||||
|
We've added support for package imports and aliases in `files.target` in `shadcn@4.7.0`.
|
||||||
|
|
||||||
|
## Package imports
|
||||||
|
|
||||||
|
The `shadcn` CLI now supports `package.json#imports` for installing components,
|
||||||
|
rewriting imports, and resolving third-party registries. You can use private
|
||||||
|
`#...` import aliases from your `package.json` instead of relying only on
|
||||||
|
`compilerOptions.paths` in `tsconfig.json`.
|
||||||
|
|
||||||
|
```json title="package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then use the same roots in `components.json`:
|
||||||
|
|
||||||
|
```json title="components.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"aliases": {
|
||||||
|
"components": "#components",
|
||||||
|
"ui": "#components/ui",
|
||||||
|
"lib": "#lib",
|
||||||
|
"hooks": "#hooks",
|
||||||
|
"utils": "#lib/utils"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This also works in monorepos where app-local files use package imports and
|
||||||
|
shared UI files are imported from workspace package exports.
|
||||||
|
|
||||||
|
See the [package imports guide](/docs/package-imports) for setup details.
|
||||||
|
|
||||||
|
## Target aliases
|
||||||
|
|
||||||
|
Registry items can now use target aliases in `files[].target` to install files
|
||||||
|
under the user's configured shadcn directories. For example, the following registry item will install the `prompt-input.tsx` file under the `ui/ai` directory.
|
||||||
|
|
||||||
|
```json title="example.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "registry/default/ai/prompt-input.tsx",
|
||||||
|
"type": "registry:ui",
|
||||||
|
"target": "@ui/ai/prompt-input.tsx"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [registry examples](/docs/registry/examples#target-placeholders) for
|
||||||
|
more details.
|
||||||
@@ -66,6 +66,8 @@ Tailwind v4 [switched](https://tailwindcss.com/docs/upgrade-guide#buttons-use-th
|
|||||||
|
|
||||||
If you want to keep the `cursor: pointer` behavior, add the following code to your CSS file:
|
If you want to keep the `cursor: pointer` behavior, add the following code to your CSS file:
|
||||||
|
|
||||||
|
You can also enable this during project setup with `npx shadcn@latest init --pointer`.
|
||||||
|
|
||||||
```css showLineNumbers title="globals.css"
|
```css showLineNumbers title="globals.css"
|
||||||
@layer base {
|
@layer base {
|
||||||
button:not(:disabled),
|
button:not(:disabled),
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ Tailwind v4 [switched](https://tailwindcss.com/docs/upgrade-guide#buttons-use-th
|
|||||||
|
|
||||||
If you want to keep the `cursor: pointer` behavior, add the following code to your CSS file:
|
If you want to keep the `cursor: pointer` behavior, add the following code to your CSS file:
|
||||||
|
|
||||||
|
You can also enable this during project setup with `npx shadcn@latest init --pointer`.
|
||||||
|
|
||||||
```css showLineNumbers title="globals.css"
|
```css showLineNumbers title="globals.css"
|
||||||
@layer base {
|
@layer base {
|
||||||
button:not(:disabled),
|
button:not(:disabled),
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"title": "Dark mode",
|
"title": "Dark mode",
|
||||||
"pages": ["index", "next", "vite", "astro", "remix"]
|
"pages": ["index", "next", "vite", "astro", "remix", "tanstack-start"]
|
||||||
}
|
}
|
||||||
|
|||||||
191
apps/v4/content/docs/dark-mode/tanstack-start.mdx
Normal file
191
apps/v4/content/docs/dark-mode/tanstack-start.mdx
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
---
|
||||||
|
title: TanStack Start
|
||||||
|
description: Adding dark mode to your TanStack Start app.
|
||||||
|
---
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
### Create a theme provider
|
||||||
|
|
||||||
|
TanStack Start uses `ScriptOnce` from `@tanstack/react-router` to inject a script that runs before React hydrates, preventing flash of unstyled content (FOUC).
|
||||||
|
|
||||||
|
```tsx title="components/theme-provider.tsx" showLineNumbers
|
||||||
|
import { createContext, useContext, useEffect, useState } from "react"
|
||||||
|
import { ScriptOnce } from "@tanstack/react-router"
|
||||||
|
|
||||||
|
type Theme = "dark" | "light" | "system"
|
||||||
|
|
||||||
|
type ThemeProviderProps = {
|
||||||
|
children: React.ReactNode
|
||||||
|
defaultTheme?: Theme
|
||||||
|
storageKey?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
type ThemeProviderState = {
|
||||||
|
theme: Theme
|
||||||
|
setTheme: (theme: Theme) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
function getThemeScript(storageKey: string, defaultTheme: Theme) {
|
||||||
|
const key = JSON.stringify(storageKey)
|
||||||
|
const fallback = JSON.stringify(defaultTheme)
|
||||||
|
|
||||||
|
return `(function(){try{var t=localStorage.getItem(${key});if(t!=='light'&&t!=='dark'&&t!=='system'){t=${fallback}}var d=matchMedia('(prefers-color-scheme: dark)').matches;var r=t==='system'?(d?'dark':'light'):t;var e=document.documentElement;e.classList.add(r);e.style.colorScheme=r}catch(e){}})();`
|
||||||
|
}
|
||||||
|
|
||||||
|
const ThemeProviderContext = createContext<ThemeProviderState>({
|
||||||
|
theme: "system",
|
||||||
|
setTheme: () => {},
|
||||||
|
})
|
||||||
|
|
||||||
|
function applyTheme(theme: Theme) {
|
||||||
|
const root = document.documentElement
|
||||||
|
root.classList.remove("light", "dark")
|
||||||
|
|
||||||
|
const resolved =
|
||||||
|
theme === "system"
|
||||||
|
? window.matchMedia("(prefers-color-scheme: dark)").matches
|
||||||
|
? "dark"
|
||||||
|
: "light"
|
||||||
|
: theme
|
||||||
|
|
||||||
|
root.classList.add(resolved)
|
||||||
|
root.style.colorScheme = resolved
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ThemeProvider({
|
||||||
|
children,
|
||||||
|
defaultTheme = "system",
|
||||||
|
storageKey = "theme",
|
||||||
|
}: ThemeProviderProps) {
|
||||||
|
const [theme, setThemeState] = useState<Theme>(defaultTheme)
|
||||||
|
const [mounted, setMounted] = useState(false)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const stored = localStorage.getItem(storageKey)
|
||||||
|
setThemeState(
|
||||||
|
stored === "light" || stored === "dark" || stored === "system"
|
||||||
|
? stored
|
||||||
|
: defaultTheme
|
||||||
|
)
|
||||||
|
setMounted(true)
|
||||||
|
}, [defaultTheme, storageKey])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!mounted) return
|
||||||
|
applyTheme(theme)
|
||||||
|
}, [theme, mounted])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!mounted || theme !== "system") return
|
||||||
|
|
||||||
|
const media = window.matchMedia("(prefers-color-scheme: dark)")
|
||||||
|
const onChange = () => applyTheme("system")
|
||||||
|
media.addEventListener("change", onChange)
|
||||||
|
return () => media.removeEventListener("change", onChange)
|
||||||
|
}, [theme, mounted])
|
||||||
|
|
||||||
|
const setTheme = (next: Theme) => {
|
||||||
|
localStorage.setItem(storageKey, next)
|
||||||
|
setThemeState(next)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ThemeProviderContext value={{ theme, setTheme }}>
|
||||||
|
<ScriptOnce>{getThemeScript(storageKey, defaultTheme)}</ScriptOnce>
|
||||||
|
{children}
|
||||||
|
</ThemeProviderContext>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useTheme() {
|
||||||
|
const context = useContext(ThemeProviderContext)
|
||||||
|
if (context === undefined)
|
||||||
|
throw new Error("useTheme must be used within a ThemeProvider")
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wrap your root layout
|
||||||
|
|
||||||
|
Add the `ThemeProvider` to your root layout and add the `suppressHydrationWarning` prop to the `html` tag.
|
||||||
|
|
||||||
|
```tsx {8,19,24-26} title="src/routes/__root.tsx" showLineNumbers
|
||||||
|
import {
|
||||||
|
createRootRoute,
|
||||||
|
HeadContent,
|
||||||
|
Outlet,
|
||||||
|
Scripts,
|
||||||
|
} from "@tanstack/react-router"
|
||||||
|
|
||||||
|
import { ThemeProvider } from "@/components/theme-provider"
|
||||||
|
|
||||||
|
export const Route = createRootRoute({
|
||||||
|
head: () => ({
|
||||||
|
// ...
|
||||||
|
}),
|
||||||
|
component: RootComponent,
|
||||||
|
})
|
||||||
|
|
||||||
|
function RootComponent() {
|
||||||
|
return (
|
||||||
|
<html lang="en" suppressHydrationWarning>
|
||||||
|
<head>
|
||||||
|
<HeadContent />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<ThemeProvider defaultTheme="system" storageKey="theme">
|
||||||
|
<Outlet />
|
||||||
|
</ThemeProvider>
|
||||||
|
<Scripts />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Add a mode toggle
|
||||||
|
|
||||||
|
Place a mode toggle on your site to toggle between light and dark mode.
|
||||||
|
|
||||||
|
```tsx title="components/mode-toggle.tsx" showLineNumbers
|
||||||
|
import { Moon, Sun } from "lucide-react"
|
||||||
|
|
||||||
|
import { Button } from "@/components/ui/button"
|
||||||
|
import {
|
||||||
|
DropdownMenu,
|
||||||
|
DropdownMenuContent,
|
||||||
|
DropdownMenuItem,
|
||||||
|
DropdownMenuTrigger,
|
||||||
|
} from "@/components/ui/dropdown-menu"
|
||||||
|
import { useTheme } from "@/components/theme-provider"
|
||||||
|
|
||||||
|
export function ModeToggle() {
|
||||||
|
const { setTheme } = useTheme()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<DropdownMenu>
|
||||||
|
<DropdownMenuTrigger asChild>
|
||||||
|
<Button variant="outline" size="icon">
|
||||||
|
<Sun className="h-[1.2rem] w-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" />
|
||||||
|
<Moon className="absolute h-[1.2rem] w-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" />
|
||||||
|
<span className="sr-only">Toggle theme</span>
|
||||||
|
</Button>
|
||||||
|
</DropdownMenuTrigger>
|
||||||
|
<DropdownMenuContent align="end">
|
||||||
|
<DropdownMenuItem onClick={() => setTheme("light")}>
|
||||||
|
Light
|
||||||
|
</DropdownMenuItem>
|
||||||
|
<DropdownMenuItem onClick={() => setTheme("dark")}>
|
||||||
|
Dark
|
||||||
|
</DropdownMenuItem>
|
||||||
|
<DropdownMenuItem onClick={() => setTheme("system")}>
|
||||||
|
System
|
||||||
|
</DropdownMenuItem>
|
||||||
|
</DropdownMenuContent>
|
||||||
|
</DropdownMenu>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
</Steps>
|
||||||
@@ -19,9 +19,11 @@ Add the following dependencies to your project:
|
|||||||
npm install shadcn class-variance-authority clsx tailwind-merge lucide-react tw-animate-css
|
npm install shadcn class-variance-authority clsx tailwind-merge lucide-react tw-animate-css
|
||||||
```
|
```
|
||||||
|
|
||||||
### Configure path aliases
|
### Configure import aliases
|
||||||
|
|
||||||
Configure the path aliases in your `tsconfig.json` file.
|
Choose one of the following alias setups.
|
||||||
|
|
||||||
|
#### Option A: `tsconfig.json` paths
|
||||||
|
|
||||||
```json {3-6} title="tsconfig.json" showLineNumbers
|
```json {3-6} title="tsconfig.json" showLineNumbers
|
||||||
{
|
{
|
||||||
@@ -34,7 +36,31 @@ Configure the path aliases in your `tsconfig.json` file.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `@` alias is a preference. You can use other aliases if you want.
|
#### Option B: `package.json#imports`
|
||||||
|
|
||||||
|
```json title="package.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"#components/*": "./src/components/*.tsx",
|
||||||
|
"#lib/*": "./src/lib/*.ts",
|
||||||
|
"#hooks/*": "./src/hooks/*.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json title="tsconfig.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"resolvePackageJsonImports": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `@` alias is a preference. You can use other aliases if you want. If you
|
||||||
|
use `package.json#imports`, keep the matching alias roots in `components.json`.
|
||||||
|
See the <Link href="/docs/package-imports">package imports guide</Link> for
|
||||||
|
framework-specific setup.
|
||||||
|
|
||||||
### Configure styles
|
### Configure styles
|
||||||
|
|
||||||
@@ -211,6 +237,20 @@ Create a `components.json` file in the root of your project.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you're using `package.json#imports`, use the corresponding `#...` aliases instead:
|
||||||
|
|
||||||
|
```json title="components.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"aliases": {
|
||||||
|
"components": "#components",
|
||||||
|
"utils": "#lib/utils",
|
||||||
|
"ui": "#components/ui",
|
||||||
|
"lib": "#lib",
|
||||||
|
"hooks": "#hooks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### That's it
|
### That's it
|
||||||
|
|
||||||
You can now start adding components to your project.
|
You can now start adding components to your project.
|
||||||
|
|||||||
@@ -309,6 +309,94 @@ A `registry:hook` item is a custom React hook.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Target Placeholders
|
||||||
|
|
||||||
|
Use `files[].target` placeholders when a registry item should install files
|
||||||
|
under the user's configured shadcn directories. The available placeholders are
|
||||||
|
`@components/`, `@ui/`, `@lib/` and `@hooks/`.
|
||||||
|
|
||||||
|
The placeholders are resolved from `components.json`, so the same registry item
|
||||||
|
works in projects using `@/`, custom TypeScript aliases, package imports or
|
||||||
|
workspace package exports.
|
||||||
|
|
||||||
|
Anything after the placeholder is preserved. For example,
|
||||||
|
`@ui/ai/prompt-input.tsx` installs under the user's configured `ui` directory
|
||||||
|
at `ai/prompt-input.tsx`.
|
||||||
|
|
||||||
|
```json title="alias-child.json" showLineNumbers {9,15,21}
|
||||||
|
{
|
||||||
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
||||||
|
"name": "alias-child",
|
||||||
|
"type": "registry:item",
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/alias/target-alias-button.tsx",
|
||||||
|
"type": "registry:ui",
|
||||||
|
"target": "@ui/target-alias-button.tsx",
|
||||||
|
"content": "..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/alias/target-alias-helper.ts",
|
||||||
|
"type": "registry:lib",
|
||||||
|
"target": "@lib/target-alias-helper.ts",
|
||||||
|
"content": "..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/alias/prompt-input.tsx",
|
||||||
|
"type": "registry:ui",
|
||||||
|
"target": "@ui/ai/prompt-input.tsx",
|
||||||
|
"content": "..."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Registry dependencies can use target placeholders too. In the following example,
|
||||||
|
the child item installs a UI component and a helper, while the parent item
|
||||||
|
installs an app component and a hook.
|
||||||
|
|
||||||
|
```json title="alias-parent.json" showLineNumbers {7,13}
|
||||||
|
{
|
||||||
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
||||||
|
"name": "alias-parent",
|
||||||
|
"type": "registry:item",
|
||||||
|
"registryDependencies": ["https://example.com/r/alias-child.json"],
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/alias/target-alias-panel.tsx",
|
||||||
|
"type": "registry:component",
|
||||||
|
"target": "@components/target-alias-panel.tsx",
|
||||||
|
"content": "..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/alias/use-target-alias.ts",
|
||||||
|
"type": "registry:hook",
|
||||||
|
"target": "@hooks/use-target-alias.ts",
|
||||||
|
"content": "..."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `target` controls where the file is written, even when it differs from the
|
||||||
|
file `type`.
|
||||||
|
|
||||||
|
```json title="type-mismatch.json" showLineNumbers {9}
|
||||||
|
{
|
||||||
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
||||||
|
"name": "type-mismatch",
|
||||||
|
"type": "registry:item",
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/example/format-date.ts",
|
||||||
|
"type": "registry:ui",
|
||||||
|
"target": "@lib/format-date.ts",
|
||||||
|
"content": "..."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## registry:font
|
## registry:font
|
||||||
|
|
||||||
### Custom font
|
### Custom font
|
||||||
|
|||||||
@@ -144,6 +144,106 @@ npm run dev
|
|||||||
|
|
||||||
Your files will now be served at `http://localhost:3000/r/[NAME].json` eg. `http://localhost:3000/r/hello-world.json`.
|
Your files will now be served at `http://localhost:3000/r/[NAME].json` eg. `http://localhost:3000/r/hello-world.json`.
|
||||||
|
|
||||||
|
## Content negotiation
|
||||||
|
|
||||||
|
The `shadcn` CLI supports **HTTP Content Negotiation**. This allows you to host your registry at any endpoint — including the root of your domain — and serve different content depending on who is asking.
|
||||||
|
|
||||||
|
From a single URL, you can serve:
|
||||||
|
|
||||||
|
- **HTML** to browsers — a landing page, documentation, or marketing site.
|
||||||
|
- **JSON** to the `shadcn` CLI — an installable registry item.
|
||||||
|
- **Markdown** to AI agents and LLMs — a machine-readable version of your content.
|
||||||
|
|
||||||
|
The client signals its preference using the `Accept` request header, and your server decides what to return.
|
||||||
|
|
||||||
|
### Request headers
|
||||||
|
|
||||||
|
When the CLI makes a request to a registry, it sends the following headers:
|
||||||
|
|
||||||
|
- **User-Agent**: `shadcn`
|
||||||
|
- **Accept**: `application/vnd.shadcn.v1+json, application/json;q=0.9`
|
||||||
|
|
||||||
|
### Root hosting
|
||||||
|
|
||||||
|
By checking these headers on your server, you can route CLI traffic to an installable registry item while keeping browser traffic flowing to your documentation or homepage.
|
||||||
|
|
||||||
|
The examples below assume your built registry item is served at `/r/index.json`. Adjust the path to match your output.
|
||||||
|
|
||||||
|
In Next.js, express this as a rewrite in `next.config.ts`. This keeps the negotiation in the routing layer and avoids a Proxy function for this static rewrite:
|
||||||
|
|
||||||
|
```typescript title="next.config.ts" showLineNumbers
|
||||||
|
import type { NextConfig } from "next"
|
||||||
|
|
||||||
|
const nextConfig: NextConfig = {
|
||||||
|
async rewrites() {
|
||||||
|
return {
|
||||||
|
beforeFiles: [
|
||||||
|
{
|
||||||
|
source: "/",
|
||||||
|
has: [
|
||||||
|
{
|
||||||
|
type: "header",
|
||||||
|
key: "accept",
|
||||||
|
value: "(.*)application/vnd\\.shadcn\\.v1\\+json(.*)",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
destination: "/r/index.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
source: "/",
|
||||||
|
has: [
|
||||||
|
{
|
||||||
|
type: "header",
|
||||||
|
key: "user-agent",
|
||||||
|
value: "shadcn",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
destination: "/r/index.json",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async headers() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
source: "/",
|
||||||
|
headers: [{ key: "Vary", value: "Accept, User-Agent" }],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
export default nextConfig
|
||||||
|
```
|
||||||
|
|
||||||
|
Or, in an Express.js server:
|
||||||
|
|
||||||
|
```javascript title="server.js" showLineNumbers
|
||||||
|
app.get("/", (req, res) => {
|
||||||
|
res.vary("Accept")
|
||||||
|
res.vary("User-Agent")
|
||||||
|
|
||||||
|
// Check if the client prefers the shadcn vendor type.
|
||||||
|
if (req.accepts("application/vnd.shadcn.v1+json")) {
|
||||||
|
return res.json(registryData)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional: Secondary check for the User-Agent.
|
||||||
|
if (req.get("User-Agent") === "shadcn") {
|
||||||
|
return res.json(registryData)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, serve your documentation or homepage.
|
||||||
|
res.send(htmlContent)
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
This enables:
|
||||||
|
|
||||||
|
- **Branded Registry URLs**: `shadcn add https://ui.example.com`
|
||||||
|
- **Shorter URLs**: Users type your domain root, not `/r/` or `/registry/` sub-paths.
|
||||||
|
- **Easy Mnemonics**: Easier for users to remember and share your registry.
|
||||||
|
|
||||||
## Publish your registry
|
## Publish your registry
|
||||||
|
|
||||||
To make your registry available to other developers, you can publish it by deploying your project to a public URL.
|
To make your registry available to other developers, you can publish it by deploying your project to a public URL.
|
||||||
|
|||||||
@@ -226,6 +226,80 @@ By default, the `shadcn` cli will read a project's `components.json` file to det
|
|||||||
|
|
||||||
Use `~` to refer to the root of the project e.g `~/foo.config.js`.
|
Use `~` to refer to the root of the project e.g `~/foo.config.js`.
|
||||||
|
|
||||||
|
You can also use registry target placeholders to place files under the
|
||||||
|
directories configured by the user's `components.json`. These placeholders are
|
||||||
|
only supported at the start of `target` and are independent of the project's
|
||||||
|
import prefix. For example, `@ui/button.tsx` works whether the project imports
|
||||||
|
components with `@/`, `#`, package imports or workspace exports.
|
||||||
|
|
||||||
|
| Placeholder | Resolves to |
|
||||||
|
| -------------- | -------------------- |
|
||||||
|
| `@components/` | `aliases.components` |
|
||||||
|
| `@ui/` | `aliases.ui` |
|
||||||
|
| `@lib/` | `aliases.lib` |
|
||||||
|
| `@hooks/` | `aliases.hooks` |
|
||||||
|
|
||||||
|
Use these placeholders when you want a registry item to install into the
|
||||||
|
project's configured shadcn directories without hardcoding `components`, `src`
|
||||||
|
or workspace package paths. Anything after the placeholder is preserved, so
|
||||||
|
`@ui/ai/prompt-input.tsx` installs under the user's configured `ui` directory
|
||||||
|
at `ai/prompt-input.tsx`.
|
||||||
|
|
||||||
|
```json title="registry-item.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/example/button.tsx",
|
||||||
|
"type": "registry:ui",
|
||||||
|
"target": "@ui/button.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/example/prompt-input.tsx",
|
||||||
|
"type": "registry:ui",
|
||||||
|
"target": "@ui/ai/prompt-input.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/example/card.tsx",
|
||||||
|
"type": "registry:component",
|
||||||
|
"target": "@components/card.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/example/helper.ts",
|
||||||
|
"type": "registry:lib",
|
||||||
|
"target": "@lib/helper.ts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/example/use-demo.ts",
|
||||||
|
"type": "registry:hook",
|
||||||
|
"target": "@hooks/use-demo.ts"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `target` property decides where the file is written. It can point to a
|
||||||
|
different shadcn directory than the file `type`.
|
||||||
|
|
||||||
|
```json title="registry-item.json" showLineNumbers
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "registry/new-york/example/format-date.ts",
|
||||||
|
"type": "registry:ui",
|
||||||
|
"target": "@lib/format-date.ts"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Unknown placeholders are treated as regular target paths. For example,
|
||||||
|
`@foo/bar.ts` is written as `foo/bar.ts`. Embedded placeholders such as
|
||||||
|
`components/@ui/button.tsx` are also treated as regular paths.
|
||||||
|
|
||||||
|
<Callout>
|
||||||
|
`@utils/` is not supported because `utils` points to a file, not a directory.
|
||||||
|
</Callout>
|
||||||
|
|
||||||
### tailwind
|
### tailwind
|
||||||
|
|
||||||
**DEPRECATED:** Use `cssVars.theme` instead for Tailwind v4 projects.
|
**DEPRECATED:** Use `cssVars.theme` instead for Tailwind v4 projects.
|
||||||
|
|||||||
@@ -132,6 +132,12 @@ const nextConfig = {
|
|||||||
destination: "/create",
|
destination: "/create",
|
||||||
permanent: true,
|
permanent: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
source: "/code/:path*",
|
||||||
|
destination:
|
||||||
|
"https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/:path*",
|
||||||
|
permanent: false,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
rewrites() {
|
rewrites() {
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
"rehype-pretty-code": "^0.14.1",
|
"rehype-pretty-code": "^0.14.1",
|
||||||
"rimraf": "^6.0.1",
|
"rimraf": "^6.0.1",
|
||||||
"server-only": "^0.0.1",
|
"server-only": "^0.0.1",
|
||||||
"shadcn": "4.3.0",
|
"shadcn": "4.7.0",
|
||||||
"shiki": "^1.10.1",
|
"shiki": "^1.10.1",
|
||||||
"sonner": "^2.0.0",
|
"sonner": "^2.0.0",
|
||||||
"swr": "^2.3.6",
|
"swr": "^2.3.6",
|
||||||
|
|||||||
@@ -12,12 +12,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/accordion",
|
"docs": "https://ui.shadcn.com/docs/components/radix/accordion",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/accordion-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/accordion-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/primitives/docs/components/accordion.md"
|
"api": "https://www.radix-ui.com/primitives/docs/components/accordion.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/accordion",
|
"docs": "https://ui.shadcn.com/docs/components/base/accordion",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/accordion-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/accordion-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/accordion.md"
|
"api": "https://base-ui.com/react/components/accordion.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,11 +36,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/alert",
|
"docs": "https://ui.shadcn.com/docs/components/radix/alert",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/alert-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/alert-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/alert",
|
"docs": "https://ui.shadcn.com/docs/components/base/alert",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/alert-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,12 +59,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/alert-dialog",
|
"docs": "https://ui.shadcn.com/docs/components/radix/alert-dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/alert-dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/alert-dialog-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/primitives/docs/components/alert-dialog.md"
|
"api": "https://www.radix-ui.com/primitives/docs/components/alert-dialog.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/alert-dialog",
|
"docs": "https://ui.shadcn.com/docs/components/base/alert-dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/alert-dialog.md"
|
"api": "https://base-ui.com/react/components/alert-dialog.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -83,12 +83,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/aspect-ratio",
|
"docs": "https://ui.shadcn.com/docs/components/radix/aspect-ratio",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/aspect-ratio-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/aspect-ratio-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/primitives/docs/components/aspect-ratio.md"
|
"api": "https://www.radix-ui.com/primitives/docs/components/aspect-ratio.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/aspect-ratio",
|
"docs": "https://ui.shadcn.com/docs/components/base/aspect-ratio",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,12 +106,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/avatar",
|
"docs": "https://ui.shadcn.com/docs/components/radix/avatar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/avatar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/avatar-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/primitives/docs/components/avatar.md"
|
"api": "https://www.radix-ui.com/primitives/docs/components/avatar.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/avatar",
|
"docs": "https://ui.shadcn.com/docs/components/base/avatar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/avatar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/avatar-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/avatar.md"
|
"api": "https://base-ui.com/react/components/avatar.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -130,11 +130,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/badge",
|
"docs": "https://ui.shadcn.com/docs/components/radix/badge",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/badge-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/badge-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/badge",
|
"docs": "https://ui.shadcn.com/docs/components/base/badge",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/badge-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/badge-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -152,11 +152,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/breadcrumb",
|
"docs": "https://ui.shadcn.com/docs/components/radix/breadcrumb",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/breadcrumb-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/breadcrumb-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/breadcrumb",
|
"docs": "https://ui.shadcn.com/docs/components/base/breadcrumb",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/breadcrumb-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/breadcrumb-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -174,11 +174,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/button",
|
"docs": "https://ui.shadcn.com/docs/components/radix/button",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/button-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/button-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/button",
|
"docs": "https://ui.shadcn.com/docs/components/base/button",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/button-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/button-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,11 +197,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/button-group",
|
"docs": "https://ui.shadcn.com/docs/components/radix/button-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/button-group-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/button-group-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/button-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/button-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/button-group-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/button-group-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -221,12 +221,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/calendar",
|
"docs": "https://ui.shadcn.com/docs/components/radix/calendar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/calendar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/calendar-example.tsx",
|
||||||
"api": "https://react-day-picker.js.org"
|
"api": "https://react-day-picker.js.org"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/calendar",
|
"docs": "https://ui.shadcn.com/docs/components/base/calendar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/calendar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/calendar-example.tsx",
|
||||||
"api": "https://react-day-picker.js.org"
|
"api": "https://react-day-picker.js.org"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -245,11 +245,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/card",
|
"docs": "https://ui.shadcn.com/docs/components/radix/card",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/card-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/card-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/card",
|
"docs": "https://ui.shadcn.com/docs/components/base/card",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/card-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/card-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -269,12 +269,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/carousel",
|
"docs": "https://ui.shadcn.com/docs/components/radix/carousel",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/carousel-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/carousel-example.tsx",
|
||||||
"api": "https://www.embla-carousel.com/get-started/react"
|
"api": "https://www.embla-carousel.com/get-started/react"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/carousel",
|
"docs": "https://ui.shadcn.com/docs/components/base/carousel",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/carousel-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/carousel-example.tsx",
|
||||||
"api": "https://www.embla-carousel.com/get-started/react"
|
"api": "https://www.embla-carousel.com/get-started/react"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,11 +294,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/chart",
|
"docs": "https://ui.shadcn.com/docs/components/radix/chart",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/chart-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/chart-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/chart",
|
"docs": "https://ui.shadcn.com/docs/components/base/chart",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/chart-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/chart-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -316,12 +316,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/checkbox",
|
"docs": "https://ui.shadcn.com/docs/components/radix/checkbox",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/checkbox-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/checkbox-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/checkbox.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/checkbox.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/checkbox",
|
"docs": "https://ui.shadcn.com/docs/components/base/checkbox",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/checkbox-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/checkbox-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/checkbox.md"
|
"api": "https://base-ui.com/react/components/checkbox.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -340,12 +340,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/collapsible",
|
"docs": "https://ui.shadcn.com/docs/components/radix/collapsible",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/collapsible-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/collapsible-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/collapsible.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/collapsible.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/collapsible",
|
"docs": "https://ui.shadcn.com/docs/components/base/collapsible",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/collapsible-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/collapsible-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/collapsible.md"
|
"api": "https://base-ui.com/react/components/collapsible.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -366,12 +366,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/combobox",
|
"docs": "https://ui.shadcn.com/docs/components/radix/combobox",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/combobox-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/combobox-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/combobox"
|
"api": "https://base-ui.com/react/components/combobox"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/combobox",
|
"docs": "https://ui.shadcn.com/docs/components/base/combobox",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/combobox-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/combobox-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/combobox.md"
|
"api": "https://base-ui.com/react/components/combobox.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -392,12 +392,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/command",
|
"docs": "https://ui.shadcn.com/docs/components/radix/command",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/command-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/command-example.tsx",
|
||||||
"api": "https://github.com/dip/cmdk"
|
"api": "https://github.com/dip/cmdk"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/command",
|
"docs": "https://ui.shadcn.com/docs/components/base/command",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/command-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/command-example.tsx",
|
||||||
"api": "https://github.com/dip/cmdk"
|
"api": "https://github.com/dip/cmdk"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -416,12 +416,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/context-menu",
|
"docs": "https://ui.shadcn.com/docs/components/radix/context-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/context-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/context-menu-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/context-menu.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/context-menu.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/context-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/context-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/context-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/context-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/context-menu.md"
|
"api": "https://base-ui.com/react/components/context-menu.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -441,12 +441,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/dialog",
|
"docs": "https://ui.shadcn.com/docs/components/radix/dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/dialog-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/dialog.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/dialog.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/dialog",
|
"docs": "https://ui.shadcn.com/docs/components/base/dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/dialog-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/dialog.md"
|
"api": "https://base-ui.com/react/components/dialog.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -488,12 +488,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/drawer",
|
"docs": "https://ui.shadcn.com/docs/components/radix/drawer",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/drawer-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/drawer-example.tsx",
|
||||||
"api": "https://vaul.emilkowal.ski/getting-started"
|
"api": "https://vaul.emilkowal.ski/getting-started"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/drawer",
|
"docs": "https://ui.shadcn.com/docs/components/base/drawer",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/drawer-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/drawer-example.tsx",
|
||||||
"api": "https://vaul.emilkowal.ski/getting-started"
|
"api": "https://vaul.emilkowal.ski/getting-started"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -512,12 +512,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/dropdown-menu",
|
"docs": "https://ui.shadcn.com/docs/components/radix/dropdown-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/dropdown-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/dropdown-menu-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/dropdown-menu.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/dropdown-menu.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/dropdown-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/dropdown-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/dropdown-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/dropdown-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/menu.md"
|
"api": "https://base-ui.com/react/components/menu.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -536,11 +536,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/empty",
|
"docs": "https://ui.shadcn.com/docs/components/radix/empty",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/empty-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/empty-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/empty",
|
"docs": "https://ui.shadcn.com/docs/components/base/empty",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/empty-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/empty-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -559,11 +559,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/field",
|
"docs": "https://ui.shadcn.com/docs/components/radix/field",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/field-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/field-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/field",
|
"docs": "https://ui.shadcn.com/docs/components/base/field",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/field-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/field-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -585,12 +585,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/hover-card",
|
"docs": "https://ui.shadcn.com/docs/components/radix/hover-card",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/hover-card-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/hover-card-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/hover-card.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/hover-card.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/hover-card",
|
"docs": "https://ui.shadcn.com/docs/components/base/hover-card",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/hover-card-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/hover-card-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/hover-card.md"
|
"api": "https://base-ui.com/react/components/hover-card.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -609,11 +609,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/input",
|
"docs": "https://ui.shadcn.com/docs/components/radix/input",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/input-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/input-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input",
|
"docs": "https://ui.shadcn.com/docs/components/base/input",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -632,11 +632,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/input-group",
|
"docs": "https://ui.shadcn.com/docs/components/radix/input-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/input-group-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/input-group-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/input-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-group-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-group-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -655,12 +655,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/input-otp",
|
"docs": "https://ui.shadcn.com/docs/components/radix/input-otp",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/input-otp-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/input-otp-example.tsx",
|
||||||
"api": "https://input-otp.rodz.dev"
|
"api": "https://input-otp.rodz.dev"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input-otp",
|
"docs": "https://ui.shadcn.com/docs/components/base/input-otp",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-otp-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-otp-example.tsx",
|
||||||
"api": "https://input-otp.rodz.dev"
|
"api": "https://input-otp.rodz.dev"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -680,11 +680,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/item",
|
"docs": "https://ui.shadcn.com/docs/components/radix/item",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/item-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/item-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/item",
|
"docs": "https://ui.shadcn.com/docs/components/base/item",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/item-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/item-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -702,11 +702,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/kbd",
|
"docs": "https://ui.shadcn.com/docs/components/radix/kbd",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/kbd-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/kbd-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/kbd",
|
"docs": "https://ui.shadcn.com/docs/components/base/kbd",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/kbd-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/kbd-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -724,12 +724,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/label",
|
"docs": "https://ui.shadcn.com/docs/components/radix/label",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/label-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/label-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/label.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/label.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/label",
|
"docs": "https://ui.shadcn.com/docs/components/base/label",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/label-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/label-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/label.md"
|
"api": "https://base-ui.com/react/components/label.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -748,12 +748,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/menubar",
|
"docs": "https://ui.shadcn.com/docs/components/radix/menubar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/menubar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/menubar-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/menubar.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/menubar.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/menubar",
|
"docs": "https://ui.shadcn.com/docs/components/base/menubar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/menubar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/menubar-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/menubar.md"
|
"api": "https://base-ui.com/react/components/menubar.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -772,11 +772,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/native-select",
|
"docs": "https://ui.shadcn.com/docs/components/radix/native-select",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/native-select-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/native-select-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/native-select",
|
"docs": "https://ui.shadcn.com/docs/components/base/native-select",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/native-select-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/native-select-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -794,12 +794,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/navigation-menu",
|
"docs": "https://ui.shadcn.com/docs/components/radix/navigation-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/navigation-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/navigation-menu-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/navigation-menu.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/navigation-menu.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/navigation-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/navigation-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/navigation-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/navigation-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/navigation-menu.md"
|
"api": "https://base-ui.com/react/components/navigation-menu.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -819,11 +819,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/pagination",
|
"docs": "https://ui.shadcn.com/docs/components/radix/pagination",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/pagination-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/pagination-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/pagination",
|
"docs": "https://ui.shadcn.com/docs/components/base/pagination",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/pagination-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/pagination-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -841,12 +841,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/popover",
|
"docs": "https://ui.shadcn.com/docs/components/radix/popover",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/popover-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/popover-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/popover.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/popover.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/popover",
|
"docs": "https://ui.shadcn.com/docs/components/base/popover",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/popover-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/popover-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/popover.md"
|
"api": "https://base-ui.com/react/components/popover.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -865,12 +865,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/progress",
|
"docs": "https://ui.shadcn.com/docs/components/radix/progress",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/progress-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/progress-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/progress.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/progress.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/progress",
|
"docs": "https://ui.shadcn.com/docs/components/base/progress",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/progress-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/progress-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/progress.md"
|
"api": "https://base-ui.com/react/components/progress.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -889,12 +889,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/radio-group",
|
"docs": "https://ui.shadcn.com/docs/components/radix/radio-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/radio-group-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/radio-group-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/radio-group.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/radio-group.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/radio-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/radio-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/radio-group-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/radio-group-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/radio-group.md"
|
"api": "https://base-ui.com/react/components/radio-group.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -914,12 +914,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/resizable",
|
"docs": "https://ui.shadcn.com/docs/components/radix/resizable",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/resizable-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/resizable-example.tsx",
|
||||||
"api": "https://github.com/bvaughn/react-resizable-panels"
|
"api": "https://github.com/bvaughn/react-resizable-panels"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/resizable",
|
"docs": "https://ui.shadcn.com/docs/components/base/resizable",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/resizable-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/resizable-example.tsx",
|
||||||
"api": "https://github.com/bvaughn/react-resizable-panels"
|
"api": "https://github.com/bvaughn/react-resizable-panels"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -938,12 +938,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/scroll-area",
|
"docs": "https://ui.shadcn.com/docs/components/radix/scroll-area",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/scroll-area-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/scroll-area-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/scroll-area.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/scroll-area.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/scroll-area",
|
"docs": "https://ui.shadcn.com/docs/components/base/scroll-area",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/scroll-area-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/scroll-area-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/scroll-area.md"
|
"api": "https://base-ui.com/react/components/scroll-area.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -962,12 +962,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/select",
|
"docs": "https://ui.shadcn.com/docs/components/radix/select",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/select-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/select-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/select.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/select.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/select",
|
"docs": "https://ui.shadcn.com/docs/components/base/select",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/select-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/select-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/select.md"
|
"api": "https://base-ui.com/react/components/select.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -986,12 +986,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/separator",
|
"docs": "https://ui.shadcn.com/docs/components/radix/separator",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/separator-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/separator-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/separator.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/separator.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/separator",
|
"docs": "https://ui.shadcn.com/docs/components/base/separator",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/separator-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/separator-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/separator.md"
|
"api": "https://base-ui.com/react/components/separator.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1011,12 +1011,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/sheet",
|
"docs": "https://ui.shadcn.com/docs/components/radix/sheet",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/sheet-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/sheet-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/dialog.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/dialog.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sheet",
|
"docs": "https://ui.shadcn.com/docs/components/base/sheet",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sheet-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sheet-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/dialog.md"
|
"api": "https://base-ui.com/react/components/dialog.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1044,11 +1044,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/sidebar",
|
"docs": "https://ui.shadcn.com/docs/components/radix/sidebar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/sidebar-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/sidebar-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sidebar",
|
"docs": "https://ui.shadcn.com/docs/components/base/sidebar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sidebar-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sidebar-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1066,11 +1066,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/skeleton",
|
"docs": "https://ui.shadcn.com/docs/components/radix/skeleton",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/skeleton-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/skeleton-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/skeleton",
|
"docs": "https://ui.shadcn.com/docs/components/base/skeleton",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/skeleton-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/skeleton-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1088,12 +1088,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/slider",
|
"docs": "https://ui.shadcn.com/docs/components/radix/slider",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/slider-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/slider-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/slider.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/slider.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/slider",
|
"docs": "https://ui.shadcn.com/docs/components/base/slider",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/slider-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/slider-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/slider.md"
|
"api": "https://base-ui.com/react/components/slider.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1113,12 +1113,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/sonner",
|
"docs": "https://ui.shadcn.com/docs/components/radix/sonner",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/sonner-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/sonner-example.tsx",
|
||||||
"api": "https://sonner.emilkowal.ski"
|
"api": "https://sonner.emilkowal.ski"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sonner",
|
"docs": "https://ui.shadcn.com/docs/components/base/sonner",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sonner-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sonner-example.tsx",
|
||||||
"api": "https://sonner.emilkowal.ski"
|
"api": "https://sonner.emilkowal.ski"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1137,11 +1137,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/spinner",
|
"docs": "https://ui.shadcn.com/docs/components/radix/spinner",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/spinner-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/spinner-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/spinner",
|
"docs": "https://ui.shadcn.com/docs/components/base/spinner",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/spinner-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/spinner-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1159,12 +1159,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/switch",
|
"docs": "https://ui.shadcn.com/docs/components/radix/switch",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/switch-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/switch-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/switch.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/switch.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/switch",
|
"docs": "https://ui.shadcn.com/docs/components/base/switch",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/switch-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/switch-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/switch.md"
|
"api": "https://base-ui.com/react/components/switch.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1183,11 +1183,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/table",
|
"docs": "https://ui.shadcn.com/docs/components/radix/table",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/table-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/table-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/table",
|
"docs": "https://ui.shadcn.com/docs/components/base/table",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/table-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/table-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1205,12 +1205,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/tabs",
|
"docs": "https://ui.shadcn.com/docs/components/radix/tabs",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/tabs-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/tabs-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/tabs.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/tabs.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/tabs",
|
"docs": "https://ui.shadcn.com/docs/components/base/tabs",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/tabs-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/tabs-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/tabs.md"
|
"api": "https://base-ui.com/react/components/tabs.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1229,11 +1229,11 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/textarea",
|
"docs": "https://ui.shadcn.com/docs/components/radix/textarea",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/textarea-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/textarea-example.tsx"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/textarea",
|
"docs": "https://ui.shadcn.com/docs/components/base/textarea",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/textarea-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/textarea-example.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1251,12 +1251,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/toggle",
|
"docs": "https://ui.shadcn.com/docs/components/radix/toggle",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/toggle-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/toggle-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/toggle.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/toggle.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/toggle",
|
"docs": "https://ui.shadcn.com/docs/components/base/toggle",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/toggle-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/toggle-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/toggle.md"
|
"api": "https://base-ui.com/react/components/toggle.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1276,12 +1276,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/toggle-group",
|
"docs": "https://ui.shadcn.com/docs/components/radix/toggle-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/toggle-group-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/toggle-group-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/toggle-group.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/toggle-group.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/toggle-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/toggle-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/toggle-group-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/toggle-group-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/toggle-group.md"
|
"api": "https://base-ui.com/react/components/toggle-group.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1301,12 +1301,12 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"radix": {
|
"radix": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/radix/tooltip",
|
"docs": "https://ui.shadcn.com/docs/components/radix/tooltip",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/tooltip-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/radix/examples/tooltip-example.tsx",
|
||||||
"api": "https://www.radix-ui.com/docs/primitives/components/tooltip.md"
|
"api": "https://www.radix-ui.com/docs/primitives/components/tooltip.md"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/tooltip",
|
"docs": "https://ui.shadcn.com/docs/components/base/tooltip",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/tooltip-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/tooltip-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/tooltip.md"
|
"api": "https://base-ui.com/react/components/tooltip.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -233,6 +233,12 @@
|
|||||||
"url": "https://eldoraui.site/r/{name}.json",
|
"url": "https://eldoraui.site/r/{name}.json",
|
||||||
"description": "An open-source, modern UI component library for React, built with TypeScript, Tailwind CSS, and Framer Motion. Eldora UI offers beautifully crafted, reusable components designed for performance and elegance."
|
"description": "An open-source, modern UI component library for React, built with TypeScript, Tailwind CSS, and Framer Motion. Eldora UI offers beautifully crafted, reusable components designed for performance and elegance."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "@evilcharts",
|
||||||
|
"homepage": "https://evilcharts.com",
|
||||||
|
"url": "https://evilcharts.com/r/{name}.json",
|
||||||
|
"description": "EvilCharts is an open-source chart UI website built with shadcn and Recharts, beautifully designed and handcrafted."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "@formcn",
|
"name": "@formcn",
|
||||||
"homepage": "https://formcn.dev",
|
"homepage": "https://formcn.dev",
|
||||||
@@ -269,6 +275,12 @@
|
|||||||
"url": "https://glass-ui.crenspire.com/r/{name}.json",
|
"url": "https://glass-ui.crenspire.com/r/{name}.json",
|
||||||
"description": "A shadcn-ui compatible registry distributing 40+ glassmorphic React/TypeScript components with Apple-inspired design. Components include enhanced visual effects (glow, shimmer, ripple), theme support, and customizable glassmorphism styling."
|
"description": "A shadcn-ui compatible registry distributing 40+ glassmorphic React/TypeScript components with Apple-inspired design. Components include enhanced visual effects (glow, shimmer, ripple), theme support, and customizable glassmorphism styling."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "@glasscn",
|
||||||
|
"homepage": "https://glasscn.vercel.app/",
|
||||||
|
"url": "https://glasscn-components.vercel.app/r/{name}.json",
|
||||||
|
"description": "A shadcn-compatible registry of glassmorphism components inspired by Apple"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "@ha-components",
|
"name": "@ha-components",
|
||||||
"homepage": "https://hacomponents.keshuac.com",
|
"homepage": "https://hacomponents.keshuac.com",
|
||||||
@@ -347,6 +359,12 @@
|
|||||||
"url": "https://limeplay.winoffrg.dev/r/{name}.json",
|
"url": "https://limeplay.winoffrg.dev/r/{name}.json",
|
||||||
"description": "Modern UI Library for building media players in React. Powered by Shaka Player."
|
"description": "Modern UI Library for building media players in React. Powered by Shaka Player."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "@loading-ui",
|
||||||
|
"homepage": "https://loading-ui.com",
|
||||||
|
"url": "https://loading-ui.com/r/{name}.json",
|
||||||
|
"description": "Spinners, loaders, and loading animations for modern web apps. Free and open-source."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "@lmscn",
|
"name": "@lmscn",
|
||||||
"homepage": "https://lmscn.vercel.app",
|
"homepage": "https://lmscn.vercel.app",
|
||||||
@@ -401,6 +419,12 @@
|
|||||||
"url": "https://motion-primitives.com/c/{name}.json",
|
"url": "https://motion-primitives.com/c/{name}.json",
|
||||||
"description": "Beautifully designed motions components. Easy copy-paste. Customizable. Open Source. Built for engineers and designers."
|
"description": "Beautifully designed motions components. Easy copy-paste. Customizable. Open Source. Built for engineers and designers."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "@nordaun",
|
||||||
|
"homepage": "https://ui.nordaun.com",
|
||||||
|
"url": "https://ui.nordaun.com/r/{name}.json",
|
||||||
|
"description": "Simple components for your extraordinary creations."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "@ncdai",
|
"name": "@ncdai",
|
||||||
"homepage": "https://chanhdai.com/components",
|
"homepage": "https://chanhdai.com/components",
|
||||||
@@ -591,7 +615,7 @@
|
|||||||
"name": "@shadcnblocks",
|
"name": "@shadcnblocks",
|
||||||
"homepage": "https://shadcnblocks.com",
|
"homepage": "https://shadcnblocks.com",
|
||||||
"url": "https://shadcnblocks.com/r/{name}.json",
|
"url": "https://shadcnblocks.com/r/{name}.json",
|
||||||
"description": "A registry with hundreds of extra blocks for shadcn ui."
|
"description": "A shadcn/ui registry with 1429 blocks, 1189 component variants, 14 templates, themes, and admin dashboard patterns."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "@shadcndesign",
|
"name": "@shadcndesign",
|
||||||
@@ -827,6 +851,12 @@
|
|||||||
"url": "https://darshitdev.in/r/{name}.json",
|
"url": "https://darshitdev.in/r/{name}.json",
|
||||||
"description": "Magic 3D Tabs component featuring mouse-interactive 3D rotation, floating particles background effect, and smooth spring animations."
|
"description": "Magic 3D Tabs component featuring mouse-interactive 3D rotation, floating particles background effect, and smooth spring animations."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "@devl",
|
||||||
|
"homepage": "https://devl.dev",
|
||||||
|
"url": "https://devl.dev/r/{name}.json",
|
||||||
|
"description": "Hand-crafted layouts and UI primitives for shipping fast."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "@beste-ui",
|
"name": "@beste-ui",
|
||||||
"homepage": "https://ui.beste.co",
|
"homepage": "https://ui.beste.co",
|
||||||
@@ -1030,5 +1060,53 @@
|
|||||||
"homepage": "https://www.remocn.dev/",
|
"homepage": "https://www.remocn.dev/",
|
||||||
"url": "https://www.remocn.dev/r/{name}.json",
|
"url": "https://www.remocn.dev/r/{name}.json",
|
||||||
"description": "Production-ready components for Remotion - text animations, backgrounds, transitions, UI blocks, and full scene compositions"
|
"description": "Production-ready components for Remotion - text animations, backgrounds, transitions, UI blocks, and full scene compositions"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@exabase",
|
||||||
|
"homepage": "https://exawizards.com/exabase/design/",
|
||||||
|
"url": "https://exawizards.com/exabase/design/registry/{name}.json",
|
||||||
|
"description": "A collection of UI components based on the exaBase Design System, built with React and Tailwind CSS."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@aicanvas",
|
||||||
|
"homepage": "https://aicanvas.me",
|
||||||
|
"url": "https://aicanvas.me/r/{name}.json",
|
||||||
|
"description": "54 animated React components with AI reproduction prompts for Claude Code, Lovable, and v0. Free and open source."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@xcn",
|
||||||
|
"homepage": "https://ui.radiumcoders.com",
|
||||||
|
"url": "https://ui.radiumcoders.com/r/xcn/{name}.json",
|
||||||
|
"description": "Hand-crafted, beautiful, and minimal UI components built with Tailwind CSS and Motion."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@dotmatrix",
|
||||||
|
"homepage": "https://dotmatrix.zzzzshawn.cloud",
|
||||||
|
"url": "https://dotmatrix.zzzzshawn.cloud/r/{name}.json",
|
||||||
|
"description": "Production-ready dot-matrix loading components for React, featuring square, circular, and triangle animations with polished motion."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@delta",
|
||||||
|
"homepage": "https://deltacomponents.dev",
|
||||||
|
"url": "https://deltacomponents.dev/r/{name}.json",
|
||||||
|
"description": "A shadcn registry for AI and media-rich interfaces — streaming LLM chat, zoomable images, swipeable card decks, interactive maps, plus dashboard and landing-page blocks."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@shieldcn",
|
||||||
|
"homepage": "https://shieldcn.dev",
|
||||||
|
"url": "https://shieldcn.dev/r/{name}.json",
|
||||||
|
"description": "Beautiful README badges as a service. A shields.io alternative with the visual quality of shadcn/ui. Drop-in SVG badge components for npm, GitHub, Discord, and more."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@evilbuttons",
|
||||||
|
"homepage": "https://evilbuttons.radiumcoders.com/docs",
|
||||||
|
"url": "https://evilbuttons.radiumcoders.com/r/{name}.json",
|
||||||
|
"description": "A shadcn/ui registry featuring a collection of animated buttons built with Motion. Each component is designed to add punchy, interactive feedback to your UI with minimal setup."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@stepper",
|
||||||
|
"homepage": "https://francozeta-stepper.vercel.app",
|
||||||
|
"url": "https://francozeta-stepper.vercel.app/{name}.json",
|
||||||
|
"description": "A modern, accessible and composable Stepper component for React and Tailwind CSS. Built for shadcn/ui-style workflows with registry-first distribution."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/accordion",
|
"docs": "https://ui.shadcn.com/docs/components/base/accordion",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/accordion-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/accordion-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/accordion.md"
|
"api": "https://base-ui.com/react/components/accordion.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/alert-dialog",
|
"docs": "https://ui.shadcn.com/docs/components/base/alert-dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/alert-dialog.md"
|
"api": "https://base-ui.com/react/components/alert-dialog.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/alert",
|
"docs": "https://ui.shadcn.com/docs/components/base/alert",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/alert-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/aspect-ratio",
|
"docs": "https://ui.shadcn.com/docs/components/base/aspect-ratio",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/avatar",
|
"docs": "https://ui.shadcn.com/docs/components/base/avatar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/avatar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/avatar-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/avatar.md"
|
"api": "https://base-ui.com/react/components/avatar.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/badge",
|
"docs": "https://ui.shadcn.com/docs/components/base/badge",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/badge-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/badge-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/breadcrumb",
|
"docs": "https://ui.shadcn.com/docs/components/base/breadcrumb",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/breadcrumb-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/breadcrumb-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/button-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/button-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/button-group-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/button-group-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/button",
|
"docs": "https://ui.shadcn.com/docs/components/base/button",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/button-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/button-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/calendar",
|
"docs": "https://ui.shadcn.com/docs/components/base/calendar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/calendar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/calendar-example.tsx",
|
||||||
"api": "https://react-day-picker.js.org"
|
"api": "https://react-day-picker.js.org"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/card",
|
"docs": "https://ui.shadcn.com/docs/components/base/card",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/card-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/card-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/carousel",
|
"docs": "https://ui.shadcn.com/docs/components/base/carousel",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/carousel-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/carousel-example.tsx",
|
||||||
"api": "https://www.embla-carousel.com/get-started/react"
|
"api": "https://www.embla-carousel.com/get-started/react"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/chart",
|
"docs": "https://ui.shadcn.com/docs/components/base/chart",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/chart-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/chart-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/checkbox",
|
"docs": "https://ui.shadcn.com/docs/components/base/checkbox",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/checkbox-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/checkbox-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/checkbox.md"
|
"api": "https://base-ui.com/react/components/checkbox.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/collapsible",
|
"docs": "https://ui.shadcn.com/docs/components/base/collapsible",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/collapsible-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/collapsible-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/collapsible.md"
|
"api": "https://base-ui.com/react/components/collapsible.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/combobox",
|
"docs": "https://ui.shadcn.com/docs/components/base/combobox",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/combobox-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/combobox-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/combobox.md"
|
"api": "https://base-ui.com/react/components/combobox.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/command",
|
"docs": "https://ui.shadcn.com/docs/components/base/command",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/command-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/command-example.tsx",
|
||||||
"api": "https://github.com/dip/cmdk"
|
"api": "https://github.com/dip/cmdk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/context-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/context-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/context-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/context-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/context-menu.md"
|
"api": "https://base-ui.com/react/components/context-menu.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/dialog",
|
"docs": "https://ui.shadcn.com/docs/components/base/dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/dialog-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/dialog.md"
|
"api": "https://base-ui.com/react/components/dialog.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/drawer",
|
"docs": "https://ui.shadcn.com/docs/components/base/drawer",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/drawer-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/drawer-example.tsx",
|
||||||
"api": "https://vaul.emilkowal.ski/getting-started"
|
"api": "https://vaul.emilkowal.ski/getting-started"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/dropdown-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/dropdown-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/dropdown-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/dropdown-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/menu.md"
|
"api": "https://base-ui.com/react/components/menu.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/empty",
|
"docs": "https://ui.shadcn.com/docs/components/base/empty",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/empty-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/empty-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/field",
|
"docs": "https://ui.shadcn.com/docs/components/base/field",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/field-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/field-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/hover-card",
|
"docs": "https://ui.shadcn.com/docs/components/base/hover-card",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/hover-card-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/hover-card-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/hover-card.md"
|
"api": "https://base-ui.com/react/components/hover-card.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/input-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-group-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-group-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input-otp",
|
"docs": "https://ui.shadcn.com/docs/components/base/input-otp",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-otp-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-otp-example.tsx",
|
||||||
"api": "https://input-otp.rodz.dev"
|
"api": "https://input-otp.rodz.dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input",
|
"docs": "https://ui.shadcn.com/docs/components/base/input",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/item",
|
"docs": "https://ui.shadcn.com/docs/components/base/item",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/item-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/item-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/kbd",
|
"docs": "https://ui.shadcn.com/docs/components/base/kbd",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/kbd-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/kbd-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/label",
|
"docs": "https://ui.shadcn.com/docs/components/base/label",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/label-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/label-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/label.md"
|
"api": "https://base-ui.com/react/components/label.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/menubar",
|
"docs": "https://ui.shadcn.com/docs/components/base/menubar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/menubar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/menubar-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/menubar.md"
|
"api": "https://base-ui.com/react/components/menubar.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/native-select",
|
"docs": "https://ui.shadcn.com/docs/components/base/native-select",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/native-select-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/native-select-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/navigation-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/navigation-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/navigation-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/navigation-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/navigation-menu.md"
|
"api": "https://base-ui.com/react/components/navigation-menu.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/pagination",
|
"docs": "https://ui.shadcn.com/docs/components/base/pagination",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/pagination-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/pagination-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/popover",
|
"docs": "https://ui.shadcn.com/docs/components/base/popover",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/popover-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/popover-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/popover.md"
|
"api": "https://base-ui.com/react/components/popover.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/progress",
|
"docs": "https://ui.shadcn.com/docs/components/base/progress",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/progress-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/progress-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/progress.md"
|
"api": "https://base-ui.com/react/components/progress.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/radio-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/radio-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/radio-group-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/radio-group-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/radio-group.md"
|
"api": "https://base-ui.com/react/components/radio-group.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/accordion",
|
"docs": "https://ui.shadcn.com/docs/components/base/accordion",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/accordion-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/accordion-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/accordion.md"
|
"api": "https://base-ui.com/react/components/accordion.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/alert",
|
"docs": "https://ui.shadcn.com/docs/components/base/alert",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/alert-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/alert-dialog",
|
"docs": "https://ui.shadcn.com/docs/components/base/alert-dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/alert-dialog.md"
|
"api": "https://base-ui.com/react/components/alert-dialog.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/aspect-ratio",
|
"docs": "https://ui.shadcn.com/docs/components/base/aspect-ratio",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/avatar",
|
"docs": "https://ui.shadcn.com/docs/components/base/avatar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/avatar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/avatar-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/avatar.md"
|
"api": "https://base-ui.com/react/components/avatar.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -147,7 +147,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/badge",
|
"docs": "https://ui.shadcn.com/docs/components/base/badge",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/badge-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/badge-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/breadcrumb",
|
"docs": "https://ui.shadcn.com/docs/components/base/breadcrumb",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/breadcrumb-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/breadcrumb-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -179,7 +179,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/button",
|
"docs": "https://ui.shadcn.com/docs/components/base/button",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/button-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/button-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -196,7 +196,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/button-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/button-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/button-group-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/button-group-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/calendar",
|
"docs": "https://ui.shadcn.com/docs/components/base/calendar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/calendar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/calendar-example.tsx",
|
||||||
"api": "https://react-day-picker.js.org"
|
"api": "https://react-day-picker.js.org"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -231,7 +231,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/card",
|
"docs": "https://ui.shadcn.com/docs/components/base/card",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/card-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/card-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -249,7 +249,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/carousel",
|
"docs": "https://ui.shadcn.com/docs/components/base/carousel",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/carousel-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/carousel-example.tsx",
|
||||||
"api": "https://www.embla-carousel.com/get-started/react"
|
"api": "https://www.embla-carousel.com/get-started/react"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -268,7 +268,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/chart",
|
"docs": "https://ui.shadcn.com/docs/components/base/chart",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/chart-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/chart-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -284,7 +284,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/checkbox",
|
"docs": "https://ui.shadcn.com/docs/components/base/checkbox",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/checkbox-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/checkbox-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/checkbox.md"
|
"api": "https://base-ui.com/react/components/checkbox.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -301,7 +301,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/collapsible",
|
"docs": "https://ui.shadcn.com/docs/components/base/collapsible",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/collapsible-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/collapsible-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/collapsible.md"
|
"api": "https://base-ui.com/react/components/collapsible.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -320,7 +320,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/combobox",
|
"docs": "https://ui.shadcn.com/docs/components/base/combobox",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/combobox-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/combobox-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/combobox.md"
|
"api": "https://base-ui.com/react/components/combobox.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -339,7 +339,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/command",
|
"docs": "https://ui.shadcn.com/docs/components/base/command",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/command-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/command-example.tsx",
|
||||||
"api": "https://github.com/dip/cmdk"
|
"api": "https://github.com/dip/cmdk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -356,7 +356,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/context-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/context-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/context-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/context-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/context-menu.md"
|
"api": "https://base-ui.com/react/components/context-menu.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -374,7 +374,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/dialog",
|
"docs": "https://ui.shadcn.com/docs/components/base/dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/dialog-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/dialog.md"
|
"api": "https://base-ui.com/react/components/dialog.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -392,7 +392,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/drawer",
|
"docs": "https://ui.shadcn.com/docs/components/base/drawer",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/drawer-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/drawer-example.tsx",
|
||||||
"api": "https://vaul.emilkowal.ski/getting-started"
|
"api": "https://vaul.emilkowal.ski/getting-started"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -409,7 +409,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/dropdown-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/dropdown-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/dropdown-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/dropdown-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/menu.md"
|
"api": "https://base-ui.com/react/components/menu.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -426,7 +426,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/empty",
|
"docs": "https://ui.shadcn.com/docs/components/base/empty",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/empty-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/empty-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -443,7 +443,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/field",
|
"docs": "https://ui.shadcn.com/docs/components/base/field",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/field-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/field-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -463,7 +463,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/hover-card",
|
"docs": "https://ui.shadcn.com/docs/components/base/hover-card",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/hover-card-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/hover-card-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/hover-card.md"
|
"api": "https://base-ui.com/react/components/hover-card.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -480,7 +480,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input",
|
"docs": "https://ui.shadcn.com/docs/components/base/input",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -497,7 +497,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/input-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-group-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-group-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -514,7 +514,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/input-otp",
|
"docs": "https://ui.shadcn.com/docs/components/base/input-otp",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-otp-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/input-otp-example.tsx",
|
||||||
"api": "https://input-otp.rodz.dev"
|
"api": "https://input-otp.rodz.dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -532,7 +532,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/item",
|
"docs": "https://ui.shadcn.com/docs/components/base/item",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/item-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/item-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -548,7 +548,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/label",
|
"docs": "https://ui.shadcn.com/docs/components/base/label",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/label-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/label-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/label.md"
|
"api": "https://base-ui.com/react/components/label.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -566,7 +566,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/menubar",
|
"docs": "https://ui.shadcn.com/docs/components/base/menubar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/menubar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/menubar-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/menubar.md"
|
"api": "https://base-ui.com/react/components/menubar.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -583,7 +583,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/navigation-menu",
|
"docs": "https://ui.shadcn.com/docs/components/base/navigation-menu",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/navigation-menu-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/navigation-menu-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/navigation-menu.md"
|
"api": "https://base-ui.com/react/components/navigation-menu.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -601,7 +601,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/pagination",
|
"docs": "https://ui.shadcn.com/docs/components/base/pagination",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/pagination-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/pagination-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -617,7 +617,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/popover",
|
"docs": "https://ui.shadcn.com/docs/components/base/popover",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/popover-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/popover-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/popover.md"
|
"api": "https://base-ui.com/react/components/popover.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -634,7 +634,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/progress",
|
"docs": "https://ui.shadcn.com/docs/components/base/progress",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/progress-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/progress-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/progress.md"
|
"api": "https://base-ui.com/react/components/progress.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -651,7 +651,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/radio-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/radio-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/radio-group-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/radio-group-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/radio-group.md"
|
"api": "https://base-ui.com/react/components/radio-group.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -669,7 +669,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/resizable",
|
"docs": "https://ui.shadcn.com/docs/components/base/resizable",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/resizable-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/resizable-example.tsx",
|
||||||
"api": "https://github.com/bvaughn/react-resizable-panels"
|
"api": "https://github.com/bvaughn/react-resizable-panels"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -686,7 +686,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/scroll-area",
|
"docs": "https://ui.shadcn.com/docs/components/base/scroll-area",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/scroll-area-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/scroll-area-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/scroll-area.md"
|
"api": "https://base-ui.com/react/components/scroll-area.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -703,7 +703,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/select",
|
"docs": "https://ui.shadcn.com/docs/components/base/select",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/select-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/select-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/select.md"
|
"api": "https://base-ui.com/react/components/select.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -720,7 +720,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/separator",
|
"docs": "https://ui.shadcn.com/docs/components/base/separator",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/separator-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/separator-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/separator.md"
|
"api": "https://base-ui.com/react/components/separator.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -738,7 +738,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sheet",
|
"docs": "https://ui.shadcn.com/docs/components/base/sheet",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sheet-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sheet-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/dialog.md"
|
"api": "https://base-ui.com/react/components/dialog.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -764,7 +764,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sidebar",
|
"docs": "https://ui.shadcn.com/docs/components/base/sidebar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sidebar-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sidebar-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -780,7 +780,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/skeleton",
|
"docs": "https://ui.shadcn.com/docs/components/base/skeleton",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/skeleton-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/skeleton-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -796,7 +796,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/slider",
|
"docs": "https://ui.shadcn.com/docs/components/base/slider",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/slider-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/slider-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/slider.md"
|
"api": "https://base-ui.com/react/components/slider.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -814,7 +814,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sonner",
|
"docs": "https://ui.shadcn.com/docs/components/base/sonner",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sonner-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sonner-example.tsx",
|
||||||
"api": "https://sonner.emilkowal.ski"
|
"api": "https://sonner.emilkowal.ski"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -831,7 +831,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/spinner",
|
"docs": "https://ui.shadcn.com/docs/components/base/spinner",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/spinner-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/spinner-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -847,7 +847,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/switch",
|
"docs": "https://ui.shadcn.com/docs/components/base/switch",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/switch-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/switch-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/switch.md"
|
"api": "https://base-ui.com/react/components/switch.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -864,7 +864,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/table",
|
"docs": "https://ui.shadcn.com/docs/components/base/table",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/table-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/table-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -880,7 +880,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/tabs",
|
"docs": "https://ui.shadcn.com/docs/components/base/tabs",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/tabs-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/tabs-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/tabs.md"
|
"api": "https://base-ui.com/react/components/tabs.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -897,7 +897,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/textarea",
|
"docs": "https://ui.shadcn.com/docs/components/base/textarea",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/textarea-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/textarea-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -913,7 +913,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/toggle",
|
"docs": "https://ui.shadcn.com/docs/components/base/toggle",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/toggle-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/toggle-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/toggle.md"
|
"api": "https://base-ui.com/react/components/toggle.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -931,7 +931,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/toggle-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/toggle-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/toggle-group-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/toggle-group-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/toggle-group.md"
|
"api": "https://base-ui.com/react/components/toggle-group.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -948,7 +948,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/tooltip",
|
"docs": "https://ui.shadcn.com/docs/components/base/tooltip",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/tooltip-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/tooltip-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/tooltip.md"
|
"api": "https://base-ui.com/react/components/tooltip.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -966,7 +966,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/kbd",
|
"docs": "https://ui.shadcn.com/docs/components/base/kbd",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/kbd-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/kbd-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
@@ -982,7 +982,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/native-select",
|
"docs": "https://ui.shadcn.com/docs/components/base/native-select",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/native-select-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/native-select-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/resizable",
|
"docs": "https://ui.shadcn.com/docs/components/base/resizable",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/resizable-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/resizable-example.tsx",
|
||||||
"api": "https://github.com/bvaughn/react-resizable-panels"
|
"api": "https://github.com/bvaughn/react-resizable-panels"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/scroll-area",
|
"docs": "https://ui.shadcn.com/docs/components/base/scroll-area",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/scroll-area-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/scroll-area-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/scroll-area.md"
|
"api": "https://base-ui.com/react/components/scroll-area.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/select",
|
"docs": "https://ui.shadcn.com/docs/components/base/select",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/select-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/select-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/select.md"
|
"api": "https://base-ui.com/react/components/select.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/separator",
|
"docs": "https://ui.shadcn.com/docs/components/base/separator",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/separator-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/separator-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/separator.md"
|
"api": "https://base-ui.com/react/components/separator.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sheet",
|
"docs": "https://ui.shadcn.com/docs/components/base/sheet",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sheet-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sheet-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/dialog.md"
|
"api": "https://base-ui.com/react/components/dialog.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sidebar",
|
"docs": "https://ui.shadcn.com/docs/components/base/sidebar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sidebar-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sidebar-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/skeleton",
|
"docs": "https://ui.shadcn.com/docs/components/base/skeleton",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/skeleton-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/skeleton-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/slider",
|
"docs": "https://ui.shadcn.com/docs/components/base/slider",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/slider-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/slider-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/slider.md"
|
"api": "https://base-ui.com/react/components/slider.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/sonner",
|
"docs": "https://ui.shadcn.com/docs/components/base/sonner",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sonner-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/sonner-example.tsx",
|
||||||
"api": "https://sonner.emilkowal.ski"
|
"api": "https://sonner.emilkowal.ski"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/spinner",
|
"docs": "https://ui.shadcn.com/docs/components/base/spinner",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/spinner-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/spinner-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/switch",
|
"docs": "https://ui.shadcn.com/docs/components/base/switch",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/switch-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/switch-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/switch.md"
|
"api": "https://base-ui.com/react/components/switch.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/table",
|
"docs": "https://ui.shadcn.com/docs/components/base/table",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/table-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/table-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/tabs",
|
"docs": "https://ui.shadcn.com/docs/components/base/tabs",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/tabs-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/tabs-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/tabs.md"
|
"api": "https://base-ui.com/react/components/tabs.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/textarea",
|
"docs": "https://ui.shadcn.com/docs/components/base/textarea",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/textarea-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/textarea-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/toggle-group",
|
"docs": "https://ui.shadcn.com/docs/components/base/toggle-group",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/toggle-group-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/toggle-group-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/toggle-group.md"
|
"api": "https://base-ui.com/react/components/toggle-group.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/toggle",
|
"docs": "https://ui.shadcn.com/docs/components/base/toggle",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/toggle-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/toggle-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/toggle.md"
|
"api": "https://base-ui.com/react/components/toggle.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/tooltip",
|
"docs": "https://ui.shadcn.com/docs/components/base/tooltip",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/tooltip-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/tooltip-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/tooltip.md"
|
"api": "https://base-ui.com/react/components/tooltip.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/accordion",
|
"docs": "https://ui.shadcn.com/docs/components/base/accordion",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/accordion-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/accordion-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/accordion.md"
|
"api": "https://base-ui.com/react/components/accordion.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/alert-dialog",
|
"docs": "https://ui.shadcn.com/docs/components/base/alert-dialog",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/alert-dialog.md"
|
"api": "https://base-ui.com/react/components/alert-dialog.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/alert",
|
"docs": "https://ui.shadcn.com/docs/components/base/alert",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/alert-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/aspect-ratio",
|
"docs": "https://ui.shadcn.com/docs/components/base/aspect-ratio",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/avatar",
|
"docs": "https://ui.shadcn.com/docs/components/base/avatar",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/avatar-example.tsx",
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/avatar-example.tsx",
|
||||||
"api": "https://base-ui.com/react/components/avatar.md"
|
"api": "https://base-ui.com/react/components/avatar.md"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"links": {
|
"links": {
|
||||||
"docs": "https://ui.shadcn.com/docs/components/base/badge",
|
"docs": "https://ui.shadcn.com/docs/components/base/badge",
|
||||||
"examples": "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/badge-example.tsx"
|
"examples": "https://ui.shadcn.com/code/apps/v4/registry/bases/base/examples/badge-example.tsx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "registry:ui"
|
"type": "registry:ui"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user